11use  core:: num:: dec2flt:: float:: RawFloat ; 
22
3+ use  crate :: num:: { ldexp_f16,  ldexp_f32,  ldexp_f64} ; 
4+ 
35// FIXME(f16_f128): enable on all targets once possible. 
46#[ test]  
57#[ cfg( target_has_reliable_f16) ]  
68fn  test_f16_integer_decode ( )  { 
79    assert_eq ! ( 3.14159265359f16 . integer_decode( ) ,  ( 1608 ,  -9 ,  1 ) ) ; 
810    assert_eq ! ( ( -8573.5918555f16 ) . integer_decode( ) ,  ( 1072 ,  3 ,  -1 ) ) ; 
9-     #[ cfg( not( miri) ) ]   // miri doesn't have powf16 
10-     assert_eq ! ( 2 f16. powf( 14.0 ) . integer_decode( ) ,  ( 1  << 10 ,  4 ,  1 ) ) ; 
11+     assert_eq ! ( ldexp_f16( 1.0 ,  14 ) . integer_decode( ) ,  ( 1  << 10 ,  4 ,  1 ) ) ; 
1112    assert_eq ! ( 0 f16. integer_decode( ) ,  ( 0 ,  -25 ,  1 ) ) ; 
1213    assert_eq ! ( ( -0 f16) . integer_decode( ) ,  ( 0 ,  -25 ,  -1 ) ) ; 
1314    assert_eq ! ( f16:: INFINITY . integer_decode( ) ,  ( 1  << 10 ,  6 ,  1 ) ) ; 
@@ -23,8 +24,7 @@ fn test_f16_integer_decode() {
2324fn  test_f32_integer_decode ( )  { 
2425    assert_eq ! ( 3.14159265359f32 . integer_decode( ) ,  ( 13176795 ,  -22 ,  1 ) ) ; 
2526    assert_eq ! ( ( -8573.5918555f32 ) . integer_decode( ) ,  ( 8779358 ,  -10 ,  -1 ) ) ; 
26-     // Set 2^100 directly instead of using powf, because it doesn't guarantee precision 
27-     assert_eq ! ( 1.2676506e30_f32 . integer_decode( ) ,  ( 8388608 ,  77 ,  1 ) ) ; 
27+     assert_eq ! ( ldexp_f32( 1.0 ,  100 ) . integer_decode( ) ,  ( 8388608 ,  77 ,  1 ) ) ; 
2828    assert_eq ! ( 0f32 . integer_decode( ) ,  ( 0 ,  -150 ,  1 ) ) ; 
2929    assert_eq ! ( ( -0f32 ) . integer_decode( ) ,  ( 0 ,  -150 ,  -1 ) ) ; 
3030    assert_eq ! ( f32 :: INFINITY . integer_decode( ) ,  ( 8388608 ,  105 ,  1 ) ) ; 
@@ -40,8 +40,7 @@ fn test_f32_integer_decode() {
4040fn  test_f64_integer_decode ( )  { 
4141    assert_eq ! ( 3.14159265359f64 . integer_decode( ) ,  ( 7074237752028906 ,  -51 ,  1 ) ) ; 
4242    assert_eq ! ( ( -8573.5918555f64 ) . integer_decode( ) ,  ( 4713381968463931 ,  -39 ,  -1 ) ) ; 
43-     // Set 2^100 directly instead of using powf, because it doesn't guarantee precision 
44-     assert_eq ! ( 1.2676506002282294e30_f64 . integer_decode( ) ,  ( 4503599627370496 ,  48 ,  1 ) ) ; 
43+     assert_eq ! ( ldexp_f64( 1.0 ,  100 ) . integer_decode( ) ,  ( 4503599627370496 ,  48 ,  1 ) ) ; 
4544    assert_eq ! ( 0f64 . integer_decode( ) ,  ( 0 ,  -1075 ,  1 ) ) ; 
4645    assert_eq ! ( ( -0f64 ) . integer_decode( ) ,  ( 0 ,  -1075 ,  -1 ) ) ; 
4746    assert_eq ! ( f64 :: INFINITY . integer_decode( ) ,  ( 4503599627370496 ,  972 ,  1 ) ) ; 
0 commit comments