ruby-prof 1.7.1 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES +8 -0
  3. data/ext/ruby_prof/extconf.rb +23 -22
  4. data/ext/ruby_prof/rp_call_trees.c +296 -296
  5. data/ext/ruby_prof/rp_call_trees.h +28 -28
  6. data/ext/ruby_prof/rp_measure_allocations.c +47 -47
  7. data/ext/ruby_prof/rp_measure_process_time.c +64 -66
  8. data/ext/ruby_prof/rp_measure_wall_time.c +52 -64
  9. data/ext/ruby_prof/rp_method.c +551 -551
  10. data/ext/ruby_prof/rp_stack.c +212 -212
  11. data/ext/ruby_prof/ruby_prof.c +50 -50
  12. data/ext/ruby_prof/ruby_prof.h +3 -2
  13. data/ext/ruby_prof/vc/ruby_prof.vcxproj +3 -3
  14. data/lib/ruby-prof/compatibility.rb +113 -113
  15. data/lib/ruby-prof/exclude_common_methods.rb +204 -204
  16. data/lib/ruby-prof/printers/abstract_printer.rb +156 -138
  17. data/lib/ruby-prof/version.rb +3 -3
  18. data/ruby-prof.gemspec +66 -65
  19. data/test/dynamic_method_test.rb +9 -21
  20. data/test/enumerable_test.rb +23 -21
  21. data/test/exclude_methods_test.rb +363 -257
  22. data/test/fiber_test.rb +195 -195
  23. data/test/gc_test.rb +104 -102
  24. data/test/line_number_test.rb +426 -289
  25. data/test/measure_allocations_test.rb +1172 -1081
  26. data/test/measure_memory_test.rb +1193 -1456
  27. data/test/measure_process_time_test.rb +3330 -2477
  28. data/test/measure_wall_time_test.rb +634 -568
  29. data/test/merge_test.rb +146 -146
  30. data/test/method_info_test.rb +100 -95
  31. data/test/printers_test.rb +178 -135
  32. data/test/recursive_test.rb +796 -622
  33. data/test/start_stop_test.rb +4 -4
  34. data/test/test_helper.rb +20 -20
  35. data/test/thread_test.rb +229 -231
  36. data/test/unique_call_path_test.rb +9 -22
  37. data/test/yarv_test.rb +1 -5
  38. metadata +19 -9
  39. data/test/crash2.rb +0 -144
