tor-browser

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

map-get-string.js (1770B)


      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 testConstant(n) {
     17  var xs = ["a", "b"];
     18  var ys = ["c", "d"];
     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(testConstant);
     32 
     33 function testConstantFatInline(n) {
     34  var xs = ["a", "b"].map(s => s.repeat(10));
     35  var ys = ["c", "d"].map(s => s.repeat(10));
     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(testConstantFatInline);
     49 
     50 function testComputed(n) {
     51  var xs = ["a", "b"];
     52  var ys = ["c", "d"];
     53  var zs = [...xs, ...ys];
     54  var map = createMap(xs, 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    z = String.fromCharCode(z.charCodeAt(0));
     61    var v = map.get(z);
     62    if (v !== undefined) c += v;
     63  }
     64  assertEq(c, N / 2 + N / 4);
     65 }
     66 runTest(testComputed);
     67 
     68 function testRope(n) {
     69  var xs = ["a", "b"];
     70  var ys = ["c", "d"];
     71  var zs = [...xs, ...ys];
     72  var map = createMap(xs.map(x => x.repeat(100)), n);
     73 
     74  var N = 100;
     75  var c = 0;
     76  for (var i = 0; i < N; ++i) {
     77    var z = zs[i & 3].repeat(100);
     78    var v = map.get(z);
     79    if (v !== undefined) c += v;
     80  }
     81  assertEq(c, N / 2 + N / 4);
     82 }
     83 runTest(testRope);