tor-browser

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

bigint-compare-string.js (3435B)


      1 // Test various combinations of (BigInt R String) and ensures the result is consistent with
      2 // (String R⁻¹ BigInt). This test doesn't aim to cover the overall correctness of (BigInt R String),
      3 // but merely ensures the possible combinations are properly handled in CacheIR.
      4 
      5 var xs = [
      6  // One before the minimum
      7  -(2n ** 2000n) - 1n,
      8 
      9  // Definitely heap digits.
     10  -(2n ** 2000n),
     11  -(2n ** 1000n),
     12 
     13  // -(2n**64n)
     14  -18446744073709551617n,
     15  -18446744073709551616n,
     16  -18446744073709551615n,
     17 
     18  // -(2n**63n)
     19  -9223372036854775809n,
     20  -9223372036854775808n,
     21  -9223372036854775807n,
     22 
     23  // -(2**32)
     24  -4294967297n,
     25  -4294967296n,
     26  -4294967295n,
     27 
     28  // -(2**31)
     29  -2147483649n,
     30  -2147483648n,
     31  -2147483647n,
     32 
     33  -1n,
     34  0n,
     35  1n,
     36 
     37  // 2**31
     38  2147483647n,
     39  2147483648n,
     40  2147483649n,
     41 
     42  // 2**32
     43  4294967295n,
     44  4294967296n,
     45  4294967297n,
     46 
     47  // 2n**63n
     48  9223372036854775807n,
     49  9223372036854775808n,
     50  9223372036854775809n,
     51 
     52  // 2n**64n
     53  18446744073709551615n,
     54  18446744073709551616n,
     55  18446744073709551617n,
     56 
     57  // Definitely heap digits.
     58  2n ** 1000n,
     59  2n ** 2000n,
     60 
     61  // One past the maximum
     62  (2n ** 2000n) + 1n,
     63 ];
     64 
     65 function idx(i) {
     66  return (i % (xs.length - 2)) + 1;
     67 }
     68 
     69 var ys = xs.map(x => String(x));
     70 
     71 function testLooseEqual() {
     72  for (var i = 0; i < 100; ++i) {
     73    var j = idx(i);
     74    var x = xs[j];
     75    var y = ys[j];
     76    var u = ys[j - 1];
     77    var v = ys[j + 1];
     78 
     79    assertEq(x == y, true);
     80    assertEq(y == x, true);
     81 
     82    assertEq(x == u, false);
     83    assertEq(u == x, false);
     84 
     85    assertEq(x == v, false);
     86    assertEq(v == x, false);
     87  }
     88 }
     89 testLooseEqual();
     90 
     91 function testLooseNotEqual() {
     92  for (var i = 0; i < 100; ++i) {
     93    var j = idx(i);
     94    var x = xs[j];
     95    var y = ys[j];
     96    var u = ys[j - 1];
     97    var v = ys[j + 1];
     98 
     99    assertEq(x != y, false);
    100    assertEq(y != x, false);
    101 
    102    assertEq(x != u, true);
    103    assertEq(u != x, true);
    104 
    105    assertEq(x != v, true);
    106    assertEq(v != x, true);
    107  }
    108 }
    109 testLooseNotEqual();
    110 
    111 function testLessThan() {
    112  for (var i = 0; i < 100; ++i) {
    113    var j = idx(i);
    114    var x = xs[j];
    115    var y = ys[j];
    116    var u = ys[j - 1];
    117    var v = ys[j + 1];
    118 
    119    assertEq(x < y, false);
    120    assertEq(y < x, false);
    121 
    122    assertEq(x < u, false);
    123    assertEq(u < x, true);
    124 
    125    assertEq(x < v, true);
    126    assertEq(v < x, false);
    127  }
    128 }
    129 testLessThan();
    130 
    131 function testLessThanEquals() {
    132  for (var i = 0; i < 100; ++i) {
    133    var j = idx(i);
    134    var x = xs[j];
    135    var y = ys[j];
    136    var u = ys[j - 1];
    137    var v = ys[j + 1];
    138 
    139    assertEq(x <= y, true);
    140    assertEq(y <= x, true);
    141 
    142    assertEq(x <= u, false);
    143    assertEq(u <= x, true);
    144 
    145    assertEq(x <= v, true);
    146    assertEq(v <= x, false);
    147  }
    148 }
    149 testLessThanEquals();
    150 
    151 function testGreaterThan() {
    152  for (var i = 0; i < 100; ++i) {
    153    var j = idx(i);
    154    var x = xs[j];
    155    var y = ys[j];
    156    var u = ys[j - 1];
    157    var v = ys[j + 1];
    158 
    159    assertEq(x > y, false);
    160    assertEq(y > x, false);
    161 
    162    assertEq(x > u, true);
    163    assertEq(u > x, false);
    164 
    165    assertEq(x > v, false);
    166    assertEq(v > x, true);
    167  }
    168 }
    169 testGreaterThan();
    170 
    171 function testGreaterThanEquals() {
    172  for (var i = 0; i < 100; ++i) {
    173    var j = idx(i);
    174    var x = xs[j];
    175    var y = ys[j];
    176    var u = ys[j - 1];
    177    var v = ys[j + 1];
    178 
    179    assertEq(x >= y, true);
    180    assertEq(y >= x, true);
    181 
    182    assertEq(x >= u, true);
    183    assertEq(u >= x, false);
    184 
    185    assertEq(x >= v, false);
    186    assertEq(v >= x, true);
    187  }
    188 }
    189 testGreaterThanEquals();