benchmark-ips 2.9.2 → 2.9.3

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c22ac46ad04849b7302dc6cc8c1fe2521c73d16fa9f47e1b0af7abf175d11d1f
4
- data.tar.gz: 2ea1a4d8b23e6efd542c204b8e557734ea4cf6c5aebc51db8aca2ac036cd2bdf
3
+ metadata.gz: cc5ffa1a7718a0e1228ff02e0473d0ca7596a0e2ed2f1837f8e7d2b6671fee80
4
+ data.tar.gz: 59f55a6921d0e0c2f85b37724fd1e73175bb45c83ab929476d1eecf6e20fec68
5
5
  SHA512:
6
- metadata.gz: 9bdfb5486834ee180b70371299387eb0fc6e6137de5d17e9e547618ba12cb72cb845893915c0195f6153ef44b4adb8ba6138504d31de4a2f523d638375cb2794
7
- data.tar.gz: c597571580a1379603e0789b98f0d9eb0fde836d409f257474c24b39d1557a681b78c7a2d239dcc725acbbc07ed3dcca59681b23574b8c29770f63a7f36835c5
6
+ metadata.gz: be49c48e45aea4ca566cfb52d8e6b50eefb3e367db9733aea730af7e1191d78171c002dcb5c0308a7fe695764d5c028fcf9b088a7edd55227b7097f4b8d4a1da
7
+ data.tar.gz: 6c240a8f140c33a7164352be7d60a00e20aca04a91f5727d9753e6fd0aaac58e9a2bed6a3afb72ab290386dbe5bde7757e7206704e9806f53001d40091b4e346
@@ -1,36 +1,41 @@
1
- === 2.9.2 / 2021-10-10
1
+ ### 2.9.3 / 2022-01-25
2
+
3
+ * Bug fix
4
+ * All warmups and benchmarks must run at least once
5
+
6
+ ### 2.9.2 / 2021-10-10
2
7
 
3
8
  * Bug fix
4
9
  * Fix a problem with certain configs of quiet mode
5
10
 
6
- === 2.9.1 / 2021-05-24
11
+ ### 2.9.1 / 2021-05-24
7
12
 
8
13
  * Bug fix
9
14
  * Include all files in gem
10
15
 
11
- === 2.9.0 / 2021-05-21
16
+ ### 2.9.0 / 2021-05-21
12
17
 
13
18
  * Features
14
19
  * Suite can now be set via an accessor
15
20
  * Default SHARE_URL is now `ips.fastruby.io`, operated by Ombu Labs.
16
21
 
17
- === 2.8.4 / 2020-12-03
22
+ ### 2.8.4 / 2020-12-03
18
23
 
19
24
  * Bug fix
20
25
  * Fixed hold! when results file does not exist.
21
26
 
22
- === 2.8.3 / 2020-08-28
27
+ ### 2.8.3 / 2020-08-28
23
28
 
24
29
  * Bug fix
25
30
  * Fixed inaccuracy caused by integer overflows.
26
31
 
27
- === 2.8.2 / 2020-05-04
32
+ ### 2.8.2 / 2020-05-04
28
33
 
29
34
  * Bug fix
30
35
  * Fixed problems with Manifest.txt.
31
36
  * Empty interim results files are ignored.
32
37
 
33
- === 2.8.0 / 2020-05-01
38
+ ### 2.8.0 / 2020-05-01
34
39
 
35
40
  * Feature
36
41
  * Allow running with empty ips block.
@@ -43,16 +48,16 @@
43
48
  * Added some RDoc docs.
44
49
  * Added some examples in examples/
45
50
 
46
- === 2.7.2 / 2016-08-18
51
+ ### 2.7.2 / 2016-08-18
47
52
 
48
53
  * 1 bug fix:
49
54
  * Restore old accessors. Fixes #76
50
55
 
51
- === 2.7.1 / 2016-08-08
56
+ ### 2.7.1 / 2016-08-08
52
57
 
53
58
  Add missing files
54
59
 
55
- === 2.7.0 / 2016-08-05
60
+ ### 2.7.0 / 2016-08-05
56
61
 
57
62
  * 1 minor features:
58
63
  * Add support for confidence intervals
@@ -69,9 +74,9 @@ Add missing files
69
74
  * Merge pull request #67 from benoittgt/master
70
75
  * Merge pull request #69 from chrisseaton/kalibera-confidence-intervals
