benchmark-ips 2.8.4 → 2.9.1

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: 574d0cb84279e02316df55c8d96f396b2a10301b15639ede54198eb278fd6ba2
4
- data.tar.gz: d4ddabd9c093fd2c9559870818543d105c6fb2bbf3d38ad397b3bdf0df691397
3
+ metadata.gz: e6c664c1e49fd7235ba573dc4a5bd92ce7446c0d4206c355a2c7b84320b26d5a
4
+ data.tar.gz: 72d1502418ff11b5e321825ad5d3d1c44889d170c7da0becbf8b6b9fd7c5f283
5
5
  SHA512:
6
- metadata.gz: 701868e1d0e33101daaf7e5005245b327dbf3b3d02fb19a8e89eb39563540b5ca5b1ff91c4e3cd4bd9dd54f97537ca48e668608742ee0569a13336818ddfef23
7
- data.tar.gz: a032682bd26691ad5d4a837ba956b9acf50e45c69036e07bdda347791f78bf388cb3339873fd6d5ca9cbf6edeec5090c15ae6fa56a712f6d0f0340729ce8e792
6
+ metadata.gz: '0956333ead3cb5307864b8d013828fff4f8dbec88c27142314d2742ba5378dbf0388f04706bf797cb24d2fd21a38576cdf04892d62664eb418d6cba38e5bfb33'
7
+ data.tar.gz: 0a953ca0e9270f4eac9c00c51117bc2bfcba6a06e51f3508152b3dcbfd8e03ae4e0cebbf79bc6dc51efcf200e459d9a5ee457d70f371f946e1da8a75c50f7462
data/History.txt CHANGED
@@ -1,3 +1,14 @@
1
+ === 2.9.1 / 2021-05-24
2
+
3
+ * Bug fix
4
+ * Include all files in gem
5
+
6
+ === 2.9.0 / 2021-05-21
7
+
8
+ * Features
9
+ * Suite can now be set via an accessor
10
+ * Default SHARE_URL is now `ips.fastruby.io`, operated by Ombu Labs.
11
+
1
12
  === 2.8.4 / 2020-12-03
2
13
 
3
14
  * Bug fix
@@ -5,12 +16,12 @@
5
16
 
6
17
  === 2.8.3 / 2020-08-28
7
18
 
8
- * Bug fix
19
+ * Bug fix
9
20
  * Fixed inaccuracy caused by integer overflows.
10
21
 
11
22
  === 2.8.2 / 2020-05-04
12
23
 
13
- * Bug fix
24
+ * Bug fix
14
25
  * Fixed problems with Manifest.txt.
15
26
  * Empty interim results files are ignored.
16
27
 
data/Manifest.txt CHANGED
@@ -7,7 +7,9 @@ lib/benchmark/compare.rb
7
7
  lib/benchmark/ips.rb
8
8
  lib/benchmark/ips/job.rb
9
9
  lib/benchmark/ips/job/entry.rb
10
+ lib/benchmark/ips/job/noop_report.rb
10
11
  lib/benchmark/ips/job/stdout_report.rb
12
+ lib/benchmark/ips/noop_suite.rb
11
13
  lib/benchmark/ips/report.rb
12
14
  lib/benchmark/ips/share.rb
13
15
  lib/benchmark/ips/stats/bootstrap.rb
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
@@ -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
@@ -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
 
@@ -88,6 +92,20 @@ module Benchmark
88
92
  @iterations = opts[:iterations] if opts[:iterations]
89
93
  @stats = opts[:stats] if opts[:stats]
90
94
  @confidence = opts[:confidence] if opts[:confidence]
95
+ self.quiet = opts[:quiet]
96
+ self.suite = opts[:suite]
97
+ end
98
+
99
+ def quiet=(val)
100
+ @stdout = reporter(quiet: val)
101
+ end
102
+
103
+ def suite=(suite)
104
+ @suite = suite || Benchmark::IPS::NoopSuite.new
105
+ end
106
+
107
+ def reporter(quiet:)
108
+ quiet ? NoopReport.new : StdoutReport.new
91
109
  end
92
110
 
93
111
  # Return true if job needs to be compared.
@@ -223,19 +241,19 @@ module Benchmark
223
241
 
224
242
  def run
