tor-browser

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

bigint-compare-fold-double.js (2269B)


      1 // Fold BigInt x Int32 comparison with constants.
      2 
      3 let bigInts = [
      4  // Definitely heap digits.
      5  -(2n ** 1000n),
      6 
      7  // Definitely not heap digits.
      8  -1n,
      9  0n,
     10  1n,
     11 
     12  // Definitely heap digits.
     13  2n ** 1000n,
     14 ];
     15 
     16 let doubles = [
     17  -Infinity,
     18  Number.MAX_VALUE,
     19  -Math.SQRT2,
     20  -Number.MIN_VALUE,
     21  -0,
     22  Number.MIN_VALUE,
     23  Math.SQRT2,
     24  Number.MAX_VALUE,
     25  Infinity,
     26 ];
     27 
     28 function test() {
     29  for (var i = 0; i < 100; ++i) {
     30    let lhs = LHS;
     31    let rhs = RHS;
     32 
     33    assertEq(lhs === rhs, false);
     34    assertEq(rhs === lhs, false);
     35 
     36    assertEq(lhs !== rhs, true);
     37    assertEq(rhs !== lhs, true);
     38 
     39    assertEq(lhs == rhs, EQUALS);
     40    assertEq(rhs == lhs, EQUALS);
     41 
     42    assertEq(lhs != rhs, !EQUALS);
     43    assertEq(rhs != lhs, !EQUALS);
     44 
     45    assertEq(lhs < rhs, LESS_THAN);
     46    assertEq(rhs < lhs, !LESS_THAN && !EQUALS);
     47 
     48    assertEq(lhs <= rhs, LESS_THAN || EQUALS);
     49    assertEq(rhs <= lhs, !LESS_THAN || EQUALS);
     50 
     51    assertEq(lhs > rhs, !LESS_THAN && !EQUALS);
     52    assertEq(rhs > lhs, LESS_THAN);
     53 
     54    assertEq(lhs >= rhs, !LESS_THAN || EQUALS);
     55    assertEq(rhs >= lhs, LESS_THAN || EQUALS);
     56  }
     57 }
     58 
     59 for (let lhs of bigInts) {
     60  for (let rhs of doubles) {
     61    let equals = lhs == rhs;
     62    let lessThan = lhs < rhs;
     63    let repr = Object.is(rhs, -0) ? "-0" : String(rhs);
     64    let fn = Function(
     65      `return ${test}`
     66      .replaceAll("LHS", `${lhs}n`)
     67      .replaceAll("RHS", `${repr}`)
     68      .replaceAll("EQUALS", `${equals}`)
     69      .replaceAll("LESS_THAN", `${lessThan}`)
     70    )();
     71    fn();
     72  }
     73 }
     74 
     75 function testNaN() {
     76  for (var i = 0; i < 100; ++i) {
     77    let lhs = LHS;
     78    let rhs = NaN;
     79 
     80    assertEq(lhs === rhs, false);
     81    assertEq(rhs === lhs, false);
     82 
     83    assertEq(lhs !== rhs, true);
     84    assertEq(rhs !== lhs, true);
     85 
     86    assertEq(lhs == rhs, false);
     87    assertEq(rhs == lhs, false);
     88 
     89    assertEq(lhs != rhs, true);
     90    assertEq(rhs != lhs, true);
     91 
     92    assertEq(lhs < rhs, false);
     93    assertEq(rhs < lhs, false);
     94 
     95    assertEq(lhs <= rhs, false);
     96    assertEq(rhs <= lhs, false);
     97 
     98    assertEq(lhs > rhs, false);
     99    assertEq(rhs > lhs, false);
    100 
    101    assertEq(lhs >= rhs, false);
    102    assertEq(rhs >= lhs, false);
    103  }
    104 }
    105 
    106 for (let lhs of bigInts) {
    107  let fn = Function(
    108    `return ${testNaN}`
    109    .replaceAll("LHS", `${lhs}n`)
    110  )();
    111  fn();
    112 }