71
76
 
72
- === MISSING 2.6.0 and 2.6.1
77
+ ### MISSING 2.6.0 and 2.6.1
73
78
 
74
- === 2.5.0 / 2016-02-14
79
+ ### 2.5.0 / 2016-02-14
75
80
 
76
81
  * 1 minor feature:
77
82
  * Add iterations option.
@@ -83,12 +88,12 @@ Add missing files
83
88
  * Merge pull request #58 from chrisseaton/iterations
84
89
  * Merge pull request #60 from chrisseaton/significance
85
90
 
86
- === 2.4.1 / 2016-02-12
91
+ ### 2.4.1 / 2016-02-12
87
92
 
88
93
  * 1 bug fix:
89
94
  * Add missing files to gem
90
95
 
91
- === 2.4.0 / 2016-02-12
96
+ ### 2.4.0 / 2016-02-12
92
97
 
93
98
  * 1 minor features
94
99
  * Add support for hold! and independent invocations.
@@ -123,7 +128,7 @@ Add missing files
123
128
  * Merge pull request #56 from chrisseaton/independence
124
129
  * Merge pull request #57 from chrisseaton/tighten-loop
125
130
 
126
- === 2.3.0 / 2015-07-20
131
+ ### 2.3.0 / 2015-07-20
127
132
 
128
133
  * 2 minor features:
129
134
  * Support keyword arguments
@@ -137,7 +142,7 @@ Add missing files
137
142
  * Merge pull request #42 from kbrock/newer_travis
138
143
  * Merge pull request #43 from kbrock/non_to_s_labels
139
144
 
140
- === 2.2.0 / 2015-05-09
145
+ ### 2.2.0 / 2015-05-09
141
146
 
142
147
  * 1 minor features:
143
148
  * Fix quiet mode
@@ -161,7 +166,7 @@ Add missing files
161
166
  * Merge pull request #29 from JuanitoFatas/feature/json-export
162
167
  * Merge pull request #26 from JuanitoFatas/feature/takes-symbol-as-report-parameter
163
168
 
164
- === 2.1.1 / 2015-01-12
169
+ ### 2.1.1 / 2015-01-12
165
170
 
166
171
  * 1 minor fix:
167
172
  * Don't send label through printf so that % work directly
@@ -175,7 +180,7 @@ Add missing files
175
180
  * 1 PR merged:
176
181
  * Merge pull request #24 from zzak/simple-format-result-description
177
182
 
178
- === 2.1.0 / 2014-11-10
183
+ ### 2.1.0 / 2014-11-10
179
184
 
180
185
  * Documentation changes:
181
186
  * Many documentation fixes by Juanito Fatas!
@@ -186,7 +191,7 @@ Add missing files
186
191
  * Formatting of large values improved (human vs raw mode)
187
192
  * Contributed by Charles Oliver Nutter
188
193
 
189
- === 2.0.0 / 2014-06-18
194
+ ### 2.0.0 / 2014-06-18
190
195
 
191
196
  * The 'Davy Stevenson' release!
192
197
  * Codename: Springtime Hummingbird Dance
@@ -204,7 +209,7 @@ Add missing files
204
209
  * Zachary Scott
205
210
  * schneems (Richard Schneeman)
206
211
 
207
- === 1.0.0 / 2012-03-23
212
+ ### 1.0.0 / 2012-03-23
208
213
 
209
214
  * 1 major enhancement
210
215
 
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2015 Evan Phoenix
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ 'Software'), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
18
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
19
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
20
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md CHANGED
@@ -254,27 +254,3 @@ After checking out the source, run:
254
254
  This task will install any missing dependencies, run the tests/specs,
255
255
  and generate the RDoc.
256
256
 
