tor-browser

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

bigint-compare-fold-int32.js (1402B)


      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 int32s = [
     17  -0x8000_0000,
     18  -1,
     19  0,
     20  1,
     21  0x7fff_ffff,
     22 ];
     23 
     24 function test() {
     25  for (var i = 0; i < 100; ++i) {
     26    let lhs = LHS;
     27    let rhs = RHS;
     28 
     29    assertEq(lhs === rhs, false);
     30    assertEq(rhs === lhs, false);
     31 
     32    assertEq(lhs !== rhs, true);
     33    assertEq(rhs !== lhs, true);
     34 
     35    assertEq(lhs == rhs, EQUALS);
     36    assertEq(rhs == lhs, EQUALS);
     37 
     38    assertEq(lhs != rhs, !EQUALS);
     39    assertEq(rhs != lhs, !EQUALS);
     40 
     41    assertEq(lhs < rhs, LESS_THAN);
     42    assertEq(rhs < lhs, !LESS_THAN && !EQUALS);
     43 
     44    assertEq(lhs <= rhs, LESS_THAN || EQUALS);
     45    assertEq(rhs <= lhs, !LESS_THAN || EQUALS);
     46 
     47    assertEq(lhs > rhs, !LESS_THAN && !EQUALS);
     48    assertEq(rhs > lhs, LESS_THAN);
     49 
     50    assertEq(lhs >= rhs, !LESS_THAN || EQUALS);
     51    assertEq(rhs >= lhs, LESS_THAN || EQUALS);
     52  }
     53 }
     54 
     55 for (let lhs of bigInts) {
     56  for (let rhs of int32s) {
     57    // Ensure Int32-typed.
     58    rhs |= 0;
     59 
     60    let equals = lhs == rhs;
     61    let lessThan = lhs < rhs;
     62    let fn = Function(
     63      `return ${test}`
     64      .replaceAll("LHS", `${lhs}n`)
     65      .replaceAll("RHS", `${rhs}`)
     66      .replaceAll("EQUALS", `${equals}`)
     67      .replaceAll("LESS_THAN", `${lessThan}`)
     68    )();
     69    fn();
     70  }
     71 }