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