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();