@@ -2,6 +2,12 @@ use ndarray::array;
2
2
use numpy:: { NpyMultiIterBuilder , NpySingleIterBuilder , PyArray } ;
3
3
use pyo3:: PyResult ;
4
4
5
+ macro_rules! assert_approx_eq {
6
+ ( $x: expr, $y: expr) => {
7
+ assert!( ( $x - $y) <= std:: f64 :: EPSILON ) ;
8
+ } ;
9
+ }
10
+
5
11
#[ test]
6
12
fn readonly_iter ( ) -> PyResult < ( ) > {
7
13
let gil = pyo3:: Python :: acquire_gil ( ) ;
@@ -12,7 +18,7 @@ fn readonly_iter() -> PyResult<()> {
12
18
13
19
// The order of iteration is not specified, so we should restrict ourselves
14
20
// to tests that don't verify a given order.
15
- assert_eq ! ( iter. sum:: <f64 >( ) , 15.0 ) ;
21
+ assert_approx_eq ! ( iter. sum:: <f64 >( ) , 15.0 ) ;
16
22
Ok ( ( ) )
17
23
}
18
24
@@ -24,10 +30,10 @@ fn mutable_iter() -> PyResult<()> {
24
30
let arr = PyArray :: from_array ( gil. python ( ) , & data) ;
25
31
let iter = NpySingleIterBuilder :: readwrite ( arr) . build ( ) ?;
26
32
for elem in iter {
27
- * elem = * elem * 2.0 ;
33
+ * elem *= 2.0 ;
28
34
}
29
35
let iter = NpySingleIterBuilder :: readonly ( arr. readonly ( ) ) . build ( ) ?;
30
- assert_eq ! ( iter. sum:: <f64 >( ) , 30.0 ) ;
36
+ assert_approx_eq ! ( iter. sum:: <f64 >( ) , 30.0 ) ;
31
37
Ok ( ( ) )
32
38
}
33
39
@@ -52,7 +58,7 @@ fn multiiter_rr() -> PyResult<()> {
52
58
sum += * x * * y;
53
59
}
54
60
55
- assert_eq ! ( sum, 145.0 ) ;
61
+ assert_approx_eq ! ( sum, 145.0 ) ;
56
62
Ok ( ( ) )
57
63
}
58
64
@@ -80,7 +86,7 @@ fn multiiter_rw() -> PyResult<()> {
80
86
. build ( ) ?;
81
87
82
88
for ( x, y) in iter {
83
- assert_eq ! ( * x * 2.0 , * y) ;
89
+ assert_approx_eq ! ( * x * 2.0 , * y) ;
84
90
}
85
91
86
92
Ok ( ( ) )
0 commit comments