benchmark-ips 2.8.4 → 2.9.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 574d0cb84279e02316df55c8d96f396b2a10301b15639ede54198eb278fd6ba2
4
- data.tar.gz: d4ddabd9c093fd2c9559870818543d105c6fb2bbf3d38ad397b3bdf0df691397
3
+ metadata.gz: cc5ffa1a7718a0e1228ff02e0473d0ca7596a0e2ed2f1837f8e7d2b6671fee80
4
+ data.tar.gz: 59f55a6921d0e0c2f85b37724fd1e73175bb45c83ab929476d1eecf6e20fec68
5
5
  SHA512:
6
- metadata.gz: 701868e1d0e33101daaf7e5005245b327dbf3b3d02fb19a8e89eb39563540b5ca5b1ff91c4e3cd4bd9dd54f97537ca48e668608742ee0569a13336818ddfef23
7
- data.tar.gz: a032682bd26691ad5d4a837ba956b9acf50e45c69036e07bdda347791f78bf388cb3339873fd6d5ca9cbf6edeec5090c15ae6fa56a712f6d0f0340729ce8e792
6
+ metadata.gz: be49c48e45aea4ca566cfb52d8e6b50eefb3e367db9733aea730af7e1191d78171c002dcb5c0308a7fe695764d5c028fcf9b088a7edd55227b7097f4b8d4a1da
7
+ data.tar.gz: 6c240a8f140c33a7164352be7d60a00e20aca04a91f5727d9753e6fd0aaac58e9a2bed6a3afb72ab290386dbe5bde7757e7206704e9806f53001d40091b4e346
@@ -1,20 +1,41 @@
1
- === 2.8.4 / 2020-12-03
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
7
+
8
+ * Bug fix
9
+ * Fix a problem with certain configs of quiet mode
10
+
11
+ ### 2.9.1 / 2021-05-24
12
+
13
+ * Bug fix
14
+ * Include all files in gem
15
+
16
+ ### 2.9.0 / 2021-05-21
17
+
18
+ * Features
19
+ * Suite can now be set via an accessor
20
+ * Default SHARE_URL is now `ips.fastruby.io`, operated by Ombu Labs.
21
+
22
+ ### 2.8.4 / 2020-12-03
2
23
 
3
24
  * Bug fix
4
25
  * Fixed hold! when results file does not exist.
5
26
 
6
- === 2.8.3 / 2020-08-28
27
+ ### 2.8.3 / 2020-08-28
7
28
 
8
- * Bug fix
29
+ * Bug fix
9
30
  * Fixed inaccuracy caused by integer overflows.
10
31
 
11
- === 2.8.2 / 2020-05-04
32
+ ### 2.8.2 / 2020-05-04
12
33
 
13
- * Bug fix
34
+ * Bug fix
14
35
  * Fixed problems with Manifest.txt.
15
36
  * Empty interim results files are ignored.
16
37
 
17
- === 2.8.0 / 2020-05-01
38
+ ### 2.8.0 / 2020-05-01
18
39
 
19
40
  * Feature
20
41
  * Allow running with empty ips block.
@@ -27,16 +48,16 @@
27
48
  * Added some RDoc docs.
28
49
  * Added some examples in examples/
29
50
 
30
- === 2.7.2 / 2016-08-18
51
+ ### 2.7.2 / 2016-08-18
31
52
 
32
53
  * 1 bug fix:
33
54
  * Restore old accessors. Fixes #76
34
55
 
35
- === 2.7.1 / 2016-08-08
56
+ ### 2.7.1 / 2016-08-08
36
57
 
37
58
  Add missing files
38
59
 
39
- === 2.7.0 / 2016-08-05
60
+ ### 2.7.0 / 2016-08-05
40
61
 
41
62
  * 1 minor features:
42
63
  * Add support for confidence intervals
@@ -53,9 +74,9 @@ Add missing files
53
74
  * Merge pull request #67 from benoittgt/master
