summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMatt Valentine-House <matt@eightbitraptor.com>2023-09-08 14:31:29 +0100
committerMatt Valentine-House <matt@eightbitraptor.com>2023-09-08 17:45:00 +0100
commit7f53da94fb23687ef3bea0507199196a00ca26f8 (patch)
tree94f75eea75adde228eb24623f11617b533ebd110 /test
parent60ef156b1463629d94cf7139430d129dd68a418f (diff)
Fix weak_references count test
This test creates a lot of Objects held in an array, and a set of weak references to them using WeakMap. It then clears the array and frees it and asserts that all the weak references to it are also gone. This test is failing because one of the dummy objects in our weakmap is ending up on the stack, and so is being marked, even though we thought that we'd removed the only reference to it. This behaviour has changed since this commit: https://github.com/ruby/ruby/commit/5b5ae3d9e064e17e2a7d8d21d739fcc62ae1075c which rewrites `Integer#times` from C into Ruby. This change is somehow causing the last object we append to our array to consistently end up on the stack during GC. This commit fixes the specific weakmap test by using an enumerator and each, instead of `Integer#times`, and thus avoids having our last object created end up on the stack.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/8402
Diffstat (limited to 'test')
-rw-r--r--test/ruby/test_gc.rb3
1 files changed, 2 insertions, 1 deletions
diff --git a/test/ruby/test_gc.rb b/test/ruby/test_gc.rb
index 0b4062e99f..567e7b5d80 100644
--- a/test/ruby/test_gc.rb
+++ b/test/ruby/test_gc.rb
@@ -303,7 +303,8 @@ class TestGc < Test::Unit::TestCase
# Create some objects and place it in a WeakMap
wmap = ObjectSpace::WeakMap.new
ary = Array.new(count)
- count.times do |i|
+ enum = count.times
+ enum.each.with_index do |i|
obj = Object.new
ary[i] = obj
wmap[obj] = nil