blob: ed143c2c2b2fab7b60e4261522fea29bfe89a473 [file]
// FIXME(f16b):
// This file compiled unoptimised in some function calls, such as `to_bits()`,
// emit a call to `__truncsfbf2` which fails in the CI see here for more;
// <https://github.com/rust-lang/rust/pull/160859#issuecomment-5740296334>
// Remove `-C-opt-level=3` once the `__truncsfbf2` symbol is in
// compiler-builtins.
//
//@ compile-flags: --check-cfg=cfg(target_has_reliable_f16b) -Copt-level=3
//@ run-pass
#![feature(f16b, cfg_target_has_reliable_f16b)]
extern crate core;
use core::num::f16b;
#[cfg(target_has_reliable_f16b)]
use std::fmt::{Debug, LowerExp, UpperExp};
#[cfg(target_has_reliable_f16b)]
const ONE: f16b = f16b::from_bits(0x3f80);
#[cfg(target_has_reliable_f16b)]
const ONE_BITS: u16 = ONE.to_bits();
#[cfg(target_has_reliable_f16b)]
fn assert_traits<T>()
where
T: Default + Copy + Clone + Debug + LowerExp + UpperExp + PartialEq + PartialOrd,
{
}
fn main() {
assert_eq!(size_of::<f16b>(), 2);
assert_eq!(align_of::<f16b>(), 2);
#[cfg(target_has_reliable_f16b)]
{
assert_traits::<f16b>();
assert_eq!(f16b::default().to_bits(), 0);
assert_eq!(ONE_BITS, 0x3f80);
assert_eq!(f32::from(ONE).to_bits(), 0x3f80_0000);
let two = f16b::from_bits(0x4000);
let negative_zero = f16b::from_bits(0x8000);
let nan = f16b::from_bits(0x7fc0);
assert!(ONE < two);
assert_eq!(f16b::from_bits(0), negative_zero);
assert!(nan != nan);
assert_eq!(format!("{ONE:?}"), "1.0");
assert_eq!(format!("{ONE:e}"), "1e0");
assert_eq!(format!("{ONE:E}"), "1E0");
}
}