54
75
  * Merge pull request #69 from chrisseaton/kalibera-confidence-intervals
55
76
 
56
- === MISSING 2.6.0 and 2.6.1
77
+ ### MISSING 2.6.0 and 2.6.1
57
78
 
58
- === 2.5.0 / 2016-02-14
79
+ ### 2.5.0 / 2016-02-14
59
80
 
60
81
  * 1 minor feature:
61
82
  * Add iterations option.
@@ -67,12 +88,12 @@ Add missing files
67
88
  * Merge pull request #58 from chrisseaton/iterations
68
89
  * Merge pull request #60 from chrisseaton/significance
69
90
 
70
- === 2.4.1 / 2016-02-12
91
+ ### 2.4.1 / 2016-02-12
71
92
 
72
93
  * 1 bug fix:
73
94
  * Add missing files to gem
74
95
 
75
- === 2.4.0 / 2016-02-12
96
+ ### 2.4.0 / 2016-02-12
76
97
 
77
98
  * 1 minor features
78
99
  * Add support for hold! and independent invocations.
@@ -107,7 +128,7 @@ Add missing files
107
128
  * Merge pull request #56 from chrisseaton/independence
108
129
  * Merge pull request #57 from chrisseaton/tighten-loop
109
130
 
110
- === 2.3.0 / 2015-07-20
131
+ ### 2.3.0 / 2015-07-20
111
132
 
112
133
  * 2 minor features:
113
134
  * Support keyword arguments
@@ -121,7 +142,7 @@ Add missing files
121
142
  * Merge pull request #42 from kbrock/newer_travis
122
143
  * Merge pull request #43 from kbrock/non_to_s_labels
123
144
 
124
- === 2.2.0 / 2015-05-09
145
+ ### 2.2.0 / 2015-05-09
125
146
 
126
147
  * 1 minor features:
127
148
  * Fix quiet mode
@@ -145,7 +166,7 @@ Add missing files
145
166
  * Merge pull request #29 from JuanitoFatas/feature/json-export
146
167
  * Merge pull request #26 from JuanitoFatas/feature/takes-symbol-as-report-parameter
147
168
 
148
- === 2.1.1 / 2015-01-12
169
+ ### 2.1.1 / 2015-01-12
149
170
 
150
171
  * 1 minor fix:
151
172
  * Don't send label through printf so that % work directly
@@ -159,7 +180,7 @@ Add missing files
159
180
  * 1 PR merged:
160
181
  * Merge pull request #24 from zzak/simple-format-result-description
161
182
 
162
- === 2.1.0 / 2014-11-10
183
+ ### 2.1.0 / 2014-11-10
163
184
 
164
185
  * Documentation changes:
165
186
  * Many documentation fixes by Juanito Fatas!
@@ -170,7 +191,7 @@ Add missing files
170
191
  * Formatting of large values improved (human vs raw mode)
171
192
  * Contributed by Charles Oliver Nutter
172
193
 
173
- === 2.0.0 / 2014-06-18
194
+ ### 2.0.0 / 2014-06-18
174
195
 
175
196
  * The 'Davy Stevenson' release!
176
197
  * Codename: Springtime Hummingbird Dance
@@ -188,7 +209,7 @@ Add missing files
188
209
  * Zachary Scott
189
210
  * schneems (Richard Schneeman)
190
211
 
191
- === 1.0.0 / 2012-03-23
212
+ ### 1.0.0 / 2012-03-23
192
213
 
193
214
  * 1 major enhancement
194
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
@@ -186,11 +186,15 @@ end
186
186
 
187
187
  ### Online sharing
188
188
 
