100 lines
2.1 KiB
JavaScript
100 lines
2.1 KiB
JavaScript
description(
|
|
"Tests that -2^31/-1 (and a bunch of other corner cases) does the right thing."
|
|
);
|
|
|
|
function myDiv(a, b) {
|
|
return a / b;
|
|
}
|
|
|
|
function myDivByNeg1(a) {
|
|
return a / -1;
|
|
}
|
|
|
|
function myDivNeg2ToThe31(b) {
|
|
return -2147483648 / b;
|
|
}
|
|
|
|
function myMod(a, b) {
|
|
return a % b;
|
|
}
|
|
|
|
function myModByNeg1(a) {
|
|
return a % -1;
|
|
}
|
|
|
|
function myModBy2(a) {
|
|
return a % 2;
|
|
}
|
|
|
|
function myModBy1073741824(a) {
|
|
return a % 1073741824;
|
|
}
|
|
|
|
function myModNeg2ToThe31(b) {
|
|
return -2147483648 % b;
|
|
}
|
|
|
|
function myOtherDiv(a, b) {
|
|
return a / b;
|
|
}
|
|
|
|
function myOtherDivByNeg1(a) {
|
|
return a / -1;
|
|
}
|
|
|
|
function myOtherDivNeg2ToThe31(b) {
|
|
return -2147483648 / b;
|
|
}
|
|
|
|
function myOtherMod(a, b) {
|
|
return a % b;
|
|
}
|
|
|
|
function myOtherModByNeg1(a) {
|
|
return a % -1;
|
|
}
|
|
|
|
function myOtherModNeg2ToThe31(b) {
|
|
return -2147483648 % b;
|
|
}
|
|
|
|
function myDivExpectingInt(a, b) {
|
|
return (a / b) | 0;
|
|
}
|
|
|
|
var w = 4;
|
|
var v = 2;
|
|
var x = -2147483648;
|
|
var y = -1;
|
|
var z = 3;
|
|
|
|
// Use a loop to ensure we cover all three tiers of optimization.
|
|
for (var i = 0; i < 200; ++i) {
|
|
shouldBe("myDiv(x, y)", "2147483648");
|
|
shouldBe("myDivByNeg1(x)", "2147483648");
|
|
shouldBe("myDivNeg2ToThe31(y)", "2147483648");
|
|
shouldBe("myMod(x, y)", "-0");
|
|
shouldBe("myMod(x, z)", "-2");
|
|
shouldBe("myModByNeg1(x)", "-0");
|
|
shouldBe("myModBy2(x)", "-0");
|
|
shouldBe("myModBy1073741824(x)", "-0");
|
|
shouldBe("myModBy2(y)", "-1");
|
|
shouldBe("myModBy1073741824(y)", "-1");
|
|
shouldBe("myModBy2(z)", "1");
|
|
shouldBe("myModBy1073741824(z)", "3");
|
|
shouldBe("myModNeg2ToThe31(y)", "-0");
|
|
if (i > 100) {
|
|
w = x;
|
|
v = y;
|
|
}
|
|
shouldBe("myOtherDiv(w, v)", i > 100 ? "2147483648" : "2");
|
|
shouldBe("myOtherDivByNeg1(w)", i > 100 ? "2147483648" : "-4");
|
|
shouldBe("myOtherDivNeg2ToThe31(v)", i > 100 ? "2147483648" : "-1073741824");
|
|
shouldBe("myOtherMod(w, v)", i > 100 ? "-0" : "0");
|
|
shouldBe("myOtherModByNeg1(w)", i > 100 ? "-0" : "0");
|
|
shouldBe("myOtherModNeg2ToThe31(v)", "-0");
|
|
shouldBe("myOtherModNeg2ToThe31(3)", "-2");
|
|
shouldBe("myDivExpectingInt(x, y)", "x");
|
|
}
|
|
|