binaryarith-null-undef-bool.js (2351B)
1 // Pass |null| as argument to be more robust against code folding. 2 function testNullWithInt32OrBool(nullVal) { 3 var vals = [0, 1, true, false, null]; 4 for (var v of vals) { 5 assertEq(v + nullVal, Number(v)); 6 assertEq(v - nullVal, Number(v)); 7 assertEq(v * nullVal, 0); 8 var res = v / nullVal; 9 assertEq(isNaN(res) || res === Infinity, true); 10 assertEq(v % nullVal, NaN); 11 assertEq(v ** nullVal, 1); 12 13 assertEq(nullVal + v, Number(v)); 14 assertEq(nullVal - v, 0 - Number(v)); 15 assertEq(nullVal * v, 0); 16 res = nullVal / v; 17 assertEq(isNaN(res) || res === 0, true); 18 res = nullVal % v; 19 assertEq(isNaN(res) || res === 0, true); 20 res = nullVal ** v; 21 assertEq(res === 0 || res === 1, true); 22 } 23 } 24 for (var i = 0; i < 15; i++) { 25 testNullWithInt32OrBool(null); 26 } 27 28 function testUndefinedWithOther(undefinedVal) { 29 var vals = [1.1, NaN, true, false, null, undefined]; 30 for (var v of vals) { 31 assertEq(v + undefinedVal, NaN); 32 assertEq(v - undefinedVal, NaN); 33 assertEq(v * undefinedVal, NaN); 34 assertEq(v / undefinedVal, NaN); 35 assertEq(v % undefinedVal, NaN); 36 assertEq(v ** undefinedVal, NaN); 37 38 assertEq(undefinedVal + v, NaN); 39 assertEq(undefinedVal - v, NaN); 40 assertEq(undefinedVal * v, NaN); 41 assertEq(undefinedVal / v, NaN); 42 assertEq(undefinedVal % v, NaN); 43 var res = undefinedVal ** v; 44 if (v === false || v === null) { 45 assertEq(res, 1); 46 } else { 47 assertEq(res, NaN); 48 } 49 } 50 } 51 for (var i = 0; i < 15; i++) { 52 testUndefinedWithOther(undefined); 53 } 54 55 function testBooleanWithDouble(trueVal, falseVal) { 56 var vals = [1.1, 2.2, 5, 6, 3.14]; 57 for (var v of vals) { 58 assertEq(v + falseVal, v); 59 assertEq(v - falseVal, v); 60 assertEq(v * falseVal, 0); 61 assertEq(v / falseVal, Infinity); 62 assertEq(v % falseVal, NaN); 63 assertEq(v ** falseVal, 1); 64 65 assertEq(trueVal + v, v + 1); 66 assertEq(trueVal - v, 1 - v); 67 assertEq(trueVal * v, v); 68 assertEq(trueVal / v, 1 / v); 69 assertEq(trueVal % v, 1); 70 assertEq(trueVal ** v, 1); 71 } 72 } 73 for (var i = 0; i < 15; i++) { 74 testBooleanWithDouble(true, false); 75 }