1
- import * as _ from 'lodash ' ;
1
+ import { AssertionError } from '../src/lib/utils/Errors ' ;
2
2
3
3
/**
4
- * Raises an AssertionError if two objects are not equal up to desired precision.
4
+ * Raises an AssertionError if two arrays are not equal up to desired precision.
5
5
* @param desired
6
6
* @param actual
7
7
* @param precision
8
8
*/
9
- const assertArrayAlmostEqual = ( desired : number [ ] , actual : number [ ] , precision : number = 6 ) : number => {
9
+ const getAlmostEqualElemsCount = ( desired : number [ ] , actual : number [ ] , precision : number = 6 ) : number => {
10
10
const results = [ ] ;
11
11
for ( let i = 0 ; i < desired . length ; i ++ ) {
12
12
const d = desired [ i ] ;
13
13
const a = actual [ i ] ;
14
- const calc = Math . abs ( d - a ) < 1.5 * Math . pow ( 10 , - precision ) ;
15
- results . push ( calc ) ;
14
+ if ( Number . isNaN ( a ) && Number . isNaN ( d ) ) {
15
+ results . push ( true ) ;
16
+ } else {
17
+ const calc = Math . abs ( d - a ) < 1.5 * Math . pow ( 10 , - precision ) ;
18
+ results . push ( calc ) ;
19
+ }
16
20
}
17
21
const numTrues = results . reduce ( ( sum , cur ) => ( cur ? sum + 1 : sum ) , 0 ) ;
18
- return numTrues / results . length * 100 ;
22
+
23
+ return numTrues ;
24
+ } ;
25
+
26
+ const assertArrayAlmostEqual = ( desired : number [ ] , actual : number [ ] , precision : number = 6 ) => {
27
+ if ( desired . length !== actual . length ) {
28
+ throw new AssertionError ( 'Desired and actual arrays should have the same length' ) ;
29
+ }
30
+
31
+ const numAlmostEqualElems = getAlmostEqualElemsCount ( desired , actual , precision ) ;
32
+
33
+ if ( numAlmostEqualElems < desired . length ) {
34
+ throw new AssertionError ( `Expected ${ desired . length } almost equal numbers, got ${ numAlmostEqualElems } ` ) ;
35
+ }
19
36
} ;
20
37
21
38
const matchExceptionWithSnapshot = ( method : ( ...x ) => any , args : any [ ] ) : void => {
@@ -26,4 +43,4 @@ const matchExceptionWithSnapshot = (method: (...x) => any, args: any[]): void =>
26
43
}
27
44
} ;
28
45
29
- export { assertArrayAlmostEqual , matchExceptionWithSnapshot } ;
46
+ export { assertArrayAlmostEqual , getAlmostEqualElemsCount , matchExceptionWithSnapshot } ;
0 commit comments