tor-browser

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

bigint-compare-fold-bigint.js (1305B)


      1 // Fold BigInt x BigInt 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 function test() {
     17  for (var i = 0; i < 100; ++i) {
     18    let lhs = LHS;
     19    let rhs = RHS;
     20 
     21    assertEq(lhs === rhs, EQUALS);
     22    assertEq(rhs === lhs, EQUALS);
     23 
     24    assertEq(lhs !== rhs, !EQUALS);
     25    assertEq(rhs !== lhs, !EQUALS);
     26 
     27    assertEq(lhs == rhs, EQUALS);
     28    assertEq(rhs == lhs, EQUALS);
     29 
     30    assertEq(lhs != rhs, !EQUALS);
     31    assertEq(rhs != lhs, !EQUALS);
     32 
     33    assertEq(lhs < rhs, LESS_THAN);
     34    assertEq(rhs < lhs, !LESS_THAN && !EQUALS);
     35 
     36    assertEq(lhs <= rhs, LESS_THAN || EQUALS);
     37    assertEq(rhs <= lhs, !LESS_THAN || EQUALS);
     38 
     39    assertEq(lhs > rhs, !LESS_THAN && !EQUALS);
     40    assertEq(rhs > lhs, LESS_THAN);
     41 
     42    assertEq(lhs >= rhs, !LESS_THAN || EQUALS);
     43    assertEq(rhs >= lhs, LESS_THAN || EQUALS);
     44  }
     45 }
     46 
     47 for (let lhs of bigInts) {
     48  for (let rhs of bigInts) {
     49    let equals = lhs == rhs;
     50    let lessThan = lhs < rhs;
     51    let fn = Function(
     52      `return ${test}`
     53      .replaceAll("LHS", `${lhs}n`)
     54      .replaceAll("RHS", `${rhs}n`)
     55      .replaceAll("EQUALS", `${equals}`)
     56      .replaceAll("LESS_THAN", `${lessThan}`)
     57    )();
     58    fn();
     59  }
     60 }