michael@0: // Test that SavedFrame instances get removed from the SavedStacks frames cache michael@0: // after a GC. michael@0: michael@0: const FUZZ_FACTOR = 3; michael@0: michael@0: function assertAboutEq(actual, expected) { michael@0: if (Math.abs(actual - expected) > FUZZ_FACTOR) michael@0: throw new Error("Assertion failed: expected about " + expected + ", got " + actual + michael@0: ". FUZZ_FACTOR = " + FUZZ_FACTOR); michael@0: } michael@0: michael@0: const stacks = []; michael@0: michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: stacks.push(saveStack()); michael@0: michael@0: assertAboutEq(getSavedFrameCount(), 50); michael@0: michael@0: while (stacks.length) { michael@0: stacks.pop(); michael@0: } michael@0: gc(); michael@0: michael@0: stacks = null; michael@0: gc(); michael@0: michael@0: assertAboutEq(getSavedFrameCount(), 0);