/
asserts.js
28 lines (23 loc) · 945 Bytes
/
asserts.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import assert from "assert";
export function assertInDelta(actual, expected, delta = 1e-6) {
assert(inDelta(actual, expected, delta), `${actual} should be within ${delta} of ${expected}`);
}
function inDelta(actual, expected, delta) {
return (Array.isArray(expected) ? inDeltaArray
: typeof expected === "object" ? inDeltaObject
: inDeltaNumber)(actual, expected, delta);
}
function inDeltaArray(actual, expected, delta) {
let n = expected.length, i = -1;
if (actual.length !== n) return false;
while (++i < n) if (!inDelta(actual[i], expected[i], delta)) return false;
return true;
}
function inDeltaObject(actual, expected, delta) {
for (let i in expected) if (!inDelta(actual[i], expected[i], delta)) return false;
for (let i in actual) if (!(i in expected)) return false;
return true;
}
function inDeltaNumber(actual, expected, delta) {
return actual >= expected - delta && actual <= expected + delta;
}