257
- ## LICENSE:
258
-
259
- (The MIT License)
260
-
261
- Copyright (c) 2015 Evan Phoenix
262
-
263
- Permission is hereby granted, free of charge, to any person obtaining
264
- a copy of this software and associated documentation files (the
265
- 'Software'), to deal in the Software without restriction, including
266
- without limitation the rights to use, copy, modify, merge, publish,
267
- distribute, sublicense, and/or sell copies of the Software, and to
268
- permit persons to whom the Software is furnished to do so, subject to
269
- the following conditions:
270
-
271
- The above copyright notice and this permission notice shall be
272
- included in all copies or substantial portions of the Software.
273
-
274
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
275
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
276
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
277
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
278
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
279
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
280
- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'benchmark/ips'
4
+
5
+ Benchmark.ips do |x|
6
+
7
+ # Use bootstrap confidence intervals
8
+ x.stats = :bootstrap
9
+
10
+ # Set confidence to 95%
11
+ x.confidence = 95
12
+
13
+ # Run multiple iterations for better warmup
14
+ x.iterations = 3
15
+
16
+ x.report("mul") { 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 }
17
+ x.report("pow") { 2 ** 8 }
18
+
19
+ x.compare!
20
+ end
data/examples/hold.rb ADDED
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+ # example to explain hold! usage https://github.com/evanphx/benchmark-ips/issues/85
3
+ # The hold! feature expects to be run twice, generally with different Rubys.
4
+ # hold! can also be used to compare modules changes which impact the run time
5
+ # RUN_1: ruby examples/hold.rb
6
+ # Warming up --------------------------------------
7
+ # without 172.168k i/100ms
8
+ # Calculating -------------------------------------
9
+ # without 2.656M (± 3.3%) i/s - 13.429M in 5.062098s
10
+ #
11
+ # RUN_2: WITH_MODULE=true ruby examples/hold.rb
12
+ # Warming up --------------------------------------
13
+ # with 92.087k i/100ms
14
+ # Calculating -------------------------------------
15
+ # with 1.158M (± 1.4%) i/s - 5.801M in 5.010084s
16
+ #
17
+ # Comparison:
18
+ # without: 2464721.3 i/s
19
+ # with: 1158179.6 i/s - 2.13x slower
20
+ require 'benchmark/ips'
21
+
22
+ Benchmark.ips do |x|
23
+ x.report('without') do
24
+ 'Bruce'.inspect
25
+ end
26
+
27
+ if ENV['WITH_MODULE'] == 'true'
28
+ class String
29
+ def inspect
30
+ result = %w[Bruce Wayne is Batman]
31
+ result.join(' ')
32
+ end
33
+ end
34
+ end
35
+
36
+ x.report('with') do
37
+ 'Bruce'.inspect
38
+ end
39
+ x.hold! 'temp_results'
40
+ x.compare!
41
+ end
data/examples/save.rb ADDED
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # example to explain save!
4
+ # The save! feature expects to be run twice, generally with different Rubys.
5
+ # save! can also be used to compare modules changes which impact the run time
6
+ #
7
+ # If you're comparing ruby versions, Just use the version in the label
8
+ #
9
+ # x.report("ruby #{RUBY_VERSION}") { 'Bruce'.inspect }
10
+ #
11
+ # Or use a hash
12
+ #
13
+ # x.report("version" => RUBY_VERSION, "method" => 'bruce') { 'Bruce'.inspect }
14
+ #
15
+ # RUN_1: SAVE_FILE='run1.out' ruby examples/hold.rb
16
+ # Warming up --------------------------------------
17
+ # without 172.168k i/100ms
18
+ # Calculating -------------------------------------
19
+ # without 2.656M (± 3.3%) i/s - 13.429M in 5.062098s
20
+ #
21
+ # RUN_2: SAVE_FILE='run1.out' WITH_MODULE=true ruby examples/hold.rb
22
+ # Warming up --------------------------------------
23
+ # with 92.087k i/100ms
24
+ # Calculating -------------------------------------
25
+ # with 1.158M (± 1.4%) i/s - 5.801M in 5.010084s
26
+ #
27
+ # Comparison:
28
+ # without: 2464721.3 i/s
29
+ # with: 1158179.6 i/s - 2.13x slower
30
+ # CLEANUP: rm run1.out
31
+
32
+ require 'benchmark/ips'
33
+
34
+ Benchmark.ips do |x|
35
+ x.report(ENV['WITH_MODULE'] == 'true' ? 'with' : 'without') do
36
+ 'Bruce'.inspect
37
+ end
38
+
39
+ if ENV['WITH_MODULE'] == 'true'
40
+ class String
41
+ def inspect
42
+ result = %w[Bruce Wayne is Batman]
43
+ result.join(' ')
44
+ end
45
+ end
46
+ end
47
+
48
+ x.save! ENV['SAVE_FILE'] if ENV['SAVE_FILE']
49
+ x.compare!
50
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'benchmark/ips'
4
+
5
+ Benchmark.ips do |x|
6
+
7
+ # Configure the number of seconds used during
8
+ # the warmup phase and calculation phase
9
+ x.config(:time => 5, :warmup => 2)
10
+
11
+ # These parameters can also be configured this way
12
+ x.time = 5
13
+ x.warmup = 2
14
+
15
+ # Typical mode, runs the block as many times as it can
16
+ x.report("addition") { 1 + 2 }
17
+
18
+ # To reduce overhead, the number of iterations is passed in
19
+ # and the block must run the code the specific number of times.
20
+ # Used for when the workload is very small and any overhead
21
+ # introduces incorrectable errors.
22
+ x.report(:addition2) do |times|
23
+ i = 0
24
+ while i < times
25
+ 1 + 2
26
+ i += 1
27
+ end
28
+ end
29
+
30
+ # To reduce overhead even more, grafts the code given into
31
+ # the loop that performs the iterations internally to reduce
32
+ # overhead. Typically not needed, use the |times| form instead.
33
+ x.report("addition3", "1 + 2")
34
+
35
+ # Really long labels should be formatted correctly
36
+ x.report("addition-test-long-label") { 1 + 2 }
37
+
38
+ x.compare!
39
+ end
40
+
41
+ puts <<-EOD
42
+ Typical results will show addition2 & addition3 to be the most performant, and
43
+ they should perform reasonably similarly. You should see addition and
44
+ addition-test-long-label to perform very similarly to each other (as they are
45
+ running the same test, just with different labels), and they should both run in
46
+ the neighborhood of 3.5 times slower than addition2 and addition3."
47
+ EOD
File without changes
File without changes
File without changes
File without changes
@@ -276,9 +276,7 @@ module Benchmark
276
276
  target = Timing.add_second before, @warmup / 2.0
