rubyperf 0.0.0

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.
@@ -0,0 +1,230 @@
1
+ #
2
+ # Copyright (c) 2012 Lorenzo Pasqualis - DreamBox Learning, Inc
3
+ # https://github.com/lpasqualis/rubyperf
4
+ #
5
+
6
+ require "test/unit"
7
+
8
+ require 'helper'
9
+
10
+ require 'rubyperf'
11
+
12
+ require 'rubyperf_test_helpers'
13
+ require 'perf_test_example'
14
+
15
+ class TestPerfMeter < Test::Unit::TestCase
16
+
17
+ # Called before every test method runs. Can be used
18
+ # to set up fixture information.
19
+ def setup
20
+ # Do nothing
21
+ end
22
+
23
+ # Called after every test method runs. Can be used to tear
24
+ # down fixture information.
25
+
26
+ def teardown
27
+ # Do nothing
28
+ end
29
+
30
+ def test_method_not_corrupted_after_restoring
31
+ m=Perf::Meter.new
32
+ imethods=PerfTestExample.new.methods.sort
33
+ cmethods=PerfTestExample.methods.sort
34
+ m.method_meters(PerfTestExample,[:test,:test_np],[:static_method]) do
35
+ a=PerfTestExample.new
36
+ a.test(1,2,3)
37
+ a.test_np
38
+ PerfTestExample.static_method
39
+ end
40
+ assert PerfTestExample.methods.sort == cmethods
41
+ assert PerfTestExample.new.methods.sort == imethods
42
+ end
43
+
44
+ def test_method_metering
45
+ m=Perf::Meter.new
46
+ m.method_meters(PerfTestExample,[:test,:test_np],[:static_method]) do
47
+ a=PerfTestExample.new
48
+ a.test(1,2,3)
49
+ a.test_np
50
+ PerfTestExample.static_method
51
+ end
52
+ m.report_simple
53
+ end
54
+
55
+ def test_base_report
56
+ m=Perf::Meter.new
57
+ m.measure(:a) { }
58
+ m.measure(:b) { }
59
+ m.measure(:d) { m.measure(:c) { m.measure(:d) {} }}
60
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d\\c\\d"]
61
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d\\c"]
62
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d"]
63
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\b"]
64
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\a"]
65
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}"]
66
+ assert_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\huh"]
67
+ assert RubyperfTestHelpers.verify_report(m,["#{Perf::Meter::PATH_MEASURES}\\d\\c\\d",
68
+ "#{Perf::Meter::PATH_MEASURES}\\d\\c",
69
+ "#{Perf::Meter::PATH_MEASURES}\\d",
70
+ "#{Perf::Meter::PATH_MEASURES}\\b",
71
+ "#{Perf::Meter::PATH_MEASURES}"])
72
+ end
73
+
74
+ def test_output_html
75
+ m=RubyperfTestHelpers.get_measure
76
+ m.report_html
77
+ end
78
+
79
+ def test_exception_handling
80
+ # An exeption thwon in a block that we are measuring needs to leave the Perf::Meter in a good state.
81
+ # This test checks the state after an exception.
82
+ exception_raised = false
83
+ measuring_correct = false
84
+ stack_correct = false
85
+ m=Perf::Meter.new
86
+
87
+ begin
88
+ m.measure(:some_exception) do
89
+ a=12/0 # Divide by zero
90
+ end
91
+ rescue
92
+ exception_raised=true
93
+ ensure
94
+ measuring_correct=true
95
+ m.measurements.each_pair do |_,x|
96
+ measuring_correct=false if x[:measuring]
97
+ end
98
+ stack_correct = (m.current_stack.size==0)
99
+ end
100
+ assert exception_raised
101
+ assert measuring_correct
102
+ assert stack_correct
103
+ end
104
+
105
+ def test_return_values
106
+ m=Perf::Meter.new
107
+
108
+ assert_equal 4,m.measure(:four) {4}
109
+ assert_equal "hello",m.measure(:hello) {"hel"+"lo"}
110
+
111
+ assert_equal 5,m.measure_result(:five) {5}
112
+ assert_equal "byebye",m.measure_result(:byebye) {"bye"+"bye"}
113
+ end
114
+
115
+ def test_nesting_measure
116
+ m=Perf::Meter.new
117
+ m.measure(:a) { }
118
+ m.measure(:b) { }
119
+ m.measure(:d) { m.measure(:c) { m.measure(:d) {} }}
120
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d\\c\\d"]
121
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d\\c"]
122
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\d"]
123
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\b"]
124
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\a"]
125
+ assert_not_nil m.measurements["#{Perf::Meter::PATH_MEASURES}"]
126
+ assert_nil m.measurements["#{Perf::Meter::PATH_MEASURES}\\huh"]
127
+ end
128
+
129
+ def test_measure_instance_method
130
+ # First test it with measure
131
+ m=Perf::Meter.new
132
+
133
+ a=PerfTestExample.new
134
+ m.measure(:measure_test) { a.test(1,2,3) }
135
+ m.measure(:measure_test_np) { a.test_np }
136
+ m.measure(:some_expressions) do
137
+ m.measure_result(:expression1) { 1234+12345 }
138
+ m.measure_result(:expression1) { 1234-123 }
139
+ m.measure_result(:expression2) { "string" }
140
+ end
141
+ # Then use the instance method
142
+ m.measure_instance_method(PerfTestExample,:test)
143
+ m.measure_instance_method(PerfTestExample,:test_np)
144
+ m.measure_instance_method(PerfTestExample,:test) # Do it twice and see what happens
145
+ m.measure_class_method(PerfTestExample,:static_method)
146
+
147
+ a=PerfTestExample.new
148
+ a.test(1,2,3)
149
+ a.test_np
150
+ PerfTestExample.static_method
151
+
152
+ # Output the results
153
+ #puts m.report_simple(m)
154
+
155
+ #puts "\nRestoring test:\n\n"
156
+
157
+ m.restore_instance_method(PerfTestExample,:test)
158
+ a=PerfTestExample.new
159
+ a.test(1,2,3)
160
+ a.test_np
161
+ #puts m.report_simple
162
+
163
+ m.restore_all_instance_methods(PerfTestExample)
164
+ a=PerfTestExample.new
165
+ a.test(1,2,3)
166
+ a.test_np
167
+ #puts puts m.report_simple
168
+ m.restore_all_methods(PerfTestExample)
169
+ end
170
+
171
+ def test_basic
172
+ m=Perf::Meter.new
173
+ m.measure(:string_operations) do
174
+ m.measure(:ciao) do
175
+ 1000.times do; "CIAO"*100; end
176
+ end
177
+ end
178
+ m.measure(:string_operations) do
179
+ m.measure(:help) do
180
+ 1000.times do; "HELP"*100; end
181
+ end
182
+ end
183
+ m.measure(:emtpy_loop) do
184
+ 50000.times do; end;
185
+ end
186
+ m.measure(:rough_overhead_x10000) do
187
+ 1000.times do
188
+ m.measure(:block_1) do
189
+ m.measure(:block_1_1) do
190
+ end
191
+ m.measure(:block_1_2) do
192
+ m.measure(:block_1_2_1) do
193
+ end
194
+ m.measure(:block_1_2_2) do
195
+ end
196
+ m.measure(:block_1_2_3) do
197
+ m.measure_result(:bool_exp_1_2_3) { false }
198
+ m.measure_result(:bool_exp_1_2_3) { true }
199
+ end
200
+ end
201
+ end
202
+ end
203
+ end
204
+
205
+ m.measure(:sleep1) do
206
+ m.measure(:sleep1_1) do
207
+ sleep(0.01)
208
+ end
209
+ m.measure(:sleep_1_2) do
210
+ sleep(0.02)
211
+ end
212
+ m.measure(:sleep_1_3) do
213
+ sleep(0.03)
214
+ end
215
+ end
216
+ m.measure(:empty) do
217
+ end
218
+ m.measure_result("test") { sleep(1) }
219
+ m.measure_result("test") { false }
220
+ m.measure_result("test") { false }
221
+
222
+ m.method_meters(Array,[:sort,:reverse],[:new]) do
223
+ Array.new(1000000,"abc").reverse.sort
224
+ end
225
+
226
+ puts m.report_simple
227
+ puts m.report_html
228
+
229
+ end
230
+ end
metadata ADDED
@@ -0,0 +1,150 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyperf
3
+ version: !ruby/object:Gem::Version
4
+ hash: 31
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 0
10
+ version: 0.0.0
11
+ platform: ruby
12
+ authors:
13
+ - lpasqualis
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2012-01-13 00:00:00 -08:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ name: shoulda
24
+ type: :development
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ requirement: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ prerelease: false
37
+ name: bundler
38
+ type: :development
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ~>
43
+ - !ruby/object:Gem::Version
44
+ hash: 23
45
+ segments:
46
+ - 1
47
+ - 0
48
+ - 0
49
+ version: 1.0.0
50
+ requirement: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ prerelease: false
53
+ name: jeweler
54
+ type: :development
55
+ version_requirements: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ~>
59
+ - !ruby/object:Gem::Version
60
+ hash: 7
61
+ segments:
62
+ - 1
63
+ - 6
64
+ - 4
65
+ version: 1.6.4
66
+ requirement: *id003
67
+ - !ruby/object:Gem::Dependency
68
+ prerelease: false
69
+ name: rcov
70
+ type: :development
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ hash: 3
77
+ segments:
78
+ - 0
79
+ version: "0"
80
+ requirement: *id004
81
+ description: Measures the performance of blocks of code, and provide reporting in various formats
82
+ email: lpasqualis@gmail.com
83
+ executables: []
84
+
85
+ extensions: []
86
+
87
+ extra_rdoc_files:
88
+ - LICENSE.txt
89
+ - README.rdoc
90
+ files:
91
+ - .document
92
+ - .idea/encodings.xml
93
+ - .idea/misc.xml
94
+ - .idea/modules.xml
95
+ - .idea/rubyperf.iml
96
+ - .idea/vcs.xml
97
+ - Gemfile
98
+ - Gemfile.lock
99
+ - LICENSE.txt
100
+ - README.rdoc
101
+ - Rakefile
102
+ - VERSION
103
+ - lib/perf/meter.rb
104
+ - lib/perf/meter_factory.rb
105
+ - lib/perf/no_op_meter.rb
106
+ - lib/perf/noop_measure.rb
107
+ - lib/perf/report_format.rb
108
+ - lib/perf/report_format_html.rb
109
+ - lib/perf/report_format_simple.rb
110
+ - lib/rubyperf.rb
111
+ - test/helper.rb
112
+ - test/perf_test_example.rb
113
+ - test/rubyperf_test_helpers.rb
114
+ - test/test_perf_meter.rb
115
+ has_rdoc: true
116
+ homepage: http://github.com/lpasqualis/rubyperf
117
+ licenses:
118
+ - MIT
119
+ post_install_message:
120
+ rdoc_options: []
121
+
122
+ require_paths:
123
+ - lib
124
+ required_ruby_version: !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ required_rubygems_version: !ruby/object:Gem::Requirement
134
+ none: false
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ hash: 3
139
+ segments:
140
+ - 0
141
+ version: "0"
142
+ requirements: []
143
+
144
+ rubyforge_project:
145
+ rubygems_version: 1.4.2
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: A gem to measure ruby code performance
149
+ test_files: []
150
+