189
- If you want to share quickly your benchmark result with others. Run you benchmark
190
- with `SHARE=1` argument. I.e.: `SHARE=1 ruby my_benchmark.rb`.
191
- Result will be sent to [benchmark.fyi](https://benchmark.fyi/) and benchmark-ips
189
+ If you want to quickly share your benchmark result with others, run you benchmark
190
+ with `SHARE=1` argument. For example: `SHARE=1 ruby my_benchmark.rb`.
191
+
192
+ Result will be sent to [benchmark.fyi](https://ips.fastruby.io/) and benchmark-ips
192
193
  will display the link to share the benchmark's result.
193
194
 
195
+ If you want to run your own instance of [benchmark.fyi](https://github.com/evanphx/benchmark.fyi)
196
+ and share it to that instance, you can do this: `SHARE_URL=https://ips.example.com ruby my_benchmark.rb`
197
+
194
198
  ### Advanced Statistics
195
199
 
196
200
  By default, the margin of error shown is plus-minus one standard deviation. If
@@ -227,7 +231,7 @@ Benchmark.ips do |x|
227
231
 
228
232
  x.stats = :bootstrap
229
233
  x.confidence = 95
230
-
234
+
231
235
  # confidence is 95% by default, so it can be omitted
232
236
 
233
237
  end
@@ -250,27 +254,3 @@ After checking out the source, run:
250
254
  This task will install any missing dependencies, run the tests/specs,
251
255
  and generate the RDoc.
252
256
 
253
- ## LICENSE:
254
-
255
- (The MIT License)
256
-
257
- Copyright (c) 2015 Evan Phoenix
258
-
259
- Permission is hereby granted, free of charge, to any person obtaining
260
- a copy of this software and associated documentation files (the
261
- 'Software'), to deal in the Software without restriction, including
262
- without limitation the rights to use, copy, modify, merge, publish,
263
- distribute, sublicense, and/or sell copies of the Software, and to
264
- permit persons to whom the Software is furnished to do so, subject to
265
- the following conditions:
266
-
267
- The above copyright notice and this permission notice shall be
268
- included in all copies or substantial portions of the Software.
269
-
270
- THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
271
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
272
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
273
- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
274
- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
275
- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
276
- 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
@@ -0,0 +1,27 @@
1
+ module Benchmark
2
+ module IPS
3
+ class Job
4
+ class NoopReport
5
+ def start_warming
6
+ end
7
+
8
+ def start_running
9
+ end
10
+
11
+ def footer
12
+ end
13
+
14
+ def warming(a, b)
15
+ end
16
+
17
+ def warmup_stats(a, b)
18
+ end
19
+
20
+ def add_report(a, b)
21
+ end
22
+
23
+ alias_method :running, :warming
24
+ end
25
+ end
26
+ end
27
+ end
File without changes
@@ -51,16 +51,20 @@ module Benchmark
51
51
  # @return [Integer]
52
52
  attr_accessor :confidence
53
53
 
54
+ # Silence output
55
+ # @return [Boolean]
56
+ attr_reader :quiet
57
+
58
+ # Suite
59
+ # @return [Benchmark::IPS::NoopSuite]
60
+ attr_reader :suite
61
+
54
62
  # Instantiate the Benchmark::IPS::Job.
55
- # @option opts [Benchmark::Suite] (nil) :suite Specify Benchmark::Suite.
56
- # @option opts [Boolean] (false) :quiet Suppress the printing of information.
57
63
  def initialize opts={}
58
- @suite = opts[:suite] || nil
59
- @stdout = opts[:quiet] ? nil : StdoutReport.new
60
64
  @list = []
61
- @compare = false
62
65
  @run_single = false
63
66
  @json_path = false
67
+ @compare = false
64
68
  @held_path = nil
65
69
  @held_results = nil
66
70
 
@@ -75,6 +79,8 @@ module Benchmark
75
79
  # Default statistical model
76
80
  @stats = :sd
77
81
  @confidence = 95
82
+
83
+ self.quiet = false
78
84
  end
79
85
 
80
86
  # Job configuration options, set +@warmup+ and +@time+.
@@ -88,6 +94,20 @@ module Benchmark
88
94
  @iterations = opts[:iterations] if opts[:iterations]
89
95
  @stats = opts[:stats] if opts[:stats]
90
96
  @confidence = opts[:confidence] if opts[:confidence]
97
+ self.quiet = opts[:quiet] if opts.key?(:quiet)
98
+ self.suite = opts[:suite]
99
+ end
100
+
101
+ def quiet=(val)
102
+ @stdout = reporter(quiet: val)
103
+ end
104
+
105
+ def suite=(suite)
106
+ @suite = suite || Benchmark::IPS::NoopSuite.new
107
+ end
108
+
109
+ def reporter(quiet:)
110
+ quiet ? NoopReport.new : StdoutReport.new
91
111
  end
92
112
 
93
113
  # Return true if job needs to be compared.
@@ -223,19 +243,19 @@ module Benchmark
223
243
 
224
244
  def run
225
245
  if @warmup && @warmup != 0 then
226
- @stdout.start_warming if @stdout
246
+ @stdout.start_warming
227
247
  @iterations.times do
228
248
  run_warmup
229
249
  end
230
250
  end
231
251
 
232
- @stdout.start_running if @stdout
252
+ @stdout.start_running
233
253
 
234
254
  @iterations.times do |n|
235
255
  run_benchmark
236
256
  end
237
257
 
238
- @stdout.footer if @stdout
258
+ @stdout.footer
239
259
  end
240
260
 
241
261
  # Run warmup.
@@ -243,8 +263,8 @@ module Benchmark
243
263
  @list.each do |item|
244
264
  next if run_single? && @held_results && @held_results.key?(item.label)
245
265
 
246
- @suite.warming item.label, @warmup if @suite
247
- @stdout.warming item.label, @warmup if @stdout
266
+ @suite.warming item.label, @warmup
267
+ @stdout.warming item.label, @warmup
248
268
 
249
269
  Timing.clean_env
250
270
 
@@ -256,9 +276,7 @@ module Benchmark
256
276
  target = Timing.add_second before, @warmup / 2.0
257
277
 
258
278
  cycles = 1
259
- warmup_iter = 1
260
- warmup_time_us = 0.0
261
- while Timing.now + warmup_time_us * 2 < target
279
+ begin
262
280
  t0 = Timing.now
263
281
  item.call_times cycles
264
282
  t1 = Timing.now
@@ -269,7 +287,7 @@ module Benchmark
269
287
  # then exit the loop to avoid overflows and start the 100ms warmup runs
270
288
  break if cycles >= POW_2_30
271
289
  cycles *= 2
272
- end
290
+ end while Timing.now + warmup_time_us * 2 < target
273
291
 
274
292
  cycles = cycles_per_100ms warmup_time_us, warmup_iter
275
293
  @timing[item] = cycles
@@ -280,8 +298,8 @@ module Benchmark
280
298
  item.call_times cycles
281
299
  end
282
300
 
283
- @stdout.warmup_stats warmup_time_us, @timing[item] if @stdout
284
- @suite.warmup_stats warmup_time_us, @timing[item] if @suite
301
+ @stdout.warmup_stats warmup_time_us, @timing[item]
302
+ @suite.warmup_stats warmup_time_us, @timing[item]
285
303
 
286
304
  break if run_single?
287
305
  end
@@ -292,8 +310,8 @@ module Benchmark
292
310
  @list.each do |item|
293
311
  next if run_single? && @held_results && @held_results.key?(item.label)
294
312
 
295
- @suite.running item.label, @time if @suite
296
- @stdout.running item.label, @time if @stdout
313
+ @suite.running item.label, @time
314
+ @stdout.running item.label, @time
297
315
 
298
316
  Timing.clean_env
299
317
 
@@ -306,7 +324,8 @@ module Benchmark
306
324
 
307
325
  target = Timing.add_second Timing.now, @time
308
326
 
309
- while (before = Timing.now) < target
327
+ begin
328
+ before = Timing.now
310
329
  item.call_times cycles
311
330
  after = Timing.now
312
331
 
@@ -318,7 +337,7 @@ module Benchmark
318
337
  iter += cycles
319
338
 
320
339
  measurements_us << iter_us
321
- end
340
+ end while Timing.now < target
322
341
 
323
342
  final_time = before
324
343
 
@@ -334,8 +353,8 @@ module Benchmark
334
353
  rep.show_total_time!
335
354
  end
336
355
 
337
- @stdout.add_report rep, caller(1).first if @stdout
338
- @suite.add_report rep, caller(1).first if @suite
356
+ @stdout.add_report rep, caller(1).first
357
+ @suite.add_report rep, caller(1).first
339
358
 
340
359
  break if run_single?
341
360
  end
@@ -0,0 +1,25 @@
1
+ module Benchmark
2
+ module IPS
3
+ class NoopSuite
4
+ def start_warming
5
+ end
6
+
7
+ def start_running
8
+ end
9
+
10
+ def footer
11
+ end
12
+
13
+ def warming(a, b)
14
+ end
15
+
16
+ def warmup_stats(a, b)
17
+ end
18
+
19
+ def add_report(a, b)
20
+ end
21
+
22
+ alias_method :running, :warming
23
+ end
24
+ end
25
+ end
File without changes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'net/http'
2
4
  require 'net/https'
3
5
  require 'json'
@@ -5,7 +7,7 @@ require 'json'
5
7
  module Benchmark
6
8
  module IPS
7
9
  class Share
8
- DEFAULT_URL = "https://benchmark.fyi"
10
+ DEFAULT_URL = "https://ips.fastruby.io"
9
11
  def initialize(report, job)
10
12
  @report = report
11
13
  @job = job
File without changes
File without changes
File without changes
data/lib/benchmark/ips.rb CHANGED
@@ -5,8 +5,10 @@ require 'benchmark/ips/stats/stats_metric'
5
5
  require 'benchmark/ips/stats/sd'
6
6
  require 'benchmark/ips/stats/bootstrap'
7
7
  require 'benchmark/ips/report'
8
+ require 'benchmark/ips/noop_suite'
8
9
  require 'benchmark/ips/job/entry'
9
10
  require 'benchmark/ips/job/stdout_report'
11
+ require 'benchmark/ips/job/noop_report'
10
12
  require 'benchmark/ips/job'
11
13
 
12
14
  # Performance benchmarking library
@@ -16,10 +18,10 @@ module Benchmark
16
18
  module IPS
17
19
 
18
20
  # Benchmark-ips Gem version.
19
- VERSION = "2.8.4"
21
+ VERSION = "2.9.3"
20
22
 
21
23
  # CODENAME of current version.
22
- CODENAME = "Tardy Turtle"
24
+ CODENAME = "Sleepy Sasquatch"
23
25
 
24
26
  # Measure code in block, each code's benchmarked result will display in
25
27
  # iteration per second with standard deviation in given time.
@@ -33,23 +35,14 @@ module Benchmark
33
35
  time, warmup, quiet = args
34
36
  end
35
37
 
36
- suite = nil
37
-
38
38
  sync, $stdout.sync = $stdout.sync, true
39
39
 
40
- if defined? Benchmark::Suite and Suite.current
41
- suite = Benchmark::Suite.current
42
- end
43
-
44
- quiet ||= (suite && suite.quiet?)
45
-
46
- job = Job.new({:suite => suite,
47
- :quiet => quiet
48
- })
40
+ job = Job.new
49
41
 
50
42
  job_opts = {}
51
43
  job_opts[:time] = time unless time.nil?
52
44
  job_opts[:warmup] = warmup unless warmup.nil?
45
+ job_opts[:quiet] = quiet unless quiet.nil?
53
46
 
54
47
  job.config job_opts
55
48
 
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.8.4
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: 2020-12-03 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,80 +16,62 @@ 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
79
61
  - lib/benchmark/ips/job/entry.rb
62
+ - lib/benchmark/ips/job/noop_report.rb
80
63
  - lib/benchmark/ips/job/stdout_report.rb
64
+ - lib/benchmark/ips/noop_suite.rb
81
65
  - lib/benchmark/ips/report.rb
82
66
  - lib/benchmark/ips/share.rb
83
67
  - lib/benchmark/ips/stats/bootstrap.rb
84
68
  - lib/benchmark/ips/stats/sd.rb
85
69
  - lib/benchmark/ips/stats/stats_metric.rb
86
70
  - lib/benchmark/timing.rb
87
- - test/test_benchmark_ips.rb
88
71
  homepage: https://github.com/evanphx/benchmark-ips
89
72
  licenses:
90
73
  - MIT
91
- metadata:
92
- homepage_uri: https://github.com/evanphx/benchmark-ips
74
+ metadata: {}
93
75
  post_install_message:
94
76
  rdoc_options:
95
77
  - "--main"
@@ -107,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
89
  - !ruby/object:Gem::Version
108
90
  version: '0'
109
91
  requirements: []
110
- rubygems_version: 3.1.4
92
+ rubygems_version: 3.2.26
111
93
  signing_key:
112
94
  specification_version: 4
113
- summary: An iterations per second enhancement to Benchmark.
95
+ summary: A iterations per second enhancement to Benchmark.
114
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,17 +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/stdout_report.rb
11
- lib/benchmark/ips/report.rb
12
- lib/benchmark/ips/share.rb
13
- lib/benchmark/ips/stats/bootstrap.rb
14
- lib/benchmark/ips/stats/sd.rb
15
- lib/benchmark/ips/stats/stats_metric.rb
16
- lib/benchmark/timing.rb
17
- 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,199 +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_kwargs
17
- Benchmark.ips(:time => 1, :warmup => 1, :quiet => false) do |x|
18
- x.report("sleep 0.25") { sleep(0.25) }
19
- end
20
-
21
- assert $stdout.string.size > 0
22
- end
23
-
24
- def test_warmup0
25
- $stdout = @old_stdout
26
-
27
- out, err = capture_io do
28
- Benchmark.ips(:time => 1, :warmup => 0, :quiet => false) do |x|
29
- x.report("sleep 0.25") { sleep(0.25) }
30
- end
31
- end
32
-
33
- refute_match(/Warming up -+/, out)
34
- assert_empty err
35
- end
36
-
37
- def test_output
38
- Benchmark.ips(1) do |x|
39
- x.report("operation") { 100 * 100 }
40
- end
41
-
42
- assert $stdout.string.size > 0
43
- end
44
-
45
- def test_quiet
46
- Benchmark.ips(1, nil, true) do |x|
47
- x.report("operation") { 100 * 100 }
48
- end
49
-
50
- assert $stdout.string.size.zero?
51
-
52
- Benchmark.ips(:quiet => true) do |x|
53
- x.report("operation") { 100 * 100 }
54
- end
55
-
56
- assert $stdout.string.size.zero?
57
- end
58
-
59
- def test_ips
60
- report = Benchmark.ips do |x|
61
- x.config(:time => 1, :warmup => 1)
62
- x.report("sleep 0.25") { sleep(0.25) }
63
- x.report("sleep 0.05") { sleep(0.05) }
64
- x.compare!
65
- end
66
-
67
- rep1 = report.entries[0]
68
- rep2 = report.entries[1]
69
-
70
- assert_equal "sleep 0.25", rep1.label
71
- assert_equal 4, rep1.iterations
72
- assert_in_delta 4.0, rep1.ips, 0.2
73
-
74
- assert_equal "sleep 0.05", rep2.label
75
- assert_in_delta 20.0, rep2.iterations.to_f, 1.0
76
- assert_in_delta 20.0, rep2.ips, 2.0
77
- end
78
-
79
- def test_ips_alternate_config
80
- report = Benchmark.ips do |x|
81
- x.time = 1
82
- x.warmup = 1
83
- x.report("sleep 0.25") { sleep(0.25) }
84
- end
85
-
86
- rep = report.entries.first
87
-
88
- assert_equal "sleep 0.25", rep.label
89
- assert_equal 4, rep.iterations
90
- assert_in_delta 4.0, rep.ips, 0.4
91
- end
92
-
93
- def test_ips_old_config
94
- report = Benchmark.ips(1,1) do |x|
95
- x.report("sleep 0.25") { sleep(0.25) }
96
- end
97
-
98
- rep = report.entries.first
99
-
100
- assert_equal "sleep 0.25", rep.label
101
- assert_equal 4, rep.iterations
102
- assert_in_delta 4.0, rep.ips, 0.2
103
- end
104
-
105
- def test_ips_config_suite
106
- suite = Struct.new(:calls) do
107
- def method_missing(method, *args)
108
- calls << method
109
- end
110
- end.new([])
111
-
112
- Benchmark.ips(0.1, 0.1) do |x|
113
- x.config(:suite => suite)
114
- x.report("job") {}
115
- end
116
-
117
- assert_equal [:warming, :warmup_stats, :running, :add_report], suite.calls
118
- end
119
-
120
- def test_ips_defaults
121
- report = Benchmark.ips do |x|
122
- x.report("sleep 0.25") { sleep(0.25) }
123
- end
124
-
125
- rep = report.entries.first
126
-
127
- assert_equal "sleep 0.25", rep.label
128
- assert_equal 4*5, rep.iterations
129
- assert_in_delta 4.0, rep.ips, 0.2
130
- end
131
-
132
- def test_ips_report_using_symbol
133
- report = Benchmark.ips do |x|
134
- x.report(:sleep_a_quarter_second) { sleep(0.25) }
135
- end
136
-
137
- rep = report.entries.first
138
-
139
- assert_equal :sleep_a_quarter_second, rep.label
140
- assert_equal 4*5, rep.iterations
141
- assert_in_delta 4.0, rep.ips, 0.2
142
- end
143
-
144
- def test_ips_default_data
145
- report = Benchmark.ips do |x|
146
- x.report("sleep 0.25") { sleep(0.25) }
147
- end
148
-
149
- all_data = report.data
150
-
151
- assert all_data
152
- assert_equal "sleep 0.25", all_data[0][:name]
153
- assert all_data[0][:ips]
154
- assert all_data[0][:stddev]
155
- end
156
-
157
- def test_ips_empty
158
- report = Benchmark.ips do |_x|
159
-
160
- end
161
-
162
- all_data = report.data
163
-
164
- assert all_data
165
- assert_equal [], all_data
166
- end
167
-
168
- def test_json_output
169
- json_file = Tempfile.new("data.json")
170
-
171
- Benchmark.ips do |x|
172
- x.report("sleep 0.25") { sleep(0.25) }
173
- x.json! json_file.path
174
- end
175
-
176
- json_data = json_file.read
177
- assert json_data
178
-
179
- data = JSON.parse json_data
180
- assert data
181
- assert_equal 1, data.size
182
- assert_equal "sleep 0.25", data[0]["name"]
183
- assert data[0]["ips"]
184
- assert data[0]["stddev"]
185
- end
186
-
187
- def test_hold!
188
- temp_file_name = Dir::Tmpname.create(["benchmark-ips", ".tmp"]) { }
189
-
190
- Benchmark.ips(:time => 0.001, :warmup => 0.001) do |x|
191
- x.report("operation") { 100 * 100 }
192
- x.report("operation2") { 100 * 100 }
193
- x.hold! temp_file_name
194
- end
195
-
196
- assert File.exist?(temp_file_name)
197
- File.unlink(temp_file_name)
198
- end
199
- end