tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }