diff options
author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 |
---|---|---|
committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 |
commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/test/test_weakref.rb |
Fresh start
Diffstat (limited to 'jni/ruby/test/test_weakref.rb')
-rw-r--r-- | jni/ruby/test/test_weakref.rb | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/jni/ruby/test/test_weakref.rb b/jni/ruby/test/test_weakref.rb new file mode 100644 index 0000000..d21b431 --- /dev/null +++ b/jni/ruby/test/test_weakref.rb @@ -0,0 +1,71 @@ +require 'test/unit' +require 'weakref' + +class TestWeakRef < Test::Unit::TestCase + def make_weakref(level = 10) + if level > 0 + make_weakref(level - 1) + else + WeakRef.new(Object.new) + end + end + + def test_ref + obj = Object.new + weak = WeakRef.new(obj) + assert_equal(obj.to_s, weak.to_s) + assert_predicate(weak, :weakref_alive?) + end + + def test_recycled + weaks = [] + weak = nil + 100.times do + weaks << make_weakref + ObjectSpace.garbage_collect + ObjectSpace.garbage_collect + break if weak = weaks.find {|w| !w.weakref_alive?} + end + assert_raise(WeakRef::RefError) {weak.to_s} + assert_not_predicate(weak, :weakref_alive?) + end + + def test_not_reference_different_object + bug7304 = '[ruby-core:49044]' + weakrefs = [] + 3.times do + obj = Object.new + def obj.foo; end + weakrefs << WeakRef.new(obj) + ObjectSpace.garbage_collect + end + assert_nothing_raised(NoMethodError, bug7304) { + weakrefs.each do |weak| + begin + weak.foo + rescue WeakRef::RefError + end + end + } + end + + def test_weakref_finalize + bug7304 = '[ruby-core:49044]' + assert_normal_exit %q{ + require 'weakref' + obj = Object.new + 3.times do + WeakRef.new(obj) + ObjectSpace.garbage_collect + end + }, bug7304 + end + + def test_repeated_object_leak + bug10537 = '[ruby-core:66428]' + assert_no_memory_leak(%w(-rweakref), '', <<-'end;', bug10537, timeout: 60) + a = Object.new + 150_000.times { WeakRef.new(a) } + end; + end +end |