1
1
use core:: num:: dec2flt:: float:: RawFloat ;
2
2
3
+ use crate :: num:: { ldexp_f16, ldexp_f32, ldexp_f64} ;
4
+
3
5
// FIXME(f16_f128): enable on all targets once possible.
4
6
#[ test]
5
7
#[ cfg( target_has_reliable_f16) ]
6
8
fn test_f16_integer_decode ( ) {
7
9
assert_eq ! ( 3.14159265359f16 . integer_decode( ) , ( 1608 , -9 , 1 ) ) ;
8
10
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 ) ) ;
11
12
assert_eq ! ( 0 f16. integer_decode( ) , ( 0 , -25 , 1 ) ) ;
12
13
assert_eq ! ( ( -0 f16) . integer_decode( ) , ( 0 , -25 , -1 ) ) ;
13
14
assert_eq ! ( f16:: INFINITY . integer_decode( ) , ( 1 << 10 , 6 , 1 ) ) ;
@@ -23,8 +24,7 @@ fn test_f16_integer_decode() {
23
24
fn test_f32_integer_decode ( ) {
24
25
assert_eq ! ( 3.14159265359f32 . integer_decode( ) , ( 13176795 , -22 , 1 ) ) ;
25
26
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 ) ) ;
28
28
assert_eq ! ( 0f32 . integer_decode( ) , ( 0 , -150 , 1 ) ) ;
29
29
assert_eq ! ( ( -0f32 ) . integer_decode( ) , ( 0 , -150 , -1 ) ) ;
30
30
assert_eq ! ( f32 :: INFINITY . integer_decode( ) , ( 8388608 , 105 , 1 ) ) ;
@@ -40,8 +40,7 @@ fn test_f32_integer_decode() {
40
40
fn test_f64_integer_decode ( ) {
41
41
assert_eq ! ( 3.14159265359f64 . integer_decode( ) , ( 7074237752028906 , -51 , 1 ) ) ;
42
42
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 ) ) ;
45
44
assert_eq ! ( 0f64 . integer_decode( ) , ( 0 , -1075 , 1 ) ) ;
46
45
assert_eq ! ( ( -0f64 ) . integer_decode( ) , ( 0 , -1075 , -1 ) ) ;
47
46
assert_eq ! ( f64 :: INFINITY . integer_decode( ) , ( 4503599627370496 , 972 , 1 ) ) ;
0 commit comments