constant-compare-integer-operands.js (2151B)
1 load(libdir + "asserts.js"); 2 3 function makeConstantCompareFn(val, op) { 4 return new Function('val', `return val ${op} ${val};`); 5 } 6 7 { 8 function testConstantCompareFn(fn, i, expectedOnSuccess) { 9 // test with int values 10 assertEq(fn(i), expectedOnSuccess); 11 assertEq(fn(i + 1), !expectedOnSuccess); 12 assertEq(fn(i - 1), !expectedOnSuccess); 13 14 // test with double values 15 assertEq(fn(i + 0.5), !expectedOnSuccess); 16 assertEq(fn(i - 0.5), !expectedOnSuccess); 17 18 // test with string values 19 assertEq(fn(String(i)), !expectedOnSuccess); 20 assertEq(fn(String(i + 1)), !expectedOnSuccess); 21 assertEq(fn(String(i - 1)), !expectedOnSuccess); 22 23 // test with boolean values 24 assertEq(fn(true), !expectedOnSuccess); 25 assertEq(fn(false), !expectedOnSuccess); 26 27 // test with null values 28 assertEq(fn(null), !expectedOnSuccess); 29 30 // test with undefined values 31 assertEq(fn(undefined), !expectedOnSuccess); 32 33 // test with NaN values 34 assertEq(fn(NaN), !expectedOnSuccess); 35 36 // test with Infinity values 37 assertEq(fn(Infinity), !expectedOnSuccess); 38 assertEq(fn(-Infinity), !expectedOnSuccess); 39 40 // test with object values 41 assertEq(fn({}), !expectedOnSuccess); 42 assertEq(fn([]), !expectedOnSuccess); 43 44 if (i === 0) { 45 // test signed zero values 46 assertEq(fn(+0), expectedOnSuccess); 47 assertEq(fn(-0), expectedOnSuccess); 48 assertEq(fn(0.0), expectedOnSuccess); 49 assertEq(fn(-0.0), expectedOnSuccess); 50 } 51 52 // test values outside int32 range 53 assertEq(fn(9007199254740992), !expectedOnSuccess); 54 assertEq(fn(-9007199254740993), !expectedOnSuccess); 55 56 // test with bigint values 57 assertEq(fn(BigInt(i)), !expectedOnSuccess); 58 assertEq(fn(BigInt(i + 1)), !expectedOnSuccess); 59 assertEq(fn(BigInt(i - 1)), !expectedOnSuccess); 60 } 61 62 // make all the int8 values that can be used as constant compare operands 63 for (let i = -128; i <= 127; i++) { 64 const fnEq = makeConstantCompareFn(i, '==='); 65 const fnNe = makeConstantCompareFn(i, '!=='); 66 67 testConstantCompareFn(fnEq, i, true); 68 testConstantCompareFn(fnNe, i, false); 69 } 70 }