test/gc_test.rb in ruby-prof-1.1.0 vs test/gc_test.rb in ruby-prof-1.2.0
- old
+ new
@@ -2,10 +2,18 @@
# encoding: UTF-8
require File.expand_path('../test_helper', __FILE__)
class GcTest < TestCase
+ def setup
+ GC.stress = true
+ end
+
+ def teardown
+ GC.stress = false
+ end
+
def some_method
Array.new(3 * 4)
end
def run_profile
@@ -13,13 +21,12 @@
self.some_method
end
end
def test_hold_onto_thread
- threads = 1000.times.reduce(Array.new) do |array, i|
+ threads = 5.times.reduce(Array.new) do |array, i|
array.concat(run_profile.threads)
- GC.start
array
end
threads.each do |thread|
error = assert_raises(RuntimeError) do
@@ -28,61 +35,63 @@
assert_match(/has already been freed/, error.message)
end
assert(true)
end
- def test_hold_onto_method
- methods = 1000.times.reduce(Array.new) do |array, i|
- array.concat(run_profile.threads.map(&:methods).flatten)
- GC.start
+ def test_hold_onto_root_call_info
+ call_trees = 5.times.reduce(Array.new) do |array, i|
+ array.concat(run_profile.threads.map(&:call_tree))
array
end
- methods.each do |method|
+ call_trees.each do |call_tree|
error = assert_raises(RuntimeError) do
- method.method_name
+ call_tree.source_file
end
assert_match(/has already been freed/, error.message)
end
assert(true)
end
- def test_hold_onto_parent_callers
- call_infos = 1000.times.reduce(Array.new) do |array, i|
- array.concat(run_profile.threads.map(&:methods).flatten.map(&:callers).flatten)
- GC.start
+ def test_hold_onto_method
+ methods = 5.times.reduce(Array.new) do |array, i|
+ profile = run_profile
+ methods_2 = profile.threads.map(&:methods).flatten
+ array.concat(methods_2)
array
end
- call_infos.each do |call_info|
+ methods.each do |method|
error = assert_raises(RuntimeError) do
- call_info.source_file
+ method.method_name
end
assert_match(/has already been freed/, error.message)
end
assert(true)
end
- def test_hold_onto_parent_callees
- call_infos = 1000.times.reduce(Array.new) do |array, i|
- array.concat(run_profile.threads.map(&:methods).flatten.map(&:callees).flatten)
- GC.start
+ def test_hold_onto_call_trees
+ method_call_infos = 5.times.reduce(Array.new) do |array, i|
+ profile = run_profile
+ call_trees = profile.threads.map(&:methods).flatten.map(&:call_trees).flatten
+ array.concat(call_trees)
array
end
- call_infos.each do |call_info|
+ method_call_infos.each do |call_trees|
error = assert_raises(RuntimeError) do
- call_info.source_file
+ call_trees.call_trees
end
assert_match(/has already been freed/, error.message)
end
assert(true)
end
def test_hold_onto_measurements
- measurements = 1000.times.reduce(Array.new) do |array, i|
- array.concat(run_profile.threads.map(&:methods).flatten.map(&:callers).flatten.map(&:measurement))
- GC.start
+ measurements = 5.times.reduce(Array.new) do |array, i|
+ profile = run_profile
+ measurements = profile.threads.map(&:methods).flatten.map(&:measurement)
+ array.concat(measurements)
array
end
measurements.each do |measurement|
error = assert_raises(RuntimeError) do