@@ -32,6 +32,18 @@ fn test_add() {
3232assert_eq ! ( add( 1.0 , f64 :: NEG_INFINITY ) , Ok ( f64 :: NEG_INFINITY ) ) ;
3333}
3434
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+
3547#[ test]
3648fn test_sub ( ) {
3749let sub =jit_function ! { sub( a: f64 , b: f64 ) ->f64 =>r##"
@@ -49,6 +61,19 @@ fn test_sub() {
4961assert_eq ! ( sub( 1.0 , f64 :: INFINITY ) , Ok ( f64 :: NEG_INFINITY ) ) ;
5062}
5163
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+
5277#[ test]
5378fn test_mul ( ) {
5479let mul =jit_function ! { mul( a: f64 , b: f64 ) ->f64 =>r##"
@@ -70,6 +95,21 @@ fn test_mul() {
7095assert_eq ! ( mul( f64 :: NEG_INFINITY , f64 :: INFINITY ) , Ok ( f64 :: NEG_INFINITY ) ) ;
7196}
7297
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+
73113#[ test]
74114fn test_div ( ) {
75115let div =jit_function ! { div( a: f64 , b: f64 ) ->f64 =>r##"
@@ -91,6 +131,23 @@ fn test_div() {
91131assert_bits_eq ! ( div( -1.0 , f64 :: INFINITY ) , Ok ( -0.0f64 ) ) ;
92132}
93133
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+
94151#[ test]
95152fn test_if_bool ( ) {
96153let if_bool =jit_function ! { if_bool( a: f64 ) ->i64 =>r##"