summaryrefslogtreecommitdiff
path: root/test/ruby/test_string_memory.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/ruby/test_string_memory.rb')
-rw-r--r--test/ruby/test_string_memory.rb38
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