From fcbf63e62c627deae76c1b8cb8c0876c536ed811 Mon Sep 17 00:00:00 2001 From: Jari Vetoniemi Date: Mon, 16 Mar 2020 18:49:26 +0900 Subject: Fresh start --- jni/ruby/test/test_weakref.rb | 71 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 jni/ruby/test/test_weakref.rb (limited to 'jni/ruby/test/test_weakref.rb') 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 -- cgit v1.2.3