tor-browser

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

weakmapset-get-has.js (2801B)


      1 function testBasicWeakMap() {
      2  var objs = [{}, Math, this, [], {}];
      3  var wm = new WeakMap();
      4  for (var i = 0; i < objs.length - 1; i++) {
      5    wm.set(objs[i], i);
      6  }
      7  var res = 0;
      8  for (var i = 0; i < 100; i++) {
      9    var idx = i % objs.length;
     10    var obj = objs[idx];
     11    if (wm.has(obj)) {
     12      assertEq(idx < 4, true);
     13      res += wm.get(obj);
     14      wm.set(obj, wm.get(obj) + 1);
     15    } else {
     16      assertEq(idx, 4);
     17      assertEq(wm.get(obj), undefined);
     18    }
     19  }
     20  assertEq(res, 880);
     21 }
     22 testBasicWeakMap();
     23 
     24 function testBasicWeakSet() {
     25  var objs = [{}, Math, this, [], {}];
     26  var ws = new WeakSet();
     27  for (var i = 0; i < objs.length - 1; i++) {
     28    ws.add(objs[i]);
     29  }
     30  for (var i = 0; i < 100; i++) {
     31    var idx = i % objs.length;
     32    var obj = objs[idx];
     33    assertEq(ws.has(obj), idx < 4);
     34  }
     35 }
     36 testBasicWeakSet();
     37 
     38 function testWeakMapKeyGuard() {
     39  var obj1 = {}, obj2 = {};
     40  var wm = new WeakMap([[obj1, obj2]]);
     41  var arr = [obj1, "foo"];
     42  for (var i = 0; i < 100; i++) {
     43    var key = arr[(i >= 95) | 0];
     44    var val = wm.get(key);
     45    assertEq(val, i < 95 ? obj2 : undefined);
     46    var has = wm.has(key);
     47    assertEq(has, i < 95);
     48  }
     49 }
     50 testWeakMapKeyGuard();
     51 
     52 function testWeakSetKeyGuard() {
     53  var obj1 = {};
     54  var ws = new WeakSet([obj1]);
     55  var arr = [obj1, "foo"];
     56  for (var i = 0; i < 100; i++) {
     57    var key = arr[(i >= 95) | 0];
     58    var has = ws.has(key);
     59    assertEq(has, i < 95);
     60  }
     61 }
     62 testWeakSetKeyGuard();
     63 
     64 function testWeakMapThisGuard() {
     65  var obj1 = {}, obj2 = {};
     66  var wm = new WeakMap([[obj1, obj2]]);
     67  var arr = [wm, {get: WeakMap.prototype.get}];
     68  for (var i = 0; i < 100; i++) {
     69    var m = arr[(i >= 95) | 0];
     70    var threw = false;
     71    try {
     72      assertEq(m.get(obj1), obj2);
     73    } catch (e) {
     74      threw = true;
     75    }
     76    assertEq(threw, i >= 95);
     77  }
     78 }
     79 testWeakMapThisGuard();
     80 
     81 function testWeakSetThisGuard() {
     82  var obj1 = {};
     83  var ws = new WeakSet([obj1]);
     84  var arr = [ws, {has: WeakSet.prototype.has}];
     85  for (var i = 0; i < 100; i++) {
     86    var s = arr[(i >= 95) | 0];
     87    var threw = false;
     88    try {
     89      assertEq(s.has(obj1), true);
     90    } catch (e) {
     91      threw = true;
     92    }
     93    assertEq(threw, i >= 95);
     94  }
     95 }
     96 testWeakSetThisGuard();
     97 
     98 function testWeakMapEmptyGet() {
     99  var obj = {};
    100  var wm1 = new WeakMap([[obj, 1]]);
    101  var wm2 = new WeakMap();
    102  function get(wm) { return wm.get(obj); }
    103  for (var i = 0; i < 100; i++) {
    104    var val = get(i < 95 ? wm1 : wm2);
    105    assertEq(val, i < 95 ? 1 : undefined);
    106  }
    107 }
    108 testWeakMapEmptyGet();
    109 
    110 function testWeakMapEmptyHas() {
    111  var obj = {};
    112  var wm1 = new WeakMap([[obj, 1]]);
    113  var wm2 = new WeakMap();
    114  function has(wm) { return wm.has(obj); }
    115  for (var i = 0; i < 100; i++) {
    116    var val = has(i < 95 ? wm1 : wm2);
    117    assertEq(val, i < 95);
    118  }
    119 }
    120 testWeakMapEmptyHas();