@@ -32,6 +32,18 @@ fn test_add() {
32
32
assert_eq ! ( add( 1.0 , f64 :: NEG_INFINITY ) , Ok ( f64 :: NEG_INFINITY ) ) ;
33
33
}
34
34
35
+ #[ test]
36
+ fn test_add_with_integer ( ) {
37
+ let add = jit_function ! { add( a: f64 , b: i64 ) -> f64 => r##"
38
+ def add(a: float, b: int):
39
+ return a + b
40
+ "## } ;
41
+
42
+ assert_approx_eq ! ( add( 5.5 , 10 ) , Ok ( 15.5 ) ) ;
43
+ assert_approx_eq ! ( add( -4.6 , 7 ) , Ok ( 2.4 ) ) ;
44
+ assert_approx_eq ! ( add( -5.2 , -3 ) , Ok ( -8.2 ) ) ;
45
+ }
46
+
35
47
#[ test]
36
48
fn test_sub ( ) {
37
49
let sub = jit_function ! { sub( a: f64 , b: f64 ) -> f64 => r##"
@@ -49,6 +61,19 @@ fn test_sub() {
49
61
assert_eq ! ( sub( 1.0 , f64 :: INFINITY ) , Ok ( f64 :: NEG_INFINITY ) ) ;
50
62
}
51
63
64
+ #[ test]
65
+ fn test_sub_with_integer ( ) {
66
+ let sub = jit_function ! { sub( a: i64 , b: f64 ) -> f64 => r##"
67
+ def sub(a: int, b: float):
68
+ return a - b
69
+ "## } ;
70
+
71
+ assert_approx_eq ! ( sub( 5 , 3.6 ) , Ok ( 1.4 ) ) ;
72
+ assert_approx_eq ! ( sub( 3 , -4.2 ) , Ok ( 7.2 ) ) ;
73
+ assert_approx_eq ! ( sub( -2 , 1.3 ) , Ok ( -3.3 ) ) ;
74
+ assert_approx_eq ! ( sub( -3 , -1.3 ) , Ok ( -1.7 ) ) ;
75
+ }
76
+
52
77
#[ test]
53
78
fn test_mul ( ) {
54
79
let mul = jit_function ! { mul( a: f64 , b: f64 ) -> f64 => r##"
@@ -70,6 +95,21 @@ fn test_mul() {
70
95
assert_eq ! ( mul( f64 :: NEG_INFINITY , f64 :: INFINITY ) , Ok ( f64 :: NEG_INFINITY ) ) ;
71
96
}
72
97
98
+ #[ test]
99
+ fn test_mul_with_integer ( ) {
100
+ let mul = jit_function ! { mul( a: f64 , b: i64 ) -> f64 => r##"
101
+ def mul(a: float, b: int):
102
+ return a * b
103
+ "## } ;
104
+
105
+ assert_approx_eq ! ( mul( 5.2 , 2 ) , Ok ( 10.4 ) ) ;
106
+ assert_approx_eq ! ( mul( 3.4 , -1 ) , Ok ( -3.4 ) ) ;
107
+ assert_bits_eq ! ( mul( 1.0 , 0 ) , Ok ( 0.0f64 ) ) ;
108
+ assert_bits_eq ! ( mul( -0.0 , 1 ) , Ok ( -0.0f64 ) ) ;
109
+ assert_bits_eq ! ( mul( 0.0 , -1 ) , Ok ( -0.0f64 ) ) ;
110
+ assert_bits_eq ! ( mul( -0.0 , -1 ) , Ok ( 0.0f64 ) ) ;
111
+ }
112
+
73
113
#[ test]
74
114
fn test_div ( ) {
75
115
let div = jit_function ! { div( a: f64 , b: f64 ) -> f64 => r##"
@@ -91,6 +131,23 @@ fn test_div() {
91
131
assert_bits_eq ! ( div( -1.0 , f64 :: INFINITY ) , Ok ( -0.0f64 ) ) ;
92
132
}
93
133
134
+ #[ test]
135
+ fn test_div_with_integer ( ) {
136
+ let div = jit_function ! { div( a: f64 , b: i64 ) -> f64 => r##"
137
+ def div(a: float, b: int):
138
+ return a / b
139
+ "## } ;
140
+
141
+ assert_approx_eq ! ( div( 5.2 , 2 ) , Ok ( 2.6 ) ) ;
142
+ assert_approx_eq ! ( div( 3.4 , -1 ) , Ok ( -3.4 ) ) ;
143
+ assert_eq ! ( div( 1.0 , 0 ) , Ok ( f64 :: INFINITY ) ) ;
144
+ assert_eq ! ( div( 1.0 , -0 ) , Ok ( f64 :: INFINITY ) ) ;
145
+ assert_eq ! ( div( -1.0 , 0 ) , Ok ( f64 :: NEG_INFINITY ) ) ;
146
+ assert_eq ! ( div( -1.0 , -0 ) , Ok ( f64 :: NEG_INFINITY ) ) ;
147
+ assert_eq ! ( div( f64 :: INFINITY , 2 ) , Ok ( f64 :: INFINITY ) ) ;
148
+ assert_eq ! ( div( f64 :: NEG_INFINITY , 3 ) , Ok ( f64 :: NEG_INFINITY ) ) ;
149
+ }
150
+
94
151
#[ test]
95
152
fn test_if_bool ( ) {
96
153
let if_bool = jit_function ! { if_bool( a: f64 ) -> i64 => r##"
0 commit comments