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