diff options
Diffstat (limited to 'test/ruby/test_weakmap.rb')
-rw-r--r-- | test/ruby/test_weakmap.rb | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/test/ruby/test_weakmap.rb b/test/ruby/test_weakmap.rb index f9358e11f3..97d7197dbb 100644 --- a/test/ruby/test_weakmap.rb +++ b/test/ruby/test_weakmap.rb @@ -193,16 +193,17 @@ class TestWeakMap < Test::Unit::TestCase end; end - def test_compaction_bug_19529 + def test_compaction omit "compaction is not supported on this platform" unless GC.respond_to?(:compact) + # [Bug #19529] obj = Object.new 100.times do |i| GC.compact @wm[i] = obj end - assert_separately(%w(--disable-gems), <<-'end;') + assert_separately([], <<-'end;') wm = ObjectSpace::WeakMap.new obj = Object.new 100.times do @@ -211,6 +212,34 @@ class TestWeakMap < Test::Unit::TestCase end GC.compact end; + + assert_separately(%w(-robjspace), <<-'end;') + wm = ObjectSpace::WeakMap.new + key = Object.new + val = Object.new + wm[key] = val + + GC.verify_compaction_references(expand_heap: true, toward: :empty) + + assert_equal(val, wm[key]) + end; + + assert_separately(["-W0"], <<-'end;') + wm = ObjectSpace::WeakMap.new + + ary = 10_000.times.map do + o = Object.new + wm[o] = 1 + o + end + + GC.verify_compaction_references(expand_heap: true, toward: :empty) + end; + end + + def test_gc_compact_stress + omit "compaction doesn't work well on s390x" if RUBY_PLATFORM =~ /s390x/ # https://github.com/ruby/ruby/pull/5077 + EnvUtil.under_gc_compact_stress { ObjectSpace::WeakMap.new } end def test_replaced_values_bug_19531 |