277
277
 
278
278
  cycles = 1
279
- warmup_iter = 1
280
- warmup_time_us = 0.0
281
- while Timing.now + warmup_time_us * 2 < target
279
+ begin
282
280
  t0 = Timing.now
283
281
  item.call_times cycles
284
282
  t1 = Timing.now
@@ -289,7 +287,7 @@ module Benchmark
289
287
  # then exit the loop to avoid overflows and start the 100ms warmup runs
290
288
  break if cycles >= POW_2_30
291
289
  cycles *= 2
292
- end
290
+ end while Timing.now + warmup_time_us * 2 < target
293
291
 
294
292
  cycles = cycles_per_100ms warmup_time_us, warmup_iter
295
293
  @timing[item] = cycles
@@ -326,7 +324,8 @@ module Benchmark
326
324
 
327
325
  target = Timing.add_second Timing.now, @time
328
326
 
329
- while (before = Timing.now) < target
327
+ begin
328
+ before = Timing.now
330
329
  item.call_times cycles
331
330
  after = Timing.now
332
331
 
@@ -338,7 +337,7 @@ module Benchmark
338
337
  iter += cycles
339
338
 
340
339
  measurements_us << iter_us
341
- end
340
+ end while Timing.now < target
342
341
 
343
342
  final_time = before
344
343
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
data/lib/benchmark/ips.rb CHANGED
@@ -18,7 +18,7 @@ module Benchmark
18
18
  module IPS
19
19
 
20
20
  # Benchmark-ips Gem version.
21
- VERSION = "2.9.2"
21
+ VERSION = "2.9.3"
22
22
 
23
23
  # CODENAME of current version.
24
24
  CODENAME = "Sleepy Sasquatch"
File without changes
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: benchmark-ips
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.2
4
+ version: 2.9.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Phoenix
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-10 00:00:00.000000000 Z
11
+ date: 2015-01-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -16,63 +16,45 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5.14'
19
+ version: '5.4'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5.14'
26
+ version: '5.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rdoc
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '4.0'
34
- - - "<"
35
- - !ruby/object:Gem::Version
36
- version: '7'
37
- type: :development
38
- prerelease: false
39
- version_requirements: !ruby/object:Gem::Requirement
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- version: '4.0'
44
- - - "<"
45
- - !ruby/object:Gem::Version
46
- version: '7'
47
- - !ruby/object:Gem::Dependency
48
- name: hoe
49
29
  requirement: !ruby/object:Gem::Requirement
50
30
  requirements:
51
31
  - - "~>"
52
32
  - !ruby/object:Gem::Version
53
- version: '3.22'
33
+ version: '4.0'
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
37
  requirements:
