1
1
#![ allow( non_snake_case) ]
2
2
3
+ extern crate approx;
3
4
extern crate ndarray;
4
5
extern crate defmac;
5
6
extern crate itertools;
@@ -12,6 +13,10 @@ use ndarray::{
12
13
multislice,
13
14
} ;
14
15
use ndarray:: indices;
16
+ use approx:: {
17
+ assert_abs_diff_eq, assert_abs_diff_ne, assert_relative_eq, assert_relative_ne, assert_ulps_eq,
18
+ assert_ulps_ne,
19
+ } ;
15
20
use defmac:: defmac;
16
21
use itertools:: { enumerate, zip} ;
17
22
@@ -1163,6 +1168,60 @@ fn equality()
1163
1168
assert ! ( a != c) ;
1164
1169
}
1165
1170
1171
+ #[ test]
1172
+ fn abs_diff_eq ( )
1173
+ {
1174
+ let a: Array2 < f32 > = array ! [ [ 0. , 2. ] , [ -0.000010001 , 100000000. ] ] ;
1175
+ let mut b: Array2 < f32 > = array ! [ [ 0. , 1. ] , [ -0.000010002 , 100000001. ] ] ;
1176
+ assert_abs_diff_ne ! ( a, b) ;
1177
+ b[ ( 0 , 1 ) ] = 2. ;
1178
+ assert_abs_diff_eq ! ( a, b) ;
1179
+
1180
+ // Check epsilon.
1181
+ assert_abs_diff_eq ! ( array![ 0.0f32 ] , array![ 1e-40f32 ] , epsilon = 1e-40f32 ) ;
1182
+ assert_abs_diff_ne ! ( array![ 0.0f32 ] , array![ 1e-40f32 ] , epsilon = 1e-41f32 ) ;
1183
+
1184
+ // Make sure we can compare different shapes without failure.
1185
+ let c = array ! [ [ 1. , 2. ] ] ;
1186
+ assert_abs_diff_ne ! ( a, c) ;
1187
+ }
1188
+
1189
+ #[ test]
1190
+ fn relative_eq ( )
1191
+ {
1192
+ let a: Array2 < f32 > = array ! [ [ 1. , 2. ] , [ -0.000010001 , 100000000. ] ] ;
1193
+ let mut b: Array2 < f32 > = array ! [ [ 1. , 1. ] , [ -0.000010002 , 100000001. ] ] ;
1194
+ assert_relative_ne ! ( a, b) ;
1195
+ b[ ( 0 , 1 ) ] = 2. ;
1196
+ assert_relative_eq ! ( a, b) ;
1197
+
1198
+ // Check epsilon.
1199
+ assert_relative_eq ! ( array![ 0.0f32 ] , array![ 1e-40f32 ] , epsilon = 1e-40f32 ) ;
1200
+ assert_relative_ne ! ( array![ 0.0f32 ] , array![ 1e-40f32 ] , epsilon = 1e-41f32 ) ;
1201
+
1202
+ // Make sure we can compare different shapes without failure.
1203
+ let c = array ! [ [ 1. , 2. ] ] ;
1204
+ assert_relative_ne ! ( a, c) ;
1205
+ }
1206
+
1207
+ #[ test]
1208
+ fn ulps_eq ( )
1209
+ {
1210
+ let a: Array2 < f32 > = array ! [ [ 1. , 2. ] , [ -0.000010001 , 100000000. ] ] ;
1211
+ let mut b: Array2 < f32 > = array ! [ [ 1. , 1. ] , [ -0.000010002 , 100000001. ] ] ;
1212
+ assert_ulps_ne ! ( a, b) ;
1213
+ b[ ( 0 , 1 ) ] = 2. ;
1214
+ assert_ulps_eq ! ( a, b) ;
1215
+
1216
+ // Check epsilon.
1217
+ assert_ulps_eq ! ( array![ 0.0f32 ] , array![ 1e-40f32 ] , epsilon = 1e-40f32 ) ;
1218
+ assert_ulps_ne ! ( array![ 0.0f32 ] , array![ 1e-40f32 ] , epsilon = 1e-41f32 ) ;
1219
+
1220
+ // Make sure we can compare different shapes without failure.
1221
+ let c = array ! [ [ 1. , 2. ] ] ;
1222
+ assert_ulps_ne ! ( a, c) ;
1223
+ }
1224
+
1166
1225
#[ test]
1167
1226
fn map1 ( )
1168
1227
{
0 commit comments