let nextId = 0; let weakMap; let savedCallback; function createWeakMap(callback) { weakMap = new WeakMap(); savedCallback = callback; } const tests = [ // Success function() { let object = { id: ++nextId }; console.log(`created object ${object.id}`); createWeakMap(() => {}); weakMap.set(object, object.id); }, // Success async function() { let object = { id: ++nextId }; console.log(`created object ${object.id}`); createWeakMap(() => {}); weakMap.set(object, object.id); object = undefined; }, // Fails async function() { let object = { id: ++nextId }; console.log(`created object ${object.id}`); createWeakMap(() => {}); weakMap.set(object, object.id); } ]; (async () => { for (const test of tests) { await test(); assertEq(nondeterministicGetWeakMapKeys(weakMap).length, 1); gc(); if (nondeterministicGetWeakMapKeys(weakMap).length !== 0) { console.log(`Error: object ${nextId} could not get collected`); } } })();