function assert(a, e, m) { if (a !== e) throw new Error("Expected to be: " + e + " but got: " + a); } function bitNot(a) { return ~a; } noInline(bitNot); for (let i = 0; i < 10000; i++) { let r = bitNot("0"); assert(r, -1); r = bitNot("1"); assert(r, -2); r = bitNot("-1"); assert(r, 0); r = bitNot("-2"); assert(r, 1); r = bitNot({ valueOf: () => 0 }); assert(r, -1); r = bitNot({ valueOf: () => 1 }); assert(r, -2); r = bitNot({ valueOf: () => -1 }); assert(r, 0); r = bitNot({ valueOf: () => -2 }); assert(r, 1); }