mirror of
https://github.com/fluencelabs/assemblyscript
synced 2025-04-25 07:02:13 +00:00
38 lines
1.1 KiB
TypeScript
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");
|