diff options
Diffstat (limited to 'test/ruby/test_string_memory.rb')
| -rw-r--r-- | test/ruby/test_string_memory.rb | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/test/ruby/test_string_memory.rb b/test/ruby/test_string_memory.rb index 3b4694f36f..a93a3bd54a 100644 --- a/test/ruby/test_string_memory.rb +++ b/test/ruby/test_string_memory.rb @@ -6,21 +6,31 @@ class TestStringMemory < Test::Unit::TestCase def capture_allocations(klass) allocations = [] - GC.start - GC.disable - generation = GC.count + EnvUtil.without_gc do + GC.start + generation = GC.count - ObjectSpace.trace_object_allocations do - yield + ObjectSpace.trace_object_allocations do + yield - ObjectSpace.each_object(klass) do |instance| - allocations << instance if ObjectSpace.allocation_generation(instance) == generation + ObjectSpace.each_object(klass) do |instance| + allocations << instance if ObjectSpace.allocation_generation(instance) == generation + end end - end - return allocations - ensure - GC.enable + return allocations.map do |instance| + [ + ObjectSpace.allocation_sourcefile(instance), + ObjectSpace.allocation_sourceline(instance), + instance.class, + instance, + ] + end.select do |path,| + # drop strings not created in this file + # (the parallel testing framework may create strings in a separate thread) + path == __FILE__ + end + end end def test_byteslice_prefix @@ -30,7 +40,7 @@ class TestStringMemory < Test::Unit::TestCase string.byteslice(0, 50_000) end - assert_equal 1, allocations.size + assert_equal 1, allocations.size, "One object allocation is expected, but allocated: #{ allocations.inspect }" end def test_byteslice_postfix @@ -40,7 +50,7 @@ class TestStringMemory < Test::Unit::TestCase string.byteslice(50_000, 100_000) end - assert_equal 1, allocations.size + assert_equal 1, allocations.size, "One object allocation is expected, but allocated: #{ allocations.inspect }" end def test_byteslice_postfix_twice @@ -50,6 +60,6 @@ class TestStringMemory < Test::Unit::TestCase string.byteslice(50_000, 100_000).byteslice(25_000, 50_000) end - assert_equal 2, allocations.size + assert_equal 2, allocations.size, "Two object allocations are expected, but allocated: #{ allocations.inspect }" end end |
