2017-09-28 13:08:25 +02:00

38 lines
1.1 KiB
TypeScript

import { I64 } from "../src/util/i64";
import * as Long from "long";
import * as assert from "assert";
function test(fn, lo, hi, otherLo, otherHi) {
let expected = Long.fromBits(lo, hi)[fn](Long.fromBits(otherLo, otherHi));
let actual = new I64(lo, hi); actual[fn + "32"](otherLo, otherHi);
assert.equal(actual.lo, expected.low, fn + " lo ");
assert.equal(actual.hi, expected.high, fn + " hi");
}
function rand() {
let r = Math.random();
// 10% edge cases
if (r < 0.05) return 0x80000000 | 0;
else if (r < 0.1) return 0;
return (Math.random() * 0xffffffff) | 0;
}
let i = 0;
while (i++ < 1000000) {
let lo = rand();
let hi = rand();
let otherLo = rand();
let otherHi = rand();
// console.log(lo, hi, otherLo, otherHi);
test("add", lo, hi, otherLo, otherHi);
test("sub", lo, hi, otherLo, otherHi);
test("mul", lo, hi, otherLo, otherHi);
test("shl", lo, hi, otherLo, otherHi);
test("shr", lo, hi, otherLo, otherHi);
test("shru", lo, hi, otherLo, otherHi);
test("and", lo, hi, otherLo, otherHi);
test("or", lo, hi, otherLo, otherHi);
test("xor", lo, hi, otherLo, otherHi);
}
console.log("done");