58
38
  - - "~>"
59
39
  - !ruby/object:Gem::Version
60
- version: '3.22'
61
- description: An iterations per second enhancement to Benchmark.
40
+ version: '4.0'
41
+ description: A iterations per second enhancement to Benchmark.
62
42
  email:
63
43
  - evan@phx.io
64
44
  executables: []
65
45
  extensions: []
66
46
  extra_rdoc_files:
67
- - History.txt
68
- - Manifest.txt
47
+ - History.md
48
+ - LICENSE
69
49
  - README.md
70
50
  files:
71
- - ".autotest"
72
- - History.txt
73
- - Manifest.txt
51
+ - History.md
52
+ - LICENSE
74
53
  - README.md
75
- - Rakefile
54
+ - examples/advanced.rb
55
+ - examples/hold.rb
56
+ - examples/save.rb
57
+ - examples/simple.rb
76
58
  - lib/benchmark/compare.rb
77
59
  - lib/benchmark/ips.rb
78
60
  - lib/benchmark/ips/job.rb
@@ -86,12 +68,10 @@ files:
86
68
  - lib/benchmark/ips/stats/sd.rb
87
69
  - lib/benchmark/ips/stats/stats_metric.rb
88
70
  - lib/benchmark/timing.rb
89
- - test/test_benchmark_ips.rb
90
71
  homepage: https://github.com/evanphx/benchmark-ips
91
72
  licenses:
92
73
  - MIT
93
- metadata:
94
- homepage_uri: https://github.com/evanphx/benchmark-ips
74
+ metadata: {}
95
75
  post_install_message:
96
76
  rdoc_options:
97
77
  - "--main"
@@ -109,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
109
89
  - !ruby/object:Gem::Version
110
90
  version: '0'
111
91
  requirements: []
112
- rubygems_version: 3.1.4
92
+ rubygems_version: 3.2.26
113
93
  signing_key:
114
94
  specification_version: 4
115
- summary: An iterations per second enhancement to Benchmark.
95
+ summary: A iterations per second enhancement to Benchmark.
116
96
  test_files: []
