ruby-prof 0.8.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/CHANGES +23 -13
  2. data/{README → README.rdoc} +118 -111
  3. data/Rakefile +14 -26
  4. data/bin/ruby-prof +16 -4
  5. data/examples/empty.png +0 -0
  6. data/examples/graph.dot +106 -0
  7. data/examples/graph.png +0 -0
  8. data/examples/minus.png +0 -0
  9. data/examples/multi.flat.txt +23 -0
  10. data/examples/multi.graph.html +906 -0
  11. data/examples/multi.grind.dat +194 -0
  12. data/examples/multi.stack.html +573 -0
  13. data/examples/plus.png +0 -0
  14. data/examples/stack.html +573 -0
  15. data/ext/ruby_prof/extconf.rb +0 -1
  16. data/ext/ruby_prof/measure_allocations.h +6 -6
  17. data/ext/ruby_prof/measure_cpu_time.h +5 -5
  18. data/ext/ruby_prof/measure_gc_runs.h +1 -1
  19. data/ext/ruby_prof/measure_gc_time.h +1 -1
  20. data/ext/ruby_prof/measure_memory.h +4 -4
  21. data/ext/ruby_prof/measure_process_time.h +1 -1
  22. data/ext/ruby_prof/measure_wall_time.h +1 -1
  23. data/ext/ruby_prof/ruby_prof.c +240 -167
  24. data/ext/ruby_prof/ruby_prof.h +12 -10
  25. data/ext/ruby_prof/version.h +3 -3
  26. data/lib/ruby-prof.rb +7 -1
  27. data/lib/ruby-prof/abstract_printer.rb +5 -5
  28. data/lib/ruby-prof/aggregate_call_info.rb +9 -3
  29. data/lib/ruby-prof/call_info.rb +66 -1
  30. data/lib/ruby-prof/call_stack_printer.rb +751 -0
  31. data/lib/ruby-prof/call_tree_printer.rb +2 -2
  32. data/lib/ruby-prof/dot_printer.rb +151 -0
  33. data/lib/ruby-prof/empty.png +0 -0
  34. data/lib/ruby-prof/flat_printer.rb +16 -16
  35. data/lib/ruby-prof/flat_printer_with_line_numbers.rb +13 -13
  36. data/lib/ruby-prof/graph_html_printer.rb +58 -36
  37. data/lib/ruby-prof/graph_printer.rb +30 -30
  38. data/lib/ruby-prof/method_info.rb +24 -4
  39. data/lib/ruby-prof/minus.png +0 -0
  40. data/lib/ruby-prof/multi_printer.rb +54 -0
  41. data/lib/ruby-prof/plus.png +0 -0
  42. data/lib/ruby-prof/rack.rb +28 -0
  43. data/lib/ruby-prof/result.rb +70 -0
  44. data/lib/ruby-prof/symbol_to_proc.rb +1 -1
  45. data/lib/ruby-prof/task.rb +19 -19
  46. data/lib/ruby-prof/test.rb +3 -3
  47. data/lib/ruby_prof.so +0 -0
  48. data/rails/environment/profile.rb +2 -2
  49. data/rails/example/example_test.rb +2 -2
  50. data/rails/profile_test_helper.rb +1 -1
  51. data/test/aggregate_test.rb +21 -6
  52. data/test/basic_test.rb +3 -3
  53. data/test/duplicate_names_test.rb +2 -2
  54. data/test/enumerable_test.rb +2 -2
  55. data/test/exceptions_test.rb +2 -2
  56. data/test/exclude_threads_test.rb +45 -45
  57. data/test/exec_test.rb +2 -2
  58. data/test/line_number_test.rb +11 -11
  59. data/test/measurement_test.rb +4 -3
  60. data/test/method_elimination_test.rb +74 -0
  61. data/test/module_test.rb +7 -7
  62. data/test/multi_printer_test.rb +81 -0
  63. data/test/no_method_class_test.rb +2 -2
  64. data/test/prime.rb +7 -10
  65. data/test/printers_test.rb +57 -47
  66. data/test/recursive_test.rb +23 -62
  67. data/test/singleton_test.rb +3 -2
  68. data/test/stack_printer_test.rb +74 -0
  69. data/test/stack_test.rb +1 -1
  70. data/test/start_stop_test.rb +2 -2
  71. data/test/test_suite.rb +9 -0
  72. data/test/thread_test.rb +17 -17
  73. data/test/unique_call_path_test.rb +4 -4
  74. metadata +29 -8
