Source code

Revision control

Copy as Markdown

Other Tools

// Pass |null| as argument to be more robust against code folding.
function testNullWithInt32OrBool(nullVal) {
var vals = [0, 1, true, false, null];
for (var v of vals) {
assertEq(v + nullVal, Number(v));
assertEq(v - nullVal, Number(v));
assertEq(v * nullVal, 0);
var res = v / nullVal;
assertEq(isNaN(res) || res === Infinity, true);
assertEq(v % nullVal, NaN);
assertEq(v ** nullVal, 1);
assertEq(nullVal + v, Number(v));
assertEq(nullVal - v, 0 - Number(v));
assertEq(nullVal * v, 0);
res = nullVal / v;
assertEq(isNaN(res) || res === 0, true);
res = nullVal % v;
assertEq(isNaN(res) || res === 0, true);
res = nullVal ** v;
assertEq(res === 0 || res === 1, true);
}
}
for (var i = 0; i < 15; i++) {
testNullWithInt32OrBool(null);
}
function testUndefinedWithOther(undefinedVal) {
var vals = [1.1, NaN, true, false, null, undefined];
for (var v of vals) {
assertEq(v + undefinedVal, NaN);
assertEq(v - undefinedVal, NaN);
assertEq(v * undefinedVal, NaN);
assertEq(v / undefinedVal, NaN);
assertEq(v % undefinedVal, NaN);
assertEq(v ** undefinedVal, NaN);
assertEq(undefinedVal + v, NaN);
assertEq(undefinedVal - v, NaN);
assertEq(undefinedVal * v, NaN);
assertEq(undefinedVal / v, NaN);
assertEq(undefinedVal % v, NaN);
var res = undefinedVal ** v;
if (v === false || v === null) {
assertEq(res, 1);
} else {
assertEq(res, NaN);
}
}
}
for (var i = 0; i < 15; i++) {
testUndefinedWithOther(undefined);
}
function testBooleanWithDouble(trueVal, falseVal) {
var vals = [1.1, 2.2, 5, 6, 3.14];
for (var v of vals) {
assertEq(v + falseVal, v);
assertEq(v - falseVal, v);
assertEq(v * falseVal, 0);
assertEq(v / falseVal, Infinity);
assertEq(v % falseVal, NaN);
assertEq(v ** falseVal, 1);
assertEq(trueVal + v, v + 1);
assertEq(trueVal - v, 1 - v);
assertEq(trueVal * v, v);
assertEq(trueVal / v, 1 / v);
assertEq(trueVal % v, 1);
assertEq(trueVal ** v, 1);
}
}
for (var i = 0; i < 15; i++) {
testBooleanWithDouble(true, false);
}