data/.autotest DELETED
@@ -1,23 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'autotest/restart'
4
-
5
- # Autotest.add_hook :initialize do |at|
6
- # at.extra_files << "../some/external/dependency.rb"
7
- #
8
- # at.libs << ":../some/external"
9
- #
10
- # at.add_exception 'vendor'
11
- #
12
- # at.add_mapping(/dependency.rb/) do |f, _|
13
- # at.files_matching(/test_.*rb$/)
14
- # end
15
- #
16
- # %w(TestA TestB).each do |klass|
17
- # at.extra_class_map[klass] = "test/test_misc.rb"
18
- # end
19
- # end
20
-
21
- # Autotest.add_hook :run_command do |at|
22
- # system "rake build"
23
- # end
data/Manifest.txt DELETED
@@ -1,19 +0,0 @@
1
- .autotest
2
- History.txt
3
- Manifest.txt
4
- README.md
5
- Rakefile
6
- lib/benchmark/compare.rb
7
- lib/benchmark/ips.rb
8
- lib/benchmark/ips/job.rb
9
- lib/benchmark/ips/job/entry.rb
10
- lib/benchmark/ips/job/noop_report.rb
11
- lib/benchmark/ips/job/stdout_report.rb
12
- lib/benchmark/ips/noop_suite.rb
13
- lib/benchmark/ips/report.rb
14
- lib/benchmark/ips/share.rb
15
- lib/benchmark/ips/stats/bootstrap.rb
16
- lib/benchmark/ips/stats/sd.rb
17
- lib/benchmark/ips/stats/stats_metric.rb
18
- lib/benchmark/timing.rb
19
- test/test_benchmark_ips.rb
data/Rakefile DELETED
@@ -1,27 +0,0 @@
1
- # -*- ruby -*-
2
-
3
- require 'rubygems'
4
- require 'hoe'
5
-
6
- Hoe.plugin :minitest
7
- Hoe.plugin :git
8
- Hoe.plugin :ignore
9
-
10
- hoe = Hoe.spec 'benchmark-ips' do
11
- developer('Evan Phoenix', 'evan@phx.io')
12
-
13
- self.readme_file = 'README.md'
14
-
15
- license "MIT"
16
- end
17
-
18
- file "#{hoe.spec.name}.gemspec" => ['Rakefile', "lib/benchmark/ips.rb"] do |t|
19
- puts "Generating #{t.name}"
20
- File.open(t.name, 'wb') { |f| f.write hoe.spec.to_ruby }
21
- end
22
-
23
- desc "Generate or update the standalone gemspec file for the project"
24
- task :gemspec => ["#{hoe.spec.name}.gemspec"]
25
-
26
-
27
- # vim: syntax=ruby
@@ -1,254 +0,0 @@
1
- require "minitest/autorun"
2
- require "benchmark/ips"
3
- require "stringio"
4
- require "tmpdir"
5
-
6
- class TestBenchmarkIPS < Minitest::Test
7
- def setup
8
- @old_stdout = $stdout
9
- $stdout = StringIO.new
10
- end
11
-
12
- def teardown
13
- $stdout = @old_stdout
14
- end
15
-
16
- def test_all_lib_files_are_included_in_manifest
17
- project_root = File.expand_path('../..', __FILE__)
18
- manifest = File.readlines("#{project_root}/Manifest.txt").map(&:chomp)
19
- lib_files = Dir["#{project_root}/lib/**/*.rb"].map { |path| path.sub("#{project_root}/", '') }
20
- lib_files.each { |lib_file| assert_includes manifest, lib_file }
21
- end
22
-
23
- def test_kwargs
24
- Benchmark.ips(:time => 1, :warmup => 1, :quiet => false) do |x|
25
- x.report("sleep 0.25") { sleep(0.25) }
26
- end
27
-
28
- assert $stdout.string.size > 0
29
- end
30
-
31
- def test_warmup0
32
- $stdout = @old_stdout
33
-
34
- out, err = capture_io do
35
- Benchmark.ips(:time => 1, :warmup => 0, :quiet => false) do |x|
36
- x.report("sleep 0.25") { sleep(0.25) }
37
- end
38
- end
39
-
40
- refute_match(/Warming up -+/, out)
41
- assert_empty err
42
- end
43
-
44
- def test_output
45
- Benchmark.ips(1) do |x|
46
- x.report("operation") { 100 * 100 }
47
- end
48
-
49
- assert $stdout.string.size > 0
50
- end
51
-
52
- def test_quiet
53
- Benchmark.ips(1, nil, true) do |x|
54
- x.report("operation") { 100 * 100 }
55
- end
56
-
57
- assert $stdout.string.size.zero?
58
-
59
- Benchmark.ips(:quiet => true) do |x|
60
- x.report("operation") { 100 * 100 }
61
- end
62
-
63
- assert $stdout.string.size.zero?
64
-
65
- Benchmark.ips do |x|
66
- x.quiet = true
67
- x.report("operation") { 100 * 100 }
68
- end
69
-
70
- assert $stdout.string.size.zero?
71
- end
72
-
73
- def test_quiet_option_override
74
- Benchmark.ips(quiet: true) do |x|
75
- x.quiet = false
76
- x.report("operation") { 100 * 100 }
77
- end
78
-
79
- assert $stdout.string.size > 0
80
- $stdout.truncate(0)
81
-
82
- Benchmark.ips(quiet: true) do |x|
83
- x.config(quiet: false)
84
- x.report("operation") { 100 * 100 }
85
- end
86
-
87
- assert $stdout.string.size > 0
88
- $stdout.truncate(0)
89
-
90
- Benchmark.ips(quiet: true) do |x|
91
- # Calling config should not make quiet option overridden when no specified
92
- x.config({})
93
- x.report("operation") { 100 * 100 }
94
- end
95
-
96
- assert $stdout.string.size.zero?
97
- end
98
-
99
- def test_ips
100
- report = Benchmark.ips do |x|
101
- x.config(:time => 1, :warmup => 1)
102
- x.report("sleep 0.25") { sleep(0.25) }
103
- x.report("sleep 0.05") { sleep(0.05) }
104
- x.compare!
105
- end
106
-
107
- rep1 = report.entries[0]
108
- rep2 = report.entries[1]
109
-
110
- assert_equal "sleep 0.25", rep1.label
111
- assert_equal 4, rep1.iterations
112
- assert_in_delta 4.0, rep1.ips, 0.2
113
-
114
- assert_equal "sleep 0.05", rep2.label
115
- assert_in_delta 20.0, rep2.iterations.to_f, 1.0
116
- assert_in_delta 20.0, rep2.ips, 2.0
117
- end
118
-
119
- def test_ips_alternate_config
120
- report = Benchmark.ips do |x|
121
- x.time = 1
122
- x.warmup = 1
123
- x.report("sleep 0.25") { sleep(0.25) }
124
- end
125
-
126
- rep = report.entries.first
127
-
128
- assert_equal "sleep 0.25", rep.label
129
- assert_equal 4, rep.iterations
130
- assert_in_delta 4.0, rep.ips, 0.4
131
- end
132
-
133
- def test_ips_old_config
134
- report = Benchmark.ips(1,1) do |x|
135
- x.report("sleep 0.25") { sleep(0.25) }
136
- end
137
-
138
- rep = report.entries.first
139
-
140
- assert_equal "sleep 0.25", rep.label
141
- assert_equal 4, rep.iterations
142
- assert_in_delta 4.0, rep.ips, 0.2
143
- end
144
-
145
- def test_ips_config_suite
146
- suite = Struct.new(:calls) do
147
- def method_missing(method, *args)
148
- calls << method
149
- end
150
- end.new([])
151
-
152
- Benchmark.ips(0.1, 0.1) do |x|
153
- x.config(:suite => suite)
154
- x.report("job") {}
155
- end
156
-
157
- assert_equal [:warming, :warmup_stats, :running, :add_report], suite.calls
158
- end
159
-
160
- def test_ips_config_suite_by_accsr
161
- suite = Struct.new(:calls) do
162
- def method_missing(method, *args)
163
- calls << method
164
- end
165
- end.new([])
166
-
167
- Benchmark.ips(0.1, 0.1) do |x|
168
- x.suite = suite
169
- x.report("job") {}
170
- end
171
-
172
- assert_equal [:warming, :warmup_stats, :running, :add_report], suite.calls
173
- end
174
-
175
- def test_ips_defaults
176
- report = Benchmark.ips do |x|
177
- x.report("sleep 0.25") { sleep(0.25) }
178
- end
179
-
180
- rep = report.entries.first
181
-
182
- assert_equal "sleep 0.25", rep.label
183
- assert_equal 4*5, rep.iterations
184
- assert_in_delta 4.0, rep.ips, 0.2
185
- end
186
-
187
- def test_ips_report_using_symbol
188
- report = Benchmark.ips do |x|
189
- x.report(:sleep_a_quarter_second) { sleep(0.25) }
190
- end
191
-
192
- rep = report.entries.first
193
-
194
- assert_equal :sleep_a_quarter_second, rep.label
195
- assert_equal 4*5, rep.iterations
196
- assert_in_delta 4.0, rep.ips, 0.2
197
- end
198
-
199
- def test_ips_default_data
200
- report = Benchmark.ips do |x|
201
- x.report("sleep 0.25") { sleep(0.25) }
202
- end
203
-
204
- all_data = report.data
205
-
206
- assert all_data
207
- assert_equal "sleep 0.25", all_data[0][:name]
208
- assert all_data[0][:ips]
209
- assert all_data[0][:stddev]
210
- end
211
-
212
- def test_ips_empty
213
- report = Benchmark.ips do |_x|
214
-
215
- end
216
-
217
- all_data = report.data
218
-
219
- assert all_data
220
- assert_equal [], all_data
221
- end
222
-
223
- def test_json_output
224
- json_file = Tempfile.new("data.json")
225
-
226
- Benchmark.ips do |x|
227
- x.report("sleep 0.25") { sleep(0.25) }
228
- x.json! json_file.path
229
- end
230
-
231
- json_data = json_file.read
232
- assert json_data
233
-
234
- data = JSON.parse json_data
235
- assert data
236
- assert_equal 1, data.size
237
- assert_equal "sleep 0.25", data[0]["name"]
238
- assert data[0]["ips"]
239
- assert data[0]["stddev"]
240
- end
241
-
242
- def test_hold!
243
- temp_file_name = Dir::Tmpname.create(["benchmark-ips", ".tmp"]) { }
244
-
245
- Benchmark.ips(:time => 0.001, :warmup => 0.001) do |x|
246
- x.report("operation") { 100 * 100 }
247
- x.report("operation2") { 100 * 100 }
248
- x.hold! temp_file_name
249
- end
250
-
251
- assert File.exist?(temp_file_name)
252
- File.unlink(temp_file_name)
253
- end
254
- end