@@ -16,7 +16,7 @@ module Bar
16
16
  sleep(0.5)
17
17
  Foo::hello
18
18
  end
19
-
19
+
20
20
  def hello
21
21
  sleep(0.5)
22
22
  Bar::hello
@@ -32,23 +32,23 @@ class ModuleTest < Test::Unit::TestCase
32
32
  end
33
33
 
34
34
  methods = result.threads.values.first.sort.reverse
35
-
35
+
36
36
  # Length should be 5
37
37
  assert_equal(5, methods.length)
38
-
38
+
39
39
  method = methods[0]
40
40
  assert_equal('ModuleTest#test_nested_modules', method.full_name)
41
-
41
+
42
42
  method = methods[1]
43
43
  assert_equal('Bar#hello', method.full_name)
44
44
 
45
45
  method = methods[2]
46
46
  assert_equal('Kernel#sleep', method.full_name)
47
-
47
+
48
48
  method = methods[3]
49
49
  assert_equal('<Module::Bar>#hello', method.full_name)
50
-
50
+
51
51
  method = methods[4]
52
52
  assert_equal('<Module::Foo>#hello', method.full_name)
53
- end
53
+ end
54
54
  end
@@ -0,0 +1,81 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'test/unit'
4
+ require 'ruby-prof'
5
+ require 'tmpdir'
6
+
7
+ # Test data
8
+ # A
9
+ # / \
10
+ # B C
11
+ # \
12
+ # B
13
+
14
+ class MSTPT
15
+ def a
16
+ 100.times{b}
17
+ 300.times{c}
18
+ c;c;c
19
+ end
20
+
21
+ def b
22
+ sleep 0
23
+ end
24
+
25
+ def c
26
+ 5.times{b}
27
+ end
28
+ end
29
+
30
+ class MultiPrinterTest < Test::Unit::TestCase
31
+ def setup
32
+ # Need to use wall time for this test due to the sleep calls
33
+ RubyProf::measure_mode = RubyProf::WALL_TIME
34
+ end
35
+
36
+ def test_all_profiles_can_be_created
37
+ start_time = Time.now
38
+ RubyProf.start
39
+ 5.times{MSTPT.new.a}
40
+ result = RubyProf.stop
41
+ end_time = Time.now
42
+ expected_time = end_time - start_time
43
+ stack = graph = nil
44
+ assert_nothing_raised { stack, graph = print(result) }
45
+ re = Regexp.new('
46
+ \s*<table>
47
+ \s*<tr>
48
+ \s*<th>Thread ID</th>
49
+ \s*<th>Total Time</th>
50
+ \s*</tr>
51
+ \s*
52
+ \s*<tr>
53
+ \s*<td><a href="#\d+">\d+</a></td>
54
+ \s*<td>([\.0-9]+)</td>
55
+ \s*</tr>
56
+ \s*
57
+ \s*</table>')
58
+ assert graph =~ re
59
+ display_time = $1.to_f
60
+ difference = (expected_time-display_time).abs
61
+ assert_in_delta expected_time, display_time, 0.001
62
+ end
63
+
64
+ private
65
+ def print(result)
66
+ test = caller.first =~ /in `(.*)'/ ? $1 : "test"
67
+ path = Dir::tmpdir
68
+ profile = "ruby_prof_#{test}"
69
+ printer = RubyProf::MultiPrinter.new(result)
70
+ printer.print(:path => path, :profile => profile,
71
+ :threshold => 0, :min_percent => 0, :title => "ruby_prof #{test}")
72
+ if RUBY_PLATFORM =~ /darwin/ && ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT']=="1"
73
+ system("open '#{printer.stack_profile}'")
74
+ end
75
+ if GC.respond_to?(:dump_file_and_line_info)
76
+ GC.start
77
+ GC.dump_file_and_line_info("heap.dump")
78
+ end
79
+ [File.open(printer.stack_profile){|f|f.read}, File.open(printer.graph_profile){|f|f.read}]
80
+ end
81
+ end
@@ -2,7 +2,7 @@
2
2
  require 'ruby-prof'
3
3
 
4
4
  # Make sure this works with no class or method
5
- result = RubyProf.profile do
5
+ result = RubyProf.profile do
6
6
  sleep 1
7
7
  end
8
8
 
@@ -10,4 +10,4 @@ methods = result.threads.values.first
10
10
  global_method = methods.sort_by {|method| method.full_name}.first
11
11
  if global_method.full_name != 'Global#[No method]'
12
12
  raise(RuntimeError, "Wrong method name. Expected: Global#[No method]. Actual: #{global_method.full_name}")
13
- end
13
+ end
@@ -1,7 +1,7 @@
1
1
  # A silly little test program that finds prime numbers. It
2
2
  # is intentionally badly designed to show off the use
3
3
  # of ruby-prof.
4
- #
4
+ #
5
5
  # Source from http://people.cs.uchicago.edu/~bomb154/154/maclabs/profilers-lab/
6
6
 
7
7
  def make_random_array(length, maxnum)
@@ -9,10 +9,10 @@ def make_random_array(length, maxnum)
9
9
  result.each_index do |i|
10
10
  result[i] = rand(maxnum)
11
11
  end
12
-
12
+
13
13
  result
14
14
  end
15
-
15
+
16
16
  def is_prime(x)
17
17
  y = 2
18
18
  y.upto(x-1) do |i|
@@ -43,16 +43,13 @@ def find_largest(primes)
43
43
  largest
44
44
  end
45
45
 
46
- def run_primes
47
- length = 10
48
- maxnum = 1000
49
-
46
+ def run_primes(length=10, maxnum=1000)
50
47
  # Create random numbers
51
48
  random_array = make_random_array(length, maxnum)
52
-
49
+
53
50
  # Find the primes
54
51
  primes = find_primes(random_array)
55
-
52
+
56
53
  # Find the largest primes
57
54
  # largest = find_largest(primes)
58
- end
55
+ end
@@ -1,41 +1,52 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'test/unit'
3
3
  require 'ruby-prof'
4
- require File.dirname(__FILE__) + '/prime'
4
+ require 'prime'
5
5
 
6
6
  # -- Tests ----
7
7
  class PrintersTest < Test::Unit::TestCase
8
-
8
+
9
9
  def go
10
- run_primes
10
+ run_primes(10000)
11
11
  end
12
-
12
+
13
13
  def setup
14
14
  RubyProf::measure_mode = RubyProf::WALL_TIME # WALL_TIME so we can use sleep in our test
15
15
  @result = RubyProf.profile do
16
- run_primes
16
+ run_primes(10000)
17
17
  go
18
18
  end
19
-
19
+
20
20
  end
21
-
21
+
22
22
  def test_printers
23
- printer = RubyProf::FlatPrinter.new(@result)
24
- printer.print(STDOUT)
25
-
26
- printer = RubyProf::FlatPrinterWithLineNumbers.new(@result)
27
- printer.print(STDOUT)
28
-
29
- printer = RubyProf::GraphHtmlPrinter.new(@result)
30
- printer.print
31
-
32
- printer = RubyProf::GraphPrinter.new(@result)
33
- printer.print
34
-
35
- printer = RubyProf::CallTreePrinter.new(@result)
36
- printer.print(STDOUT)
37
-
38
- # we should get here
23
+ assert_nothing_raised do
24
+ output = ENV['SHOW_RUBY_PROF_PRINTER_OUTPUT'] == "1" ? STDOUT : StringIO.new('')
25
+
26
+ printer = RubyProf::FlatPrinter.new(@result)
27
+ printer.print(output)
28
+
29
+ printer = RubyProf::FlatPrinterWithLineNumbers.new(@result)
30
+ printer.print(output)
31
+
32
+ printer = RubyProf::GraphHtmlPrinter.new(@result)
33
+ printer.print(output)
34
+
35
+ printer = RubyProf::GraphPrinter.new(@result)
36
+ printer.print(output)
37
+
38
+ printer = RubyProf::CallTreePrinter.new(@result)
39
+ printer.print(output)
40
+
41
+ printer = RubyProf::DotPrinter.new(@result)
42
+ File.open("examples/graph.dot", "w") {|f| printer.print(f)}
43
+
44
+ printer = RubyProf::CallStackPrinter.new(@result)
45
+ File.open("examples/stack.html", "w") {|f| printer.print(f, :application => "primes")}
46
+
47
+ printer = RubyProf::MultiPrinter.new(@result)
48
+ printer.print(:path => "examples", :profile => "multi", :application => "primes")
49
+ end
39
50
  end
40
51
 
41
52
  def test_flat_string
@@ -45,32 +56,32 @@ class PrintersTest < Test::Unit::TestCase
45
56
 
46
57
  def helper_test_flat_string klass
47
58
  output = ''
48
-
59
+
49
60
  printer = klass.new(@result)
50
61
  printer.print(output)
51
-
62
+
52
63
  assert_match(/Thread ID: -?\d+/i, output)
53
64
  assert_match(/Total: \d+\.\d+/i, output)
54
65
  assert_match(/Object#run_primes/i, output)
55
66
  output
56
67
  end
57
-
68
+
58
69
  def test_flat_string_with_numbers
59
70
  output = helper_test_flat_string RubyProf::FlatPrinterWithLineNumbers
60
- assert_match(/prime.rb/, output)
71
+ assert_match(/prime.rb/, output)
61
72
  assert_no_match(/ruby_runtime:0/, output)
62
73
  assert_match(/called from/, output)
63
-
74
+
64
75
  # should combine common parents
65
76
  if RUBY_VERSION < '1.9'
66
77
  assert_equal(3, output.scan(/Object#is_prime/).length)
67
- else
68
- # 1.9
69
- assert_equal(2, output.scan(/Object#is_prime/).length)
78
+ else
79
+ # 1.9
80
+ assert_equal(2, output.scan(/Object#is_prime/).length)
70
81
  end
71
- assert_no_match(/\.\/test\/prime.rb/, output) # don't use relative paths
82
+ assert_no_match(/\.\/test\/prime.rb/, output) # don't use relative paths
72
83
  end
73
-
84
+
74
85
  def test_graph_html_string
75
86
  output = ''
76
87
  printer = RubyProf::GraphHtmlPrinter.new(@result)
@@ -80,7 +91,7 @@ class PrintersTest < Test::Unit::TestCase
80
91
  assert_match( %r{<th>Total Time</th>}i, output )
81
92
  assert_match( /Object#run_primes/i, output )
82
93
  end
83
-
94
+
84
95
  def test_graph_string
85
96
  output = ''
86
97
  printer = RubyProf::GraphPrinter.new(@result)
@@ -90,7 +101,7 @@ class PrintersTest < Test::Unit::TestCase
90
101
  assert_match( /Total Time: \d+\.\d+/i, output )
91
102
  assert_match( /Object#run_primes/i, output )
92
103
  end
93
-
104
+
94
105
  def test_call_tree_string
95
106
  output = ''
96
107
  printer = RubyProf::CallTreePrinter.new(@result)
@@ -99,33 +110,32 @@ class PrintersTest < Test::Unit::TestCase
99
110
  assert_match(/events: wall_time/i, output)
100
111
  assert_no_match(/d\d\d\d\d\d/, output) # old bug looked [in error] like Object::run_primes(d5833116)
101
112
  end
102
-
113
+
103
114
  def do_nothing
104
115
  start = Time.now
105
116
  while(Time.now == start)
106
117
  end
107
118
  end
108
-
119
+
109
120
  def test_all_with_small_percentiles
110
-
121
+
111
122
  result = RubyProf.profile do
112
123
  sleep 2
113
- do_nothing
124
+ do_nothing
114
125
  end
115
-
126
+
116
127
  # RubyProf::CallTreePrinter doesn't "do" a min_percent
117
128
  # RubyProf::FlatPrinter only outputs if self time > percent...
118
129
  # RubyProf::FlatPrinterWithLineNumbers same
119
130
  for klass in [ RubyProf::GraphPrinter, RubyProf::GraphHtmlPrinter]
120
- puts klass
121
131
  printer = klass.new(result)
122
132
  out = ''
123
133
  output = printer.print(out, :min_percent => 0.00000001 )
124
- assert_match(/do_nothing/, out)
134
+ assert_match(/do_nothing/, out)
125
135
  end
126
-
127
- end
128
-
129
-
130
-
136
+
137
+ end
138
+
139
+
140
+
131
141
  end
@@ -34,13 +34,13 @@ class RecursiveTest < Test::Unit::TestCase
34
34
  end
35
35
 
36
36
  methods = result.threads.values.first.sort.reverse
37
-
37
+
38
38
  if RUBY_VERSION < '1.9'
39
- assert_equal(6, methods.length) # includes Fixnum+, Fixnum==...
39
+ assert_equal(5, methods.length) # includes Fixnum+, Fixnum==...
40
40
  else
41
- assert_equal(4, methods.length)
41
+ assert_equal(3, methods.length) # which don't show up in 1.9
42
42
  end
43
-
43
+
44
44
  method = methods[0]
45
45
  assert_equal('RecursiveTest#test_simple', method.full_name)
46
46
  assert_equal(1, method.called)
@@ -56,13 +56,13 @@ class RecursiveTest < Test::Unit::TestCase
56
56
 
57
57
  method = methods[1]
58
58
  assert_equal('Object#simple', method.full_name)
59
- assert_equal(1, method.called)
59
+ assert_equal(2, method.called)
60
60
  assert_in_delta(2, method.total_time, 0.02)
61
61
  assert_in_delta(0, method.self_time, 0.02)
62
62
  assert_in_delta(0, method.wait_time, 0.02)
63
63
  assert_in_delta(2, method.children_time, 0.02)
64
64
 
65
- assert_equal(1, method.call_infos.length)
65
+ assert_equal(2, method.call_infos.length)
66
66
  call_info = method.call_infos[0]
67
67
  assert_equal('RecursiveTest#test_simple->Object#simple', call_info.call_sequence)
68
68
  if RUBY_VERSION < '1.9'
@@ -70,6 +70,7 @@ class RecursiveTest < Test::Unit::TestCase
70
70
  else
71
71
  assert_equal(2, call_info.children.length)
72
72
  end
73
+
73
74
  method = methods[2]
74
75
  assert_equal('Kernel#sleep', method.full_name)
75
76
  assert_equal(2, method.called)
@@ -84,24 +85,11 @@ class RecursiveTest < Test::Unit::TestCase
84
85
  assert_equal(0, call_info.children.length)
85
86
 
86
87
  call_info = method.call_infos[1]
87
- assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple(d1)->Kernel#sleep', call_info.call_sequence)
88
+ assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple->Kernel#sleep', call_info.call_sequence)
88
89
  assert_equal(0, call_info.children.length)
89
90
 
90
- method = methods[3]
91
- assert_equal('Object#simple(d1)', method.full_name)
92
- assert_equal(1, method.called)
93
- assert_in_delta(1, method.total_time, 0.01)
94
- assert_in_delta(0, method.self_time, 0.01)
95
- assert_in_delta(0, method.wait_time, 0.01)
96
- assert_in_delta(1, method.children_time, 0.01)
97
-
98
- assert_equal(1, method.call_infos.length)
99
- call_info = method.call_infos[0]
100
- assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple(d1)', call_info.call_sequence)
101
91
  if RUBY_VERSION < '1.9'
102
- assert_equal(3, call_info.children.length)
103
-
104
- method = methods[4]
92
+ method = methods[3]
105
93
  assert_equal('Fixnum#-', method.full_name)
106
94
  assert_equal(2, method.called)
107
95
  assert_in_delta(0, method.total_time, 0.01)
@@ -115,10 +103,10 @@ class RecursiveTest < Test::Unit::TestCase
115
103
  assert_equal(0, call_info.children.length)
116
104
 
117
105
  call_info = method.call_infos[1]
118
- assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple(d1)->Fixnum#-', call_info.call_sequence)
106
+ assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple->Fixnum#-', call_info.call_sequence)
119
107
  assert_equal(0, call_info.children.length)
120
108
 
121
- method = methods[5]
109
+ method = methods[4]
122
110
  assert_equal('Fixnum#==', method.full_name)
123
111
  assert_equal(2, method.called)
124
112
  assert_in_delta(0, method.total_time, 0.01)
@@ -132,11 +120,8 @@ class RecursiveTest < Test::Unit::TestCase
132
120
  assert_equal(0, call_info.children.length)
133
121
 
134
122
  call_info = method.call_infos[1]
135
- assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple(d1)->Fixnum#==', call_info.call_sequence)
123
+ assert_equal('RecursiveTest#test_simple->Object#simple->Object#simple->Fixnum#==', call_info.call_sequence)
136
124
  assert_equal(0, call_info.children.length)
137
-
138
- else
139
- assert_equal(1, call_info.children.length)
140
125
  end
141
126
  end
142
127
 
@@ -147,9 +132,9 @@ class RecursiveTest < Test::Unit::TestCase
147
132
 
148
133
  methods = result.threads.values.first.sort.reverse
149
134
  if RUBY_VERSION < '1.9'
150
- assert_equal(8, methods.length) # includes Fixnum+ and Fixnum==, which aren't included in 1.9
135
+ assert_equal(6, methods.length) # includes Fixnum+ and Fixnum==, which aren't included in 1.9
151
136
  else
152
- assert_equal(6, methods.length)
137
+ assert_equal(4, methods.length) # which don't show up in 1.9
153
138
  end
154
139
  method = methods[0]
155
140
  assert_equal('RecursiveTest#test_cycle', method.full_name)
@@ -166,26 +151,26 @@ class RecursiveTest < Test::Unit::TestCase
166
151
 
167
152
  method = methods[1]
168
153
  assert_equal('Object#cycle', method.full_name)
169
- assert_equal(1, method.called)
154
+ assert_equal(2, method.called)
170
155
  assert_in_delta(2, method.total_time, 0.05)
171
156
  assert_in_delta(0, method.self_time, 0.01)
172
157
  assert_in_delta(0, method.wait_time, 0.01)
173
158
  assert_in_delta(2, method.children_time, 0.05)
174
159
 
175
- assert_equal(1, method.call_infos.length)
160
+ assert_equal(2, method.call_infos.length)
176
161
  call_info = method.call_infos[0]
177
162
  assert_equal('RecursiveTest#test_cycle->Object#cycle', call_info.call_sequence)
178
163
  assert_equal(1, call_info.children.length)
179
164
 
180
165
  method = methods[2]
181
166
  assert_equal('Object#sub_cycle', method.full_name)
182
- assert_equal(1, method.called)
167
+ assert_equal(2, method.called)
183
168
  assert_in_delta(2, method.total_time, 0.05)
184
169
  assert_in_delta(0, method.self_time, 0.05)
185
170
  assert_in_delta(0, method.wait_time, 0.05)
186
171
  assert_in_delta(2, method.children_time, 0.05)
187
172
 
188
- assert_equal(1, method.call_infos.length)
173
+ assert_equal(2, method.call_infos.length)
189
174
  call_info = method.call_infos[0]
190
175
  assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle', call_info.call_sequence)
191
176
  if RUBY_VERSION < '1.9'
@@ -208,33 +193,11 @@ class RecursiveTest < Test::Unit::TestCase
208
193
  assert_equal(0, call_info.children.length)
209
194
 
210
195
  call_info = method.call_infos[1]
211
- assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle(d1)->Object#sub_cycle(d1)->Kernel#sleep', call_info.call_sequence)
196
+ assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle->Object#sub_cycle->Kernel#sleep', call_info.call_sequence)
212
197
  assert_equal(0, call_info.children.length)
213
198
 
214
- method = methods[4]
215
- assert_equal('Object#cycle(d1)', method.full_name)
216
- assert_equal(1, method.called)
217
- assert_in_delta(1, method.total_time, 0.05)
218
- assert_in_delta(0, method.self_time, 0.01)
219
- assert_in_delta(0, method.wait_time, 0.01)
220
- assert_in_delta(1, method.children_time, 0.05)
221
-
222
- assert_equal(1, method.call_infos.length)
223
- call_info = method.call_infos[0]
224
- assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle(d1)', call_info.call_sequence)
225
- assert_equal(1, call_info.children.length)
226
-
227
- method = methods[5]
228
- assert_equal('Object#sub_cycle(d1)', method.full_name)
229
- assert_equal(1, method.called)
230
- assert_in_delta(1, method.total_time, 0.01)
231
- assert_in_delta(0, method.self_time, 0.01)
232
- assert_in_delta(0, method.wait_time, 0.01)
233
- call_info = method.call_infos[0]
234
- assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle(d1)->Object#sub_cycle(d1)', call_info.call_sequence)
235
199
  if RUBY_VERSION < '1.9'
236
- assert_equal(3, call_info.children.length)
237
- method = methods[6]
200
+ method = methods[4]
238
201
  assert_equal('Fixnum#-', method.full_name)
239
202
  assert_equal(2, method.called)
240
203
  assert_in_delta(0, method.total_time, 0.01)
@@ -248,10 +211,10 @@ class RecursiveTest < Test::Unit::TestCase
248
211
  assert_equal(0, call_info.children.length)
249
212
 
250
213
  call_info = method.call_infos[1]
251
- assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle(d1)->Object#sub_cycle(d1)->Fixnum#-', call_info.call_sequence)
214
+ assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle->Object#sub_cycle->Fixnum#-', call_info.call_sequence)
252
215
  assert_equal(0, call_info.children.length)
253
216
 
254
- method = methods[7]
217
+ method = methods[5]
255
218
  assert_equal('Fixnum#==', method.full_name)
256
219
  assert_equal(2, method.called)
257
220
  assert_in_delta(0, method.total_time, 0.01)
@@ -265,10 +228,8 @@ class RecursiveTest < Test::Unit::TestCase
265
228
  assert_equal(0, call_info.children.length)
266
229
 
267
230
  call_info = method.call_infos[1]
268
- assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle(d1)->Object#sub_cycle(d1)->Fixnum#==', call_info.call_sequence)
231
+ assert_equal('RecursiveTest#test_cycle->Object#cycle->Object#sub_cycle->Object#cycle->Object#sub_cycle->Fixnum#==', call_info.call_sequence)
269
232
  assert_equal(0, call_info.children.length)
270
- else
271
- assert_equal(1, call_info.children.length)
272
233
  end
273
234
 
274
235
  end