50 lines
1.3 KiB
JavaScript
50 lines
1.3 KiB
JavaScript
|
export function assert(actual, expected, message) {
|
||
|
if (arguments.length === 1)
|
||
|
expected = true;
|
||
|
|
||
|
if (typeof actual === typeof expected) {
|
||
|
if (actual === expected) {
|
||
|
if (actual !== 0 || (1 / actual) === (1 / expected))
|
||
|
return;
|
||
|
}
|
||
|
if (typeof actual === 'number') {
|
||
|
if (isNaN(actual) && isNaN(expected))
|
||
|
return;
|
||
|
}
|
||
|
if (typeof actual === 'object') {
|
||
|
if (actual !== null && expected !== null
|
||
|
&& actual.constructor === expected.constructor
|
||
|
&& actual.toString() === expected.toString())
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
throw Error("assertion failed: got |" + actual + "|" +
|
||
|
", expected |" + expected + "|" +
|
||
|
(message ? " (" + message + ")" : ""));
|
||
|
}
|
||
|
|
||
|
export function assertThrows(err, func)
|
||
|
{
|
||
|
var ex;
|
||
|
ex = false;
|
||
|
try {
|
||
|
func();
|
||
|
} catch(e) {
|
||
|
ex = true;
|
||
|
assert(e instanceof err);
|
||
|
}
|
||
|
assert(ex, true, "exception expected");
|
||
|
}
|
||
|
|
||
|
export function assertArrayEquals(a, b)
|
||
|
{
|
||
|
if (!Array.isArray(a) || !Array.isArray(b))
|
||
|
return assert(false);
|
||
|
|
||
|
assert(a.length, b.length);
|
||
|
|
||
|
a.forEach((value, idx) => {
|
||
|
assert(b[idx], value);
|
||
|
});
|
||
|
}
|