225
243
  if @warmup && @warmup != 0 then
226
- @stdout.start_warming if @stdout
244
+ @stdout.start_warming
227
245
  @iterations.times do
228
246
  run_warmup
229
247
  end
230
248
  end
231
249
 
232
- @stdout.start_running if @stdout
250
+ @stdout.start_running
233
251
 
234
252
  @iterations.times do |n|
235
253
  run_benchmark
236
254
  end
237
255
 
238
- @stdout.footer if @stdout
256
+ @stdout.footer
239
257
  end
240
258
 
241
259
  # Run warmup.
@@ -243,8 +261,8 @@ module Benchmark
243
261
  @list.each do |item|
244
262
  next if run_single? && @held_results && @held_results.key?(item.label)
245
263
 
246
- @suite.warming item.label, @warmup if @suite
247
- @stdout.warming item.label, @warmup if @stdout
264
+ @suite.warming item.label, @warmup
265
+ @stdout.warming item.label, @warmup
248
266
 
249
267
  Timing.clean_env
250
268
 
@@ -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
 
@@ -334,8 +352,8 @@ module Benchmark
334
352
  rep.show_total_time!
335
353
  end
336
354
 
337
- @stdout.add_report rep, caller(1).first if @stdout
338
- @suite.add_report rep, caller(1).first if @suite
355
+ @stdout.add_report rep, caller(1).first
356
+ @suite.add_report rep, caller(1).first
339
357
 
340
358
  break if run_single?
341
359
  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
@@ -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
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.1"
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
 
@@ -54,6 +54,13 @@ class TestBenchmarkIPS < Minitest::Test
54
54
  end
55
55
 
56
56
  assert $stdout.string.size.zero?
57
+
58
+ Benchmark.ips do |x|
59
+ x.quiet = true
60
+ x.report("operation") { 100 * 100 }
61
+ end
62
+
63
+ assert $stdout.string.size.zero?
57
64
  end
58
65
 
59
66
  def test_ips
@@ -117,6 +124,21 @@ class TestBenchmarkIPS < Minitest::Test
117
124
  assert_equal [:warming, :warmup_stats, :running, :add_report], suite.calls
118
125
  end
119
126
 
127
+ def test_ips_config_suite_by_accsr
128
+ suite = Struct.new(:calls) do
129
+ def method_missing(method, *args)
130
+ calls << method
131
+ end
132
+ end.new([])
133
+
134
+ Benchmark.ips(0.1, 0.1) do |x|
135
+ x.suite = suite
136
+ x.report("job") {}
137
+ end
138
+
139
+ assert_equal [:warming, :warmup_stats, :running, :add_report], suite.calls
140
+ end
141
+
120
142
  def test_ips_defaults
121
143
  report = Benchmark.ips do |x|
122
144
  x.report("sleep 0.25") { sleep(0.25) }
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.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evan Phoenix
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-03 00:00:00.000000000 Z
11
+ date: 2021-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -77,7 +77,9 @@ files:
77
77
  - lib/benchmark/ips.rb
78
78
  - lib/benchmark/ips/job.rb
79
79
  - lib/benchmark/ips/job/entry.rb
80
+ - lib/benchmark/ips/job/noop_report.rb
80
81
  - lib/benchmark/ips/job/stdout_report.rb
82
+ - lib/benchmark/ips/noop_suite.rb
81
83
  - lib/benchmark/ips/report.rb
82
84
  - lib/benchmark/ips/share.rb
83
85
  - lib/benchmark/ips/stats/bootstrap.rb
@@ -90,7 +92,7 @@ licenses:
90
92
  - MIT
91
93
  metadata:
92
94
  homepage_uri: https://github.com/evanphx/benchmark-ips
93
- post_install_message:
95
+ post_install_message:
94
96
  rdoc_options:
95
97
  - "--main"
96
98
  - README.md
@@ -107,8 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
109
  - !ruby/object:Gem::Version
108
110
  version: '0'
109
111
  requirements: []
110
- rubygems_version: 3.1.4
111
- signing_key:
112
+ rubygems_version: 3.2.9
113
+ signing_key:
112
114
  specification_version: 4
113
115
  summary: An iterations per second enhancement to Benchmark.
114
116
  test_files: []