// This tests that integer modulo is appropriately optimized
function myMod(a, b) {
return a % b;
}
function myModByPos2(a) {
return a % 2;
}
function myModByPos5(a) {
return a % 5;
}
function myModByPos8(a) {
return a % 8;
}
function myModByNeg1(a) {
return a % -1;
}
function myModByNeg4(a) {
return a % -4;
}
function myModByNeg81(a) {
return a % -81;
}
var t = 10;
var v = 2;
var w = 4;
var x = 65535;
var y = -131071;
var z = 3;
var result = 0;
// Use a loop to ensure we cover all three tiers of optimization.
for (var i = 0; i < 2000; ++i) {
result += myMod(x, t);
result += myMod(y, t);
result += myMod(x, z);
result += myMod(y, z);
result += myModByPos2(x);
result += myModByPos2(y);
result += myModByPos5(x);
result += myModByPos5(y);
result += myModByPos8(x);
result += myModByPos8(y);
result += myModByNeg1(x);
result += myModByNeg1(y);
result += myModByNeg4(x);
result += myModByNeg4(y);
result += myModByNeg81(x);
result += myModByNeg81(y);
if (i > 100) {
v = x;
w = y;
}
result += myMod(v, t);
result += myMod(w, t);
result += myModByPos2(v);
result += myModByPos2(w);
result += myModByPos5(v);
result += myModByPos5(w);
result += myModByPos8(v);
result += myModByPos8(w);
result += myModByNeg1(v);
result += myModByNeg1(w);
result += myModByNeg4(v);
result += myModByNeg4(w);
result += myModByNeg81(v);
result += myModByNeg81(w);
}
if (result != -14970) {
throw "Bad result: " + result;
}