@@ -1,289 +1,426 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- require File.expand_path('../test_helper', __FILE__)
5
-
6
- class LineNumbers
7
- def method_1
8
- method_2
9
- _filler = 1
10
- method_3
11
- end
12
-
13
- def method_2
14
- _filler = 1
15
- 2.times do |i|
16
- _filler = 2
17
- method_3
18
- end
19
- end
20
-
21
- def method_3
22
- method_4
23
- end
24
-
25
- def method_4
26
- end
27
- end
28
-
29
- # -- Tests ----
30
- class LineNumbersTest < TestCase
31
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.3')
32
- def test_function_line_no
33
- numbers = LineNumbers.new
34
-
35
- result = RubyProf::Profile.profile do
36
- numbers.method_1
37
- end
38
-
39
- # Sort methods by name to have stable results
40
- methods = result.threads.first.methods.sort_by(&:full_name)
41
- assert_equal(6, methods.length)
42
-
43
- # Method 0
44
- method = methods[0]
45
- assert_equal('Integer#times', method.full_name)
46
- assert_equal(0, method.line)
47
-
48
- assert_equal(1, method.call_trees.callers.count)
49
- call_tree = method.call_trees.callers[0]
50
- assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
51
- assert_equal(15, call_tree.line)
52
-
53
- assert_equal(1, method.call_trees.callees.count)
54
- call_tree = method.call_trees.callees[0]
55
- assert_equal('LineNumbers#method_3', call_tree.target.full_name)
56
- assert_equal(17, call_tree.line)
57
-
58
- # Method 1
59
- method = methods[1]
60
- assert_equal('LineNumbers#method_1', method.full_name)
61
- assert_equal(7, method.line)
62
-
63
- assert_equal(1, method.call_trees.callers.count)
64
- call_tree = method.call_trees.callers[0]
65
- assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
66
- assert_equal(36, call_tree.line)
67
-
68
- assert_equal(2, method.call_trees.callees.count)
69
- call_tree = method.call_trees.callees[0]
70
- assert_equal('LineNumbers#method_2', call_tree.target.full_name)
71
- assert_equal(8, call_tree.line)
72
-
73
- call_tree = method.call_trees.callees[1]
74
- assert_equal('LineNumbers#method_3', call_tree.target.full_name)
75
- assert_equal(10, call_tree.line)
76
-
77
- # Method 2
78
- method = methods[2]
79
- assert_equal('LineNumbers#method_2', method.full_name)
80
- assert_equal(13, method.line)
81
-
82
- assert_equal(1, method.call_trees.callers.count)
83
- call_tree = method.call_trees.callers[0]
84
- assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
85
- assert_equal(8, call_tree.line)
86
-
87
- assert_equal(1, method.call_trees.callees.count)
88
- call_tree = method.call_trees.callees[0]
89
- assert_equal('Integer#times', call_tree.target.full_name)
90
- assert_equal(15, call_tree.line)
91
-
92
- # Method 3
93
- method = methods[3]
94
- assert_equal('LineNumbers#method_3', method.full_name)
95
- assert_equal(21, method.line)
96
-
97
- assert_equal(2, method.call_trees.callers.count)
98
- call_tree = method.call_trees.callers[0]
99
- assert_equal('Integer#times', call_tree.parent.target.full_name)
100
- assert_equal(17, call_tree.line)
101
-
102
- call_tree = method.call_trees.callers[1]
103
- assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
104
- assert_equal(10, call_tree.line)
105
-
106
- assert_equal(1, method.call_trees.callees.count)
107
- call_tree = method.call_trees.callees[0]
108
- assert_equal('LineNumbers#method_4', call_tree.target.full_name)
109
- assert_equal(22, call_tree.line)
110
-
111
- # Method 4
112
- method = methods[4]
113
- assert_equal('LineNumbers#method_4', method.full_name)
114
- assert_equal(25, method.line)
115
-
116
- assert_equal(1, method.call_trees.callers.count)
117
- call_tree = method.call_trees.callers[0]
118
- assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
119
- assert_equal(22, call_tree.line)
120
-
121
- assert_equal(0, method.call_trees.callees.count)
122
-
123
- # Method 5
124
- method = methods[5]
125
- assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
126
- assert_equal(36, method.line)
127
-
128
- assert_equal(0, method.call_trees.callers.count)
129
-
130
- assert_equal(1, method.call_trees.callees.count)
131
- call_tree = method.call_trees.callees[0]
132
- assert_equal('LineNumbers#method_1', call_tree.target.full_name)
133
- assert_equal(36, call_tree.line)
134
- end
135
- else
136
- def test_function_line_no
137
- numbers = LineNumbers.new
138
-
139
- result = RubyProf::Profile.profile do
140
- numbers.method_1
141
- end
142
-
143
- # Sort methods by name to have stable results
144
- methods = result.threads.first.methods.sort_by(&:full_name)
145
- assert_equal(9, methods.length)
146
-
147
- # Method 0
148
- method = methods[0]
149
- assert_equal('Integer#<', method.full_name)
150
- assert_equal(0, method.line)
151
-
152
- assert_equal(1, method.call_trees.callers.count)
153
- call_tree = method.call_trees.callers[0]
154
- assert_equal('Integer#times', call_tree.parent.target.full_name)
155
- assert_equal(236, call_tree.line)
156
-
157
- assert_equal(0, method.call_trees.callees.count)
158
-
159
- # Method 1
160
- method = methods[1]
161
- assert_equal('Integer#succ', method.full_name)
162
- assert_equal(0, method.line)
163
-
164
- assert_equal(1, method.call_trees.callers.count)
165
- call_tree = method.call_trees.callers[0]
166
- assert_equal('Integer#times', call_tree.parent.target.full_name)
167
- assert_equal(238, call_tree.line)
168
-
169
- assert_equal(0, method.call_trees.callees.count)
170
-
171
- # Method 2
172
- method = methods[2]
173
- assert_equal('Integer#times', method.full_name)
174
- assert_equal(231, method.line)
175
-
176
- assert_equal(1, method.call_trees.callers.count)
177
- call_tree = method.call_trees.callers[0]
178
- assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
179
- assert_equal(15, call_tree.line)
180
-
181
- assert_equal(4, method.call_trees.callees.count)
182
-
183
- call_tree = method.call_trees.callees[0]
184
- assert_equal('Kernel#block_given?', call_tree.target.full_name)
185
- assert_equal(232, call_tree.line)
186
-
187
- call_tree = method.call_trees.callees[1]
188
- assert_equal('Integer#<', call_tree.target.full_name)
189
- assert_equal(236, call_tree.line)
190
-
191
- call_tree = method.call_trees.callees[2]
192
- assert_equal('LineNumbers#method_3', call_tree.target.full_name)
193
- assert_equal(17, call_tree.line)
194
-
195
- call_tree = method.call_trees.callees[3]
196
- assert_equal('Integer#succ', call_tree.target.full_name)
197
- assert_equal(238, call_tree.line)
198
-
199
- # Method 3
200
- method = methods[3]
201
- assert_equal('Kernel#block_given?', method.full_name)
202
- assert_equal(0, method.line)
203
-
204
- assert_equal(1, method.call_trees.callers.count)
205
- call_tree = method.call_trees.callers[0]
206
- assert_equal('Integer#times', call_tree.parent.target.full_name)
207
- assert_equal(232, call_tree.line)
208
-
209
- assert_equal(0, method.call_trees.callees.count)
210
-
211
- # Method 4
212
- method = methods[4]
213
- assert_equal('LineNumbers#method_1', method.full_name)
214
- assert_equal(7, method.line)
215
-
216
- assert_equal(1, method.call_trees.callers.count)
217
- call_tree = method.call_trees.callers[0]
218
- assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
219
- assert_equal(140, call_tree.line)
220
-
221
- assert_equal(2, method.call_trees.callees.count)
222
- call_tree = method.call_trees.callees[0]
223
- assert_equal('LineNumbers#method_2', call_tree.target.full_name)
224
- assert_equal(8, call_tree.line)
225
-
226
- call_tree = method.call_trees.callees[1]
227
- assert_equal('LineNumbers#method_3', call_tree.target.full_name)
228
- assert_equal(10, call_tree.line)
229
-
230
- # Method 5
231
- method = methods[5]
232
- assert_equal('LineNumbers#method_2', method.full_name)
233
- assert_equal(13, method.line)
234
-
235
- assert_equal(1, method.call_trees.callers.count)
236
- call_tree = method.call_trees.callers[0]
237
- assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
238
- assert_equal(8, call_tree.line)
239
-
240
- assert_equal(1, method.call_trees.callees.count)
241
- call_tree = method.call_trees.callees[0]
242
- assert_equal('Integer#times', call_tree.target.full_name)
243
- assert_equal(15, call_tree.line)
244
-
245
- # Method 6
246
- method = methods[6]
247
- assert_equal('LineNumbers#method_3', method.full_name)
248
- assert_equal(21, method.line)
249
-
250
- assert_equal(2, method.call_trees.callers.count)
251
- call_tree = method.call_trees.callers[0]
252
- assert_equal('Integer#times', call_tree.parent.target.full_name)
253
- assert_equal(17, call_tree.line)
254
-
255
- call_tree = method.call_trees.callers[1]
256
- assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
257
- assert_equal(10, call_tree.line)
258
-
259
- assert_equal(1, method.call_trees.callees.count)
260
- call_tree = method.call_trees.callees[0]
261
- assert_equal('LineNumbers#method_4', call_tree.target.full_name)
262
- assert_equal(22, call_tree.line)
263
-
264
- # Method 7
265
- method = methods[7]
266
- assert_equal('LineNumbers#method_4', method.full_name)
267
- assert_equal(25, method.line)
268
-
269
- assert_equal(1, method.call_trees.callers.count)
270
- call_tree = method.call_trees.callers[0]
271
- assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
272
- assert_equal(22, call_tree.line)
273
-
274
- assert_equal(0, method.call_trees.callees.count)
275
-
276
- # Method 8
277
- method = methods[8]
278
- assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
279
- assert_equal(140, method.line)
280
-
281
- assert_equal(0, method.call_trees.callers.count)
282
-
283
- assert_equal(1, method.call_trees.callees.count)
284
- call_tree = method.call_trees.callees[0]
285
- assert_equal('LineNumbers#method_1', call_tree.target.full_name)
286
- assert_equal(140, call_tree.line)
287
- end
288
- end
289
- end
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+
4
+ require File.expand_path('../test_helper', __FILE__)
5
+
6
+ class LineNumbers
7
+ def method_1
8
+ method_2
9
+ _filler = 1
10
+ method_3
11
+ end
12
+
13
+ def method_2
14
+ _filler = 1
15
+ 2.times do |i|
16
+ _filler = 2
17
+ method_3
18
+ end
19
+ end
20
+
21
+ def method_3
22
+ method_4
23
+ end
24
+
25
+ def method_4
26
+ end
27
+ end
28
+
29
+ # -- Tests ----
30
+ class LineNumbersTest < TestCase
31
+ if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.3')
32
+ def test_function_line_no
33
+ numbers = LineNumbers.new
34
+
35
+ result = RubyProf::Profile.profile do
36
+ numbers.method_1
37
+ end
38
+
39
+ # Sort methods by name to have stable results
40
+ methods = result.threads.first.methods.sort_by(&:full_name)
41
+ assert_equal(6, methods.length)
42
+
43
+ # Method 0
44
+ method = methods[0]
45
+ assert_equal('Integer#times', method.full_name)
46
+ assert_equal(0, method.line)
47
+
48
+ assert_equal(1, method.call_trees.callers.count)
49
+ call_tree = method.call_trees.callers[0]
50
+ assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
51
+ assert_equal(15, call_tree.line)
52
+
53
+ assert_equal(1, method.call_trees.callees.count)
54
+ call_tree = method.call_trees.callees[0]
55
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
56
+ assert_equal(17, call_tree.line)
57
+
58
+ # Method 1
59
+ method = methods[1]
60
+ assert_equal('LineNumbers#method_1', method.full_name)
61
+ assert_equal(7, method.line)
62
+
63
+ assert_equal(1, method.call_trees.callers.count)
64
+ call_tree = method.call_trees.callers[0]
65
+ assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
66
+ assert_equal(36, call_tree.line)
67
+
68
+ assert_equal(2, method.call_trees.callees.count)
69
+ call_tree = method.call_trees.callees[0]
70
+ assert_equal('LineNumbers#method_2', call_tree.target.full_name)
71
+ assert_equal(8, call_tree.line)
72
+
73
+ call_tree = method.call_trees.callees[1]
74
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
75
+ assert_equal(10, call_tree.line)
76
+
77
+ # Method 2
78
+ method = methods[2]
79
+ assert_equal('LineNumbers#method_2', method.full_name)
80
+ assert_equal(13, method.line)
81
+
82
+ assert_equal(1, method.call_trees.callers.count)
83
+ call_tree = method.call_trees.callers[0]
84
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
85
+ assert_equal(8, call_tree.line)
86
+
87
+ assert_equal(1, method.call_trees.callees.count)
88
+ call_tree = method.call_trees.callees[0]
89
+ assert_equal('Integer#times', call_tree.target.full_name)
90
+ assert_equal(15, call_tree.line)
91
+
92
+ # Method 3
93
+ method = methods[3]
94
+ assert_equal('LineNumbers#method_3', method.full_name)
95
+ assert_equal(21, method.line)
96
+
97
+ assert_equal(2, method.call_trees.callers.count)
98
+ call_tree = method.call_trees.callers[0]
99
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
100
+ assert_equal(17, call_tree.line)
101
+
102
+ call_tree = method.call_trees.callers[1]
103
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
104
+ assert_equal(10, call_tree.line)
105
+
106
+ assert_equal(1, method.call_trees.callees.count)
107
+ call_tree = method.call_trees.callees[0]
108
+ assert_equal('LineNumbers#method_4', call_tree.target.full_name)
109
+ assert_equal(22, call_tree.line)
110
+
111
+ # Method 4
112
+ method = methods[4]
113
+ assert_equal('LineNumbers#method_4', method.full_name)
114
+ assert_equal(25, method.line)
115
+
116
+ assert_equal(1, method.call_trees.callers.count)
117
+ call_tree = method.call_trees.callers[0]
118
+ assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
119
+ assert_equal(22, call_tree.line)
120
+
121
+ assert_equal(0, method.call_trees.callees.count)
122
+
123
+ # Method 5
124
+ method = methods[5]
125
+ assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
126
+ assert_equal(36, method.line)
127
+
128
+ assert_equal(0, method.call_trees.callers.count)
129
+
130
+ assert_equal(1, method.call_trees.callees.count)
131
+ call_tree = method.call_trees.callees[0]
132
+ assert_equal('LineNumbers#method_1', call_tree.target.full_name)
133
+ assert_equal(36, call_tree.line)
134
+ end
135
+ elsif Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.4')
136
+ def test_function_line_no
137
+ numbers = LineNumbers.new
138
+
139
+ result = RubyProf::Profile.profile do
140
+ numbers.method_1
141
+ end
142
+
143
+ # Sort methods by name to have stable results
144
+ methods = result.threads.first.methods.sort_by(&:full_name)
145
+ assert_equal(9, methods.length)
146
+
147
+ # Method 0
148
+ method = methods[0]
149
+ assert_equal('Integer#<', method.full_name)
150
+ assert_equal(0, method.line)
151
+
152
+ assert_equal(1, method.call_trees.callers.count)
153
+ call_tree = method.call_trees.callers[0]
154
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
155
+ assert_equal(236, call_tree.line)
156
+
157
+ assert_equal(0, method.call_trees.callees.count)
158
+
159
+ # Method 1
160
+ method = methods[1]
161
+ assert_equal('Integer#succ', method.full_name)
162
+ assert_equal(0, method.line)
163
+
164
+ assert_equal(1, method.call_trees.callers.count)
165
+ call_tree = method.call_trees.callers[0]
166
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
167
+ assert_equal(238, call_tree.line)
168
+
169
+ assert_equal(0, method.call_trees.callees.count)
170
+
171
+ # Method 2
172
+ method = methods[2]
173
+ assert_equal('Integer#times', method.full_name)
174
+ assert_equal(231, method.line)
175
+
176
+ assert_equal(1, method.call_trees.callers.count)
177
+ call_tree = method.call_trees.callers[0]
178
+ assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
179
+ assert_equal(15, call_tree.line)
180
+
181
+ assert_equal(4, method.call_trees.callees.count)
182
+
183
+ call_tree = method.call_trees.callees[0]
184
+ assert_equal('Kernel#block_given?', call_tree.target.full_name)
185
+ assert_equal(232, call_tree.line)
186
+
187
+ call_tree = method.call_trees.callees[1]
188
+ assert_equal('Integer#<', call_tree.target.full_name)
189
+ assert_equal(236, call_tree.line)
190
+
191
+ call_tree = method.call_trees.callees[2]
192
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
193
+ assert_equal(17, call_tree.line)
194
+
195
+ call_tree = method.call_trees.callees[3]
196
+ assert_equal('Integer#succ', call_tree.target.full_name)
197
+ assert_equal(238, call_tree.line)
198
+
199
+ # Method 3
200
+ method = methods[3]
201
+ assert_equal('Kernel#block_given?', method.full_name)
202
+ assert_equal(0, method.line)
203
+
204
+ assert_equal(1, method.call_trees.callers.count)
205
+ call_tree = method.call_trees.callers[0]
206
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
207
+ assert_equal(232, call_tree.line)
208
+
209
+ assert_equal(0, method.call_trees.callees.count)
210
+
211
+ # Method 4
212
+ method = methods[4]
213
+ assert_equal('LineNumbers#method_1', method.full_name)
214
+ assert_equal(7, method.line)
215
+
216
+ assert_equal(1, method.call_trees.callers.count)
217
+ call_tree = method.call_trees.callers[0]
218
+ assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
219
+ assert_equal(140, call_tree.line)
220
+
221
+ assert_equal(2, method.call_trees.callees.count)
222
+ call_tree = method.call_trees.callees[0]
223
+ assert_equal('LineNumbers#method_2', call_tree.target.full_name)
224
+ assert_equal(8, call_tree.line)
225
+
226
+ call_tree = method.call_trees.callees[1]
227
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
228
+ assert_equal(10, call_tree.line)
229
+
230
+ # Method 5
231
+ method = methods[5]
232
+ assert_equal('LineNumbers#method_2', method.full_name)
233
+ assert_equal(13, method.line)
234
+
235
+ assert_equal(1, method.call_trees.callers.count)
236
+ call_tree = method.call_trees.callers[0]
237
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
238
+ assert_equal(8, call_tree.line)
239
+
240
+ assert_equal(1, method.call_trees.callees.count)
241
+ call_tree = method.call_trees.callees[0]
242
+ assert_equal('Integer#times', call_tree.target.full_name)
243
+ assert_equal(15, call_tree.line)
244
+
245
+ # Method 6
246
+ method = methods[6]
247
+ assert_equal('LineNumbers#method_3', method.full_name)
248
+ assert_equal(21, method.line)
249
+
250
+ assert_equal(2, method.call_trees.callers.count)
251
+ call_tree = method.call_trees.callers[0]
252
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
253
+ assert_equal(17, call_tree.line)
254
+
255
+ call_tree = method.call_trees.callers[1]
256
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
257
+ assert_equal(10, call_tree.line)
258
+
259
+ assert_equal(1, method.call_trees.callees.count)
260
+ call_tree = method.call_trees.callees[0]
261
+ assert_equal('LineNumbers#method_4', call_tree.target.full_name)
262
+ assert_equal(22, call_tree.line)
263
+
264
+ # Method 7
265
+ method = methods[7]
266
+ assert_equal('LineNumbers#method_4', method.full_name)
267
+ assert_equal(25, method.line)
268
+
269
+ assert_equal(1, method.call_trees.callers.count)
270
+ call_tree = method.call_trees.callers[0]
271
+ assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
272
+ assert_equal(22, call_tree.line)
273
+
274
+ assert_equal(0, method.call_trees.callees.count)
275
+
276
+ # Method 8
277
+ method = methods[8]
278
+ assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
279
+ assert_equal(140, method.line)
280
+
281
+ assert_equal(0, method.call_trees.callers.count)
282
+
283
+ assert_equal(1, method.call_trees.callees.count)
284
+ call_tree = method.call_trees.callees[0]
285
+ assert_equal('LineNumbers#method_1', call_tree.target.full_name)
286
+ assert_equal(140, call_tree.line)
287
+ end
288
+ else
289
+ def test_function_line_no
290
+ numbers = LineNumbers.new
291
+
292
+ result = RubyProf::Profile.profile do
293
+ numbers.method_1
294
+ end
295
+
296
+ # Sort methods by name to have stable results
297
+ methods = result.threads.first.methods.sort_by(&:full_name)
298
+ assert_equal(8, methods.length)
299
+
300
+ # Method 0
301
+ method = methods[0]
302
+ assert_equal('Integer#<', method.full_name)
303
+ assert_equal(0, method.line)
304
+
305
+ assert_equal(1, method.call_trees.callers.count)
306
+ call_tree = method.call_trees.callers[0]
307
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
308
+ assert_equal(256, call_tree.line)
309
+
310
+ assert_equal(0, method.call_trees.callees.count)
311
+
312
+ # Method 1
313
+ method = methods[1]
314
+ assert_equal('Integer#succ', method.full_name)
315
+ assert_equal(0, method.line)
316
+
317
+ assert_equal(1, method.call_trees.callers.count)
318
+ call_tree = method.call_trees.callers[0]
319
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
320
+ assert_equal(258, call_tree.line)
321
+
322
+ assert_equal(0, method.call_trees.callees.count)
323
+
324
+ # Method 2
325
+ method = methods[2]
326
+ assert_equal('Integer#times', method.full_name)
327
+ assert_equal(250, method.line)
328
+
329
+ assert_equal(1, method.call_trees.callers.count)
330
+ call_tree = method.call_trees.callers[0]
331
+ assert_equal('LineNumbers#method_2', call_tree.parent.target.full_name)
332
+ assert_equal(15, call_tree.line)
333
+
334
+ assert_equal(3, method.call_trees.callees.count)
335
+
336
+ call_tree = method.call_trees.callees[0]
337
+ assert_equal('Integer#<', call_tree.target.full_name)
338
+ assert_equal(256, call_tree.line)
339
+
340
+ call_tree = method.call_trees.callees[1]
341
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
342
+ assert_equal(17, call_tree.line)
343
+
344
+ call_tree = method.call_trees.callees[2]
345
+ assert_equal('Integer#succ', call_tree.target.full_name)
346
+ assert_equal(258, call_tree.line)
347
+
348
+ # Method 3
349
+ method = methods[3]
350
+ assert_equal('LineNumbers#method_1', method.full_name)
351
+ assert_equal(7, method.line)
352
+
353
+ assert_equal(1, method.call_trees.callers.count)
354
+ call_tree = method.call_trees.callers[0]
355
+ assert_equal('LineNumbersTest#test_function_line_no', call_tree.parent.target.full_name)
356
+ assert_equal(293, call_tree.line)
357
+
358
+ assert_equal(2, method.call_trees.callees.count)
359
+ call_tree = method.call_trees.callees[0]
360
+ assert_equal('LineNumbers#method_2', call_tree.target.full_name)
361
+ assert_equal(8, call_tree.line)
362
+
363
+ call_tree = method.call_trees.callees[1]
364
+ assert_equal('LineNumbers#method_3', call_tree.target.full_name)
365
+ assert_equal(10, call_tree.line)
366
+
367
+ # Method 4
368
+ method = methods[4]
369
+ assert_equal('LineNumbers#method_2', method.full_name)
370
+ assert_equal(13, method.line)
371
+
372
+ assert_equal(1, method.call_trees.callers.count)
373
+ call_tree = method.call_trees.callers[0]
374
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
375
+ assert_equal(8, call_tree.line)
376
+
377
+ assert_equal(1, method.call_trees.callees.count)
378
+ call_tree = method.call_trees.callees[0]
379
+ assert_equal('Integer#times', call_tree.target.full_name)
380
+ assert_equal(15, call_tree.line)
381
+
382
+ # Method 5
383
+ method = methods[5]
384
+ assert_equal('LineNumbers#method_3', method.full_name)
385
+ assert_equal(21, method.line)
386
+
387
+ assert_equal(2, method.call_trees.callers.count)
388
+ call_tree = method.call_trees.callers[0]
389
+ assert_equal('Integer#times', call_tree.parent.target.full_name)
390
+ assert_equal(17, call_tree.line)
391
+
392
+ call_tree = method.call_trees.callers[1]
393
+ assert_equal('LineNumbers#method_1', call_tree.parent.target.full_name)
394
+ assert_equal(10, call_tree.line)
395
+
396
+ assert_equal(1, method.call_trees.callees.count)
397
+ call_tree = method.call_trees.callees[0]
398
+ assert_equal('LineNumbers#method_4', call_tree.target.full_name)
399
+ assert_equal(22, call_tree.line)
400
+
401
+ # Method 6
402
+ method = methods[6]
403
+ assert_equal('LineNumbers#method_4', method.full_name)
404
+ assert_equal(25, method.line)
405
+
406
+ assert_equal(1, method.call_trees.callers.count)
407
+ call_tree = method.call_trees.callers[0]
408
+ assert_equal('LineNumbers#method_3', call_tree.parent.target.full_name)
409
+ assert_equal(22, call_tree.line)
410
+
411
+ assert_equal(0, method.call_trees.callees.count)
412
+
413
+ # Method 7
414
+ method = methods[7]
415
+ assert_equal('LineNumbersTest#test_function_line_no', method.full_name)
416
+ assert_equal(293, method.line)
417
+
418
+ assert_equal(0, method.call_trees.callers.count)
419
+
420
+ assert_equal(1, method.call_trees.callees.count)
421
+ call_tree = method.call_trees.callees[0]
422
+ assert_equal('LineNumbers#method_1', call_tree.target.full_name)
423
+ assert_equal(293, call_tree.line)
424
+ end
425
+ end
426
+ end