tor-browser

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

set-has-bigint.js (1724B)


      1 // Return a new set, possibly filling some dummy entries to enforce creating
      2 // multiple hash buckets.
      3 function createSet(values, n) {
      4  var xs = [...values];
      5  for (var i = 0; i < n; ++i) {
      6    xs.push({});
      7  }
      8  return new Set(xs);
      9 }
     10 
     11 function runTest(fn) {
     12  fn(0);
     13  fn(100);
     14 }
     15 
     16 function testInlineDigitsSameSign(n) {
     17  var xs = [1n, 2n];
     18  var ys = [3n, 4n];
     19  var zs = [...xs, ...ys];
     20  var set = createSet(xs, n);
     21 
     22  var N = 100;
     23  var c = 0;
     24  for (var i = 0; i < N; ++i) {
     25    var z = zs[i & 3];
     26    if (set.has(z)) c++;
     27  }
     28  assertEq(c, N / 2);
     29 }
     30 runTest(testInlineDigitsSameSign);
     31 
     32 function testInlineDigitsDifferentSign(n) {
     33  var xs = [-1n, 2n];
     34  var ys = [1n, -2n];
     35  var zs = [...xs, ...ys];
     36  var set = createSet(xs, n);
     37 
     38  var N = 100;
     39  var c = 0;
     40  for (var i = 0; i < N; ++i) {
     41    var z = zs[i & 3];
     42    if (set.has(z)) c++;
     43  }
     44  assertEq(c, N / 2);
     45 }
     46 runTest(testInlineDigitsDifferentSign);
     47 
     48 function testHeapDigitsSameSign(n) {
     49  // Definitely uses heap digits.
     50  var heap = 2n ** 1000n;
     51 
     52  var xs = [heap + 1n, heap + 2n];
     53  var ys = [heap + 3n, heap + 4n];
     54  var zs = [...xs, ...ys];
     55  var set = createSet(xs, n);
     56 
     57  var N = 100;
     58  var c = 0;
     59  for (var i = 0; i < N; ++i) {
     60    var z = zs[i & 3];
     61    if (set.has(z)) c++;
     62  }
     63  assertEq(c, N / 2);
     64 }
     65 runTest(testHeapDigitsSameSign);
     66 
     67 function testHeapDigitsDifferentSign(n) {
     68  // Definitely uses heap digits.
     69  var heap = 2n ** 1000n;
     70 
     71  var xs = [-(heap + 1n), heap + 2n];
     72  var ys = [heap + 1n, -(heap + 2n)];
     73  var zs = [...xs, ...ys];
     74  var set = createSet(xs, n);
     75 
     76  var N = 100;
     77  var c = 0;
     78  for (var i = 0; i < N; ++i) {
     79    var z = zs[i & 3];
     80    if (set.has(z)) c++;
     81  }
     82  assertEq(c, N / 2);
     83 }
     84 runTest(testHeapDigitsDifferentSign);