tor-browser

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

map-get-nongcthing.js (2274B)


      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 testInt32(n) {
     17  var xs = [1, 2];
     18  var ys = [3, 4];
     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(testInt32);
     32 
     33 function testDouble(n) {
     34  var xs = [Math.PI, Infinity];
     35  var ys = [Math.E, -Infinity];
     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(testDouble);
     49 
     50 function testZero(n) {
     51  var xs = [0, -0];
     52  var ys = [1, -1];
     53  var zs = [...xs, ...ys];
     54  var map = createMap([0], n);
     55 
     56  var N = 100;
     57  var c = 0;
     58  for (var i = 0; i < N; ++i) {
     59    var z = zs[i & 3];
     60    var v = map.get(z);
     61    if (v !== undefined) c += v;
     62  }
     63  assertEq(c, N / 2);
     64 }
     65 runTest(testZero);
     66 
     67 function testNaN(n) {
     68  var xs = [NaN, -NaN];
     69  var ys = [1, -1];
     70  var zs = [...xs, ...ys];
     71  var map = createMap([NaN], n);
     72 
     73  var N = 100;
     74  var c = 0;
     75  for (var i = 0; i < N; ++i) {
     76    var z = zs[i & 3];
     77    var v = map.get(z);
     78    if (v !== undefined) c += v;
     79  }
     80  assertEq(c, N / 2);
     81 }
     82 runTest(testNaN);
     83 
     84 function testUndefinedAndNull(n) {
     85  var xs = [undefined, null];
     86  var ys = [1, -1];
     87  var zs = [...xs, ...ys];
     88  var map = createMap(xs, n);
     89 
     90  var N = 100;
     91  var c = 0;
     92  for (var i = 0; i < N; ++i) {
     93    var z = zs[i & 3];
     94    var v = map.get(z);
     95    if (v !== undefined) c += v;
     96  }
     97  assertEq(c, N / 2 + N / 4);
     98 }
     99 runTest(testUndefinedAndNull);
    100 
    101 function testBoolean(n) {
    102  var xs = [true, false];
    103  var ys = [1, -1];
    104  var zs = [...xs, ...ys];
    105  var map = createMap(xs, n);
    106 
    107  var N = 100;
    108  var c = 0;
    109  for (var i = 0; i < N; ++i) {
    110    var z = zs[i & 3];
    111    var v = map.get(z);
    112    if (v !== undefined) c += v;
    113  }
    114  assertEq(c, N / 2 + N / 4);
    115 }
    116 runTest(testBoolean);