tor-browser

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

map-get-bigint.js (1910B)


      1 // Return a new map, possibly filling some dummy entries to enforce creating
      2 // multiple hash buckets.
      3 function createMap(values, n) {
      4  var xs = [...values];
      5  for (var i = 0; i < n; ++i) {
      6    xs.push({});
      7  }
      8  return new Map(xs.map((x, i) => [x, i + 1]));
      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 map = createMap(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    var v = map.get(z);
     27    if (v !== undefined) c += v;
     28  }
     29  assertEq(c, N / 2 + N / 4);
     30 }
     31 runTest(testInlineDigitsSameSign);
     32 
     33 function testInlineDigitsDifferentSign(n) {
     34  var xs = [-1n, 2n];
     35  var ys = [1n, -2n];
     36  var zs = [...xs, ...ys];
     37  var map = createMap(xs, n);
     38 
     39  var N = 100;
     40  var c = 0;
     41  for (var i = 0; i < N; ++i) {
     42    var z = zs[i & 3];
     43    var v = map.get(z);
     44    if (v !== undefined) c += v;
     45  }
     46  assertEq(c, N / 2 + N / 4);
     47 }
     48 runTest(testInlineDigitsDifferentSign);
     49 
     50 function testHeapDigitsSameSign(n) {
     51  // Definitely uses heap digits.
     52  var heap = 2n ** 1000n;
     53 
     54  var xs = [heap + 1n, heap + 2n];
     55  var ys = [heap + 3n, heap + 4n];
     56  var zs = [...xs, ...ys];
     57  var map = createMap(xs, n);
     58 
     59  var N = 100;
     60  var c = 0;
     61  for (var i = 0; i < N; ++i) {
     62    var z = zs[i & 3];
     63    var v = map.get(z);
     64    if (v !== undefined) c += v;
     65  }
     66  assertEq(c, N / 2 + N / 4);
     67 }
     68 runTest(testHeapDigitsSameSign);
     69 
     70 function testHeapDigitsDifferentSign(n) {
     71  // Definitely uses heap digits.
     72  var heap = 2n ** 1000n;
     73 
     74  var xs = [-(heap + 1n), heap + 2n];
     75  var ys = [heap + 1n, -(heap + 2n)];
     76  var zs = [...xs, ...ys];
     77  var map = createMap(xs, n);
     78 
     79  var N = 100;
     80  var c = 0;
     81  for (var i = 0; i < N; ++i) {
     82    var z = zs[i & 3];
     83    var v = map.get(z);
     84    if (v !== undefined) c += v;
     85  }
     86  assertEq(c, N / 2 + N / 4);
     87 }
     88 runTest(testHeapDigitsDifferentSign);