]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/consts/const-float-classify.rs
1 // compile-flags: -Zmir-opt-level=0
4 #![feature(const_float_bits_conv)]
5 #![feature(const_float_classify)]
6 #![feature(const_trait_impl)]
9 const fn nop
<T
>(x
: T
) -> T { x }
11 macro_rules
! const_assert
{
12 ($a
:expr
, $b
:expr
) => {
14 const _
: () = assert
!($a
== $b
);
15 assert_eq
!(nop($a
), nop($b
));
23 suite_inner
!(f32 $
($tt
)*);
27 suite_inner
!(f64 $
($tt
)*);
33 macro_rules
! suite_inner
{
35 $ty
:ident
[$
( $
fn:ident
),*]
36 $val
:expr
=> [$
($out
:ident
),*]
40 $
( const_assert
!($ty
::$
fn($val
), $out
); )*
41 suite_inner
!($ty
[$
($
fn),*] $
($tail
)*)
44 ( $ty
:ident
[$
( $
fn:ident
),*]) => {}
;
50 impl const PartialEq
<NonDet
> for bool
{
51 fn eq(&self, _
: &NonDet
) -> bool
{
54 fn ne(&self, _
: &NonDet
) -> bool
{
59 // The result of the `is_sign` methods are not checked for correctness, since LLVM does not
60 // guarantee anything about the signedness of NaNs. See
61 // https://github.com/rust-lang/rust/issues/55131.
64 [is_nan
, is_infinite
, is_finite
, is_normal
, is_sign_positive
, is_sign_negative
]
65 -0.0 / 0.0 => [ true, false, false, false, NonDet
, NonDet
]
66 0.0 / 0.0 => [ true, false, false, false, NonDet
, NonDet
]
67 1.0 => [ false, false, true, true, true, false]
68 -1.0 => [ false, false, true, true, false, true]
69 0.0 => [ false, false, true, false, true, false]
70 -0.0 => [ false, false, true, false, false, true]
71 1.0 / 0.0 => [ false, true, false, false, true, false]
72 -1.0 / 0.0 => [ false, true, false, false, false, true]