8
8
// option. This file may not be copied, modified, or distributed
9
9
// except according to those terms.
10
10
11
-
12
- #![ feature( intrinsics, core) ]
13
-
14
11
macro_rules! assert_approx_eq {
15
12
( $a: expr, $b: expr) => ( {
16
13
let ( a, b) = ( & $a, & $b) ;
@@ -19,96 +16,52 @@ macro_rules! assert_approx_eq {
19
16
} )
20
17
}
21
18
22
- mod rusti {
23
- extern "rust-intrinsic" {
24
- pub fn sqrtf32 ( x : f32 ) -> f32 ;
25
- pub fn sqrtf64 ( x : f64 ) -> f64 ;
26
- pub fn powif32 ( a : f32 , x : i32 ) -> f32 ;
27
- pub fn powif64 ( a : f64 , x : i32 ) -> f64 ;
28
- pub fn sinf32 ( x : f32 ) -> f32 ;
29
- pub fn sinf64 ( x : f64 ) -> f64 ;
30
- pub fn cosf32 ( x : f32 ) -> f32 ;
31
- pub fn cosf64 ( x : f64 ) -> f64 ;
32
- pub fn powf32 ( a : f32 , x : f32 ) -> f32 ;
33
- pub fn powf64 ( a : f64 , x : f64 ) -> f64 ;
34
- pub fn expf32 ( x : f32 ) -> f32 ;
35
- pub fn expf64 ( x : f64 ) -> f64 ;
36
- pub fn exp2f32 ( x : f32 ) -> f32 ;
37
- pub fn exp2f64 ( x : f64 ) -> f64 ;
38
- pub fn logf32 ( x : f32 ) -> f32 ;
39
- pub fn logf64 ( x : f64 ) -> f64 ;
40
- pub fn log10f32 ( x : f32 ) -> f32 ;
41
- pub fn log10f64 ( x : f64 ) -> f64 ;
42
- pub fn log2f32 ( x : f32 ) -> f32 ;
43
- pub fn log2f64 ( x : f64 ) -> f64 ;
44
- pub fn fmaf32 ( a : f32 , b : f32 , c : f32 ) -> f32 ;
45
- pub fn fmaf64 ( a : f64 , b : f64 , c : f64 ) -> f64 ;
46
- pub fn fabsf32 ( x : f32 ) -> f32 ;
47
- pub fn fabsf64 ( x : f64 ) -> f64 ;
48
- pub fn floorf32 ( x : f32 ) -> f32 ;
49
- pub fn floorf64 ( x : f64 ) -> f64 ;
50
- pub fn ceilf32 ( x : f32 ) -> f32 ;
51
- pub fn ceilf64 ( x : f64 ) -> f64 ;
52
- pub fn truncf32 ( x : f32 ) -> f32 ;
53
- pub fn truncf64 ( x : f64 ) -> f64 ;
54
- }
55
- }
56
-
57
19
pub fn main ( ) {
58
- unsafe {
59
- use rusti:: * ;
60
-
61
- use std:: f32;
62
- use std:: f64;
63
-
64
- assert_approx_eq ! ( sqrtf32( 64f32 ) , 8f32 ) ;
65
- assert_approx_eq ! ( sqrtf64( 64f64 ) , 8f64 ) ;
20
+ use std:: f32;
21
+ use std:: f64;
66
22
67
- assert_approx_eq ! ( powif32 ( 25f32 , - 2 ) , 0.0016f32 ) ;
68
- assert_approx_eq ! ( powif64 ( 23.2f64 , 2 ) , 538.24f64 ) ;
23
+ assert_approx_eq ! ( 64f32 . sqrt ( ) , 8f32 ) ;
24
+ assert_approx_eq ! ( 64f64 . sqrt ( ) , 8f64 ) ;
69
25
70
- assert_approx_eq ! ( sinf32 ( 0f32 ) , 0f32 ) ;
71
- assert_approx_eq ! ( sinf64 ( f64 :: consts :: PI / 2f64 ) , 1f64 ) ;
26
+ assert_approx_eq ! ( 25f32 . powi ( - 2 ) , 0.0016f32 ) ;
27
+ assert_approx_eq ! ( 23. 2f64. powi ( 2 ) , 538.24f64 ) ;
72
28
73
- assert_approx_eq ! ( cosf32 ( 0f32 ) , 1f32 ) ;
74
- assert_approx_eq ! ( cosf64 ( f64 :: consts:: PI * 2f64 ) , 1f64 ) ;
29
+ assert_approx_eq ! ( 0f32 . sin ( ) , 0f32 ) ;
30
+ assert_approx_eq ! ( ( f64 :: consts:: PI / 2f64 ) . sin ( ) , 1f64 ) ;
75
31
76
- assert_approx_eq ! ( powf32 ( 25f32 , - 2f32 ) , 0.0016f32 ) ;
77
- assert_approx_eq ! ( powf64 ( 400f64 , 0.5f64 ) , 20f64 ) ;
32
+ assert_approx_eq ! ( 0f32 . cos ( ) , 1f32 ) ;
33
+ assert_approx_eq ! ( ( f64 :: consts :: PI * 2f64 ) . cos ( ) , 1f64 ) ;
78
34
79
- assert_approx_eq ! ( fabsf32 ( expf32 ( 1f32 ) - f32 :: consts :: E ) , 0f32 ) ;
80
- assert_approx_eq ! ( expf64 ( 1f64 ) , f64 :: consts :: E ) ;
35
+ assert_approx_eq ! ( 25f32 . powf ( - 2f32 ) , 0.0016f32 ) ;
36
+ assert_approx_eq ! ( 400f64 . powf ( 0.5f64 ) , 20f64 ) ;
81
37
82
- assert_approx_eq ! ( exp2f32 ( 10f32 ) , 1024f32 ) ;
83
- assert_approx_eq ! ( exp2f64 ( 50f64 ) , 1125899906842624f64 ) ;
38
+ assert_approx_eq ! ( ( 1f32 . exp ( ) - f32 :: consts :: E ) . abs ( ) , 0f32 ) ;
39
+ assert_approx_eq ! ( 1f64 . exp ( ) , f64 :: consts :: E ) ;
84
40
85
- assert_approx_eq ! ( fabsf32 ( logf32 ( f32 :: consts :: E ) - 1f32 ) , 0f32 ) ;
86
- assert_approx_eq ! ( logf64 ( 1f64 ) , 0f64 ) ;
41
+ assert_approx_eq ! ( 10f32 . exp2 ( ) , 1024f32 ) ;
42
+ assert_approx_eq ! ( 50f64 . exp2 ( ) , 1125899906842624f64 ) ;
87
43
88
- assert_approx_eq ! ( log10f32 ( 10f32 ) , 1f32 ) ;
89
- assert_approx_eq ! ( log10f64 ( f64 :: consts :: E ) , f64 :: consts :: LOG10_E ) ;
44
+ assert_approx_eq ! ( ( f32 :: consts :: E . ln ( ) - 1f32 ) . abs ( ) , 0f32 ) ;
45
+ assert_approx_eq ! ( 1f64 . ln ( ) , 0f64 ) ;
90
46
91
- assert_approx_eq ! ( log2f32 ( 8f32 ) , 3f32 ) ;
92
- assert_approx_eq ! ( log2f64 ( f64 :: consts:: E ) , f64 :: consts:: LOG2_E ) ;
47
+ assert_approx_eq ! ( 10f32 . log10 ( ) , 1f32 ) ;
48
+ assert_approx_eq ! ( f64 :: consts:: E . log10 ( ) , f64 :: consts:: LOG10_E ) ;
93
49
94
- assert_approx_eq ! ( fmaf32 ( 1.0f32 , 2.0f32 , 5.0f32 ) , 7.0f32 ) ;
95
- assert_approx_eq ! ( fmaf64 ( 0.0f64 , - 2.0f64 , f64 :: consts:: E ) , f64 :: consts:: E ) ;
50
+ assert_approx_eq ! ( 8f32 . log2 ( ) , 3f32 ) ;
51
+ assert_approx_eq ! ( f64 :: consts:: E . log2 ( ) , f64 :: consts:: LOG2_E ) ;
96
52
97
- assert_approx_eq ! ( fabsf32 ( - 1.0f32 ) , 1 .0f32) ;
98
- assert_approx_eq ! ( fabsf64 ( 34.2f64 ) , 34.2f64 ) ;
53
+ assert_approx_eq ! ( 1.0f32 . mul_add ( 2.0f32 , 5.0f32 ) , 7 .0f32) ;
54
+ assert_approx_eq ! ( 0.0f64 . mul_add ( - 2.0f64 , f64 :: consts :: E ) , f64 :: consts :: E ) ;
99
55
100
- assert_approx_eq ! ( floorf32 ( 3.8f32 ) , 3 .0f32) ;
101
- assert_approx_eq ! ( floorf64 ( - 1.1f64 ) , - 2.0f64 ) ;
56
+ assert_approx_eq ! ( ( - 1.0f32 ) . abs ( ) , 1 .0f32) ;
57
+ assert_approx_eq ! ( 34.2f64 . abs ( ) , 34.2f64 ) ;
102
58
103
- // Causes linker error
104
- // undefined reference to llvm.ceil.f32/64
105
- //assert_eq!(ceilf32(-2.3f32), -2.0f32);
106
- //assert_eq!(ceilf64(3.8f64), 4.0f64);
59
+ assert_approx_eq ! ( 3.8f32 . floor( ) , 3.0f32 ) ;
60
+ assert_approx_eq ! ( ( -1.1f64 ) . floor( ) , -2.0f64 ) ;
107
61
108
- // Causes linker error
109
- // undefined reference to llvm.trunc.f32/64
110
- //assert_eq!(truncf32(0.1f32), 0.0f32);
111
- //assert_eq!(truncf64(-0.1f64), 0.0f64);
112
- }
62
+ assert_approx_eq ! ( ( -2.3f32 ) . ceil( ) , -2.0f32 ) ;
63
+ assert_approx_eq ! ( 3.8f64 . ceil( ) , 4.0f64 ) ;
113
64
65
+ assert_approx_eq ! ( 0.1f32 . trunc( ) , 0.0f32 ) ;
66
+ assert_approx_eq ! ( ( -0.1f64 ) . trunc( ) , 0.0f64 ) ;
114
67
}
0 commit comments