@@ -4,9 +4,7 @@ module.exports = {
4
4
toBeCloseToArray : function ( ) {
5
5
return {
6
6
compare : function ( actual , expected , precision ) {
7
- if ( precision !== 0 ) {
8
- precision = Math . pow ( 10 , - precision ) / 2 || 0.005 ;
9
- }
7
+ precision = coercePosition ( precision ) ;
10
8
11
9
var tested = actual . map ( function ( element , i ) {
12
10
return Math . abs ( expected [ i ] - element ) < precision ;
@@ -23,5 +21,59 @@ module.exports = {
23
21
} ;
24
22
}
25
23
} ;
26
- }
24
+ } ,
25
+
26
+ // toBeCloseTo... but for 2D arrays
27
+ toBeCloseTo2DArray : function ( ) {
28
+ return {
29
+ compare : function ( actual , expected , precision ) {
30
+ precision = coercePosition ( precision ) ;
31
+
32
+ var passed = true ;
33
+
34
+ if ( expected . length !== actual . length ) passed = false ;
35
+ else {
36
+ for ( var i = 0 ; i < expected . length ; ++ i ) {
37
+ if ( expected [ i ] . length !== actual [ i ] . length ) {
38
+ passed = false ;
39
+ break ;
40
+ }
41
+
42
+ for ( var j = 0 ; j < expected [ i ] . length ; ++ j ) {
43
+ var isClose = Math . abs ( expected [ i ] [ j ] - actual [ i ] [ j ] ) < precision ;
44
+
45
+ if ( ! isClose ) {
46
+ passed = false ;
47
+ break ;
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ var message = [
54
+ 'Expected' ,
55
+ arrayToStr ( actual . map ( arrayToStr ) ) ,
56
+ 'to be close to' ,
57
+ arrayToStr ( expected . map ( arrayToStr ) )
58
+ ] . join ( ' ' ) ;
59
+
60
+ return {
61
+ pass : passed ,
62
+ message : message
63
+ } ;
64
+ }
65
+ } ;
66
+ } ,
27
67
} ;
68
+
69
+ function coercePosition ( precision ) {
70
+ if ( precision !== 0 ) {
71
+ precision = Math . pow ( 10 , - precision ) / 2 || 0.005 ;
72
+ }
73
+
74
+ return precision ;
75
+ }
76
+
77
+ function arrayToStr ( array ) {
78
+ return '[ ' + array . join ( ', ' ) + ' ]' ;
79
+ }
0 commit comments