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); }); }