| var ws = new WeakSet; |
| |
| // Delete on empty |
| assertEq(ws.delete({}), false); |
| |
| // Delete existing |
| var value = {}; |
| ws.add(value); |
| assertEq(ws.has(value), true); |
| assertEq(ws.delete(value), true); |
| assertEq(ws.has(value), false); |
| |
| // Delete after clear |
| ws.add(value); |
| assertEq(ws.has(value), true); |
| ws.clear(); |
| assertEq(ws.delete(value), false); |
| assertEq(ws.has(value), false); |
| |
| // Delete non-empty |
| for (var i = 0; i < 10; i++) |
| ws.add({}); |
| assertEq(ws.add(value), ws); |
| assertEq(ws.has(value), true); |
| assertEq(ws.delete(value), true); |
| assertEq(ws.has(value), false); |
| assertEq(ws.delete(value), false); |
| assertEq(ws.has(value), false); |
| |
| // Delete primitive |
| assertEq(ws.delete(15), false); |
| |
| // Delete with cross-compartment WeakSet |
| ws = new (newGlobal().WeakSet); |
| WeakSet.prototype.add.call(ws, value); |
| assertEq(WeakSet.prototype.has.call(ws, value), true); |
| assertEq(WeakSet.prototype.delete.call(ws, value), true); |
| assertEq(WeakSet.prototype.has.call(ws, value), false); |
| assertEq(WeakSet.prototype.delete.call(ws, value), false); |