benchmark-ips 2.6.1 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/History.txt +19 -0
- data/README.md +52 -3
- data/lib/benchmark/compare.rb +16 -7
- data/lib/benchmark/ips.rb +4 -2
- data/lib/benchmark/ips/job.rb +36 -15
- data/lib/benchmark/ips/job/stdout_report.rb +6 -0
- data/lib/benchmark/ips/report.rb +17 -22
- data/lib/benchmark/timing.rb +3 -17
- data/test/test_benchmark_ips.rb +6 -6
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 122a521904ed1263289b5f68e76c72515830447e
|
4
|
+
data.tar.gz: 6b60d87ce82746370a1d0bff1f49be8175b2a5be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e3588122227405ccb4ce7376e431ee630ca87779633cecdf24b82ba672610cbafc92ff82685b05accda763a54a0c54b50fe2a42763c5f45a9a2171984aaec69
|
7
|
+
data.tar.gz: cf47674032d38ac758b371edae0b1ffeceaac07ad9f7fc10d8413ffeb2db173395cf90d187b41293d122c50f6c2a9c68776b1e15c6c0c425549928d697d11485
|
data/History.txt
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
=== 2.7.0 / 2016-08-05
|
2
|
+
|
3
|
+
* 1 minor features:
|
4
|
+
* Add support for confidence intervals
|
5
|
+
|
6
|
+
* 1 bug fixes:
|
7
|
+
* Cleanup a few coding patterns
|
8
|
+
|
9
|
+
* 2 doc fixes:
|
10
|
+
* Add infos about benchark.fyi to Readme
|
11
|
+
* Remove ancient releases
|
12
|
+
|
13
|
+
* 3 merged PRs:
|
14
|
+
* Merge pull request #65 from kbrock/fixup_inject
|
15
|
+
* Merge pull request #67 from benoittgt/master
|
16
|
+
* Merge pull request #69 from chrisseaton/kalibera-confidence-intervals
|
17
|
+
|
18
|
+
=== MISSING 2.6.0 and 2.6.1
|
19
|
+
|
1
20
|
=== 2.5.0 / 2016-02-14
|
2
21
|
|
3
22
|
* 1 minor feature:
|
data/README.md
CHANGED
@@ -144,10 +144,10 @@ are independent of each other. You can do this with the `hold!` command.
|
|
144
144
|
|
145
145
|
```ruby
|
146
146
|
Benchmark.ips do |x|
|
147
|
-
|
147
|
+
|
148
148
|
# Hold results between multiple invocations of Ruby
|
149
149
|
x.hold! 'filename'
|
150
|
-
|
150
|
+
|
151
151
|
end
|
152
152
|
```
|
153
153
|
|
@@ -172,9 +172,58 @@ Benchmark.ips do |x|
|
|
172
172
|
x.config(:iterations => 3)
|
173
173
|
|
174
174
|
# or
|
175
|
-
|
175
|
+
|
176
176
|
x.iterations = 3
|
177
|
+
|
178
|
+
end
|
179
|
+
```
|
180
|
+
|
181
|
+
### Online sharing
|
182
|
+
|
183
|
+
If you want to share quickly your benchmark result with others. Run you benchmark
|
184
|
+
with `SHARE=1` argument. I.e.: `SHARE=1 ruby my_benchmark.rb`.
|
185
|
+
Result will be sent to [benchmark.fyi](https://benchmark.fyi/) and benchmark-ips
|
186
|
+
will display the link to share the benchmark's result.
|
187
|
+
|
188
|
+
### Advanced Statistics
|
189
|
+
|
190
|
+
By default, the margin of error shown is plus-minus one standard deviation. If
|
191
|
+
a more advanced statistical test is wanted, a bootstrap confidence interval
|
192
|
+
can be calculated instead. A bootstrap confidence interval has the advantages of
|
193
|
+
arguably being more mathematically sound for this application than a standard
|
194
|
+
deviation, it additionally produces an error for relative slowdowns, which the
|
195
|
+
standard deviation does not, and it is arguably more intuitive and actionable.
|
196
|
+
|
197
|
+
When a bootstrap confidence interval is used, a median of the interval is used
|
198
|
+
rather than the mean of the samples, which is what you get with the default
|
199
|
+
standard deviation.
|
200
|
+
|
201
|
+
The bootstrap confidence interval used is the one described by Tomas Kalibera.
|
202
|
+
Note that for this technique to be valid your benchmark should have reached a
|
203
|
+
non-periodic steady state with statistically independent samples (it should
|
204
|
+
have warmed up) by the time measurements start.
|
205
|
+
|
206
|
+
Using a bootstrap confidence internal requires that the 'kalibera' gem is
|
207
|
+
installed separately. This gem is not a formal dependency, as by default it is
|
208
|
+
not needed.
|
209
|
+
|
210
|
+
```
|
211
|
+
gem install kalibera
|
212
|
+
```
|
213
|
+
|
214
|
+
```ruby
|
215
|
+
Benchmark.ips do |x|
|
216
|
+
|
217
|
+
# The default is :stats => :sd, which doesn't have a configurable confidence
|
218
|
+
x.config(:stats => :bootstrap, :confidence => 95)
|
219
|
+
|
220
|
+
# or
|
221
|
+
|
222
|
+
x.stats = :bootstrap
|
223
|
+
x.confidence = 95
|
177
224
|
|
225
|
+
# confidence is 95% by default, so it can be omitted
|
226
|
+
|
178
227
|
end
|
179
228
|
```
|
180
229
|
|
data/lib/benchmark/compare.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
module Benchmark
|
2
4
|
# Functionality of performaing comparison between reports.
|
3
5
|
#
|
@@ -32,33 +34,40 @@ module Benchmark
|
|
32
34
|
def compare(*entries)
|
33
35
|
return if entries.size < 2
|
34
36
|
|
35
|
-
sorted = entries.sort_by
|
37
|
+
sorted = entries.sort_by{ |e| e.stats.central_tendency }.reverse
|
36
38
|
|
37
39
|
best = sorted.shift
|
38
40
|
|
39
41
|
$stdout.puts "\nComparison:"
|
40
42
|
|
41
|
-
$stdout.printf "%20s: %10.1f i/s\n", best.label, best.
|
43
|
+
$stdout.printf "%20s: %10.1f i/s\n", best.label, best.stats.central_tendency
|
42
44
|
|
43
45
|
sorted.each do |report|
|
44
46
|
name = report.label.to_s
|
45
47
|
|
46
|
-
$stdout.printf "%20s: %10.1f i/s - ", name, report.
|
48
|
+
$stdout.printf "%20s: %10.1f i/s - ", name, report.stats.central_tendency
|
47
49
|
|
48
|
-
best_low = best.
|
49
|
-
report_high = report.
|
50
|
+
best_low = best.stats.central_tendency - best.stats.error
|
51
|
+
report_high = report.stats.central_tendency + report.stats.error
|
50
52
|
overlaps = report_high > best_low
|
51
53
|
|
52
54
|
if overlaps
|
53
55
|
$stdout.print "same-ish: difference falls within error"
|
54
56
|
else
|
55
|
-
|
56
|
-
$stdout.printf "%.2fx
|
57
|
+
slowdown, error = report.stats.slowdown(best.stats)
|
58
|
+
$stdout.printf "%.2fx ", slowdown
|
59
|
+
if error
|
60
|
+
$stdout.printf " (± %.2f)", error
|
61
|
+
end
|
62
|
+
$stdout.print " slower"
|
57
63
|
end
|
58
64
|
|
59
65
|
$stdout.puts
|
60
66
|
end
|
61
67
|
|
68
|
+
footer = best.stats.footer
|
69
|
+
$stdout.puts footer.rjust(40) if footer
|
70
|
+
|
62
71
|
$stdout.puts
|
63
72
|
end
|
64
73
|
end
|
data/lib/benchmark/ips.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
require 'benchmark/timing'
|
3
3
|
require 'benchmark/compare'
|
4
|
+
require 'benchmark/ips/stats/sd'
|
5
|
+
require 'benchmark/ips/stats/bootstrap'
|
4
6
|
require 'benchmark/ips/report'
|
5
7
|
require 'benchmark/ips/job/entry'
|
6
8
|
require 'benchmark/ips/job/stdout_report'
|
@@ -13,10 +15,10 @@ module Benchmark
|
|
13
15
|
module IPS
|
14
16
|
|
15
17
|
# Benchmark-ips Gem version.
|
16
|
-
VERSION = "2.
|
18
|
+
VERSION = "2.7.0"
|
17
19
|
|
18
20
|
# CODENAME of current version.
|
19
|
-
CODENAME = "
|
21
|
+
CODENAME = "Cultivating Confidence"
|
20
22
|
|
21
23
|
# Measure code in block, each code's benchmarked result will display in
|
22
24
|
# iteration per second with standard deviation in given time.
|
data/lib/benchmark/ips/job.rb
CHANGED
@@ -42,6 +42,14 @@ module Benchmark
|
|
42
42
|
# @return [Integer]
|
43
43
|
attr_accessor :iterations
|
44
44
|
|
45
|
+
# Statistics model.
|
46
|
+
# @return [Object]
|
47
|
+
attr_accessor :stats
|
48
|
+
|
49
|
+
# Confidence.
|
50
|
+
# @return [Integer]
|
51
|
+
attr_accessor :confidence
|
52
|
+
|
45
53
|
# Instantiate the Benchmark::IPS::Job.
|
46
54
|
# @option opts [Benchmark::Suite] (nil) :suite Specify Benchmark::Suite.
|
47
55
|
# @option opts [Boolean] (false) :quiet Suppress the printing of information.
|
@@ -61,6 +69,10 @@ module Benchmark
|
|
61
69
|
@warmup = 2
|
62
70
|
@time = 5
|
63
71
|
@iterations = 1
|
72
|
+
|
73
|
+
# Default statistical model
|
74
|
+
@stats = :sd
|
75
|
+
@confidence = 95
|
64
76
|
end
|
65
77
|
|
66
78
|
# Job configuration options, set +@warmup+ and +@time+.
|
@@ -72,6 +84,8 @@ module Benchmark
|
|
72
84
|
@time = opts[:time] if opts[:time]
|
73
85
|
@suite = opts[:suite] if opts[:suite]
|
74
86
|
@iterations = opts[:iterations] if opts[:iterations]
|
87
|
+
@stats = opts[:stats] if opts[:stats]
|
88
|
+
@confidence = opts[:confidence] if opts[:confidence]
|
75
89
|
end
|
76
90
|
|
77
91
|
# Return true if job needs to be compared.
|
@@ -133,8 +147,7 @@ module Benchmark
|
|
133
147
|
# @return [Integer] Cycles per 100ms.
|
134
148
|
def cycles_per_100ms time_msec, iters
|
135
149
|
cycles = ((MICROSECONDS_PER_100MS / time_msec) * iters).to_i
|
136
|
-
cycles
|
137
|
-
cycles
|
150
|
+
cycles <= 0 ? 1 : cycles
|
138
151
|
end
|
139
152
|
|
140
153
|
# Calculate the time difference of before and after in microseconds.
|
@@ -179,6 +192,8 @@ module Benchmark
|
|
179
192
|
@iterations.times do |n|
|
180
193
|
held = run_benchmark
|
181
194
|
end
|
195
|
+
|
196
|
+
@stdout.footer if @stdout
|
182
197
|
|
183
198
|
if held
|
184
199
|
puts
|
@@ -225,7 +240,7 @@ module Benchmark
|
|
225
240
|
if hold? && @held_results && @held_results.key?(item.label)
|
226
241
|
result = @held_results[item.label]
|
227
242
|
create_report(item.label, result['measured_us'], result['iter'],
|
228
|
-
|
243
|
+
create_stats(result['samples']), result['cycles'])
|
229
244
|
next
|
230
245
|
end
|
231
246
|
|
@@ -259,16 +274,13 @@ module Benchmark
|
|
259
274
|
|
260
275
|
final_time = before
|
261
276
|
|
262
|
-
measured_us = measurements_us.inject(
|
277
|
+
measured_us = measurements_us.inject(:+)
|
263
278
|
|
264
|
-
|
279
|
+
samples = measurements_us.map { |time_us|
|
265
280
|
iterations_per_sec cycles, time_us
|
266
281
|
}
|
267
282
|
|
268
|
-
|
269
|
-
sd_ips = Timing.stddev(all_ips, avg_ips).round
|
270
|
-
|
271
|
-
rep = create_report(item.label, measured_us, iter, avg_ips, sd_ips, cycles)
|
283
|
+
rep = create_report(item.label, measured_us, iter, create_stats(samples), cycles)
|
272
284
|
|
273
285
|
if (final_time - target).abs >= (@time.to_f * MAX_TIME_SKEW)
|
274
286
|
rep.show_total_time!
|
@@ -284,8 +296,7 @@ module Benchmark
|
|
284
296
|
:item => item.label,
|
285
297
|
:measured_us => measured_us,
|
286
298
|
:iter => iter,
|
287
|
-
:
|
288
|
-
:sd_ips => sd_ips,
|
299
|
+
:samples => samples,
|
289
300
|
:cycles => cycles
|
290
301
|
})
|
291
302
|
f.write "\n"
|
@@ -302,6 +313,17 @@ module Benchmark
|
|
302
313
|
false
|
303
314
|
end
|
304
315
|
|
316
|
+
def create_stats(samples)
|
317
|
+
case @stats
|
318
|
+
when :sd
|
319
|
+
Stats::SD.new(samples)
|
320
|
+
when :bootstrap
|
321
|
+
Stats::Bootstrap.new(samples, @confidence)
|
322
|
+
else
|
323
|
+
raise "unknown stats #{@stats}"
|
324
|
+
end
|
325
|
+
end
|
326
|
+
|
305
327
|
# Run comparison of entries in +@full_report+.
|
306
328
|
def run_comparison
|
307
329
|
@full_report.run_comparison if compare?
|
@@ -316,12 +338,11 @@ module Benchmark
|
|
316
338
|
# @param label [String] Report item label.
|
317
339
|
# @param measured_us [Integer] Measured time in microsecond.
|
318
340
|
# @param iter [Integer] Iterations.
|
319
|
-
# @param
|
320
|
-
# @param sd_ips [Float] Standard deviation iterations per second.
|
341
|
+
# @param samples [Array<Float>] Sampled iterations per second.
|
321
342
|
# @param cycles [Integer] Number of Cycles.
|
322
343
|
# @return [Report::Entry] Entry with data.
|
323
|
-
def create_report(label, measured_us, iter,
|
324
|
-
@full_report.add_entry label, measured_us, iter,
|
344
|
+
def create_report(label, measured_us, iter, samples, cycles)
|
345
|
+
@full_report.add_entry label, measured_us, iter, samples, cycles
|
325
346
|
end
|
326
347
|
end
|
327
348
|
end
|
data/lib/benchmark/ips/report.rb
CHANGED
@@ -13,15 +13,13 @@ module Benchmark
|
|
13
13
|
# @param [#to_s] label Label of entry.
|
14
14
|
# @param [Integer] us Measured time in microsecond.
|
15
15
|
# @param [Integer] iters Iterations.
|
16
|
-
# @param [
|
17
|
-
# @param [Float] ips_sd Standard deviation of iterations per second.
|
16
|
+
# @param [Object] stats Statistics.
|
18
17
|
# @param [Integer] cycles Number of Cycles.
|
19
|
-
def initialize(label, us, iters,
|
18
|
+
def initialize(label, us, iters, stats, cycles)
|
20
19
|
@label = label
|
21
20
|
@microseconds = us
|
22
21
|
@iterations = iters
|
23
|
-
@
|
24
|
-
@ips_sd = ips_sd
|
22
|
+
@stats = stats
|
25
23
|
@measurement_cycle = cycles
|
26
24
|
@show_total_time = false
|
27
25
|
end
|
@@ -38,13 +36,9 @@ module Benchmark
|
|
38
36
|
# @return [Integer] number of iterations.
|
39
37
|
attr_reader :iterations
|
40
38
|
|
41
|
-
#
|
42
|
-
# @return [
|
43
|
-
attr_reader :
|
44
|
-
|
45
|
-
# Standard deviation of iteration per second.
|
46
|
-
# @return [Float] standard deviation of iteration per second.
|
47
|
-
attr_reader :ips_sd
|
39
|
+
# Statistical summary of samples.
|
40
|
+
# @return [Object] statisical summary.
|
41
|
+
attr_reader :stats
|
48
42
|
|
49
43
|
# Number of Cycles.
|
50
44
|
# @return [Integer] number of cycles.
|
@@ -65,8 +59,8 @@ module Benchmark
|
|
65
59
|
|
66
60
|
# Return entry's standard deviation of iteration per second in percentage.
|
67
61
|
# @return [Float] +@ips_sd+ in percentage.
|
68
|
-
def
|
69
|
-
100.0 * (@
|
62
|
+
def error_percentage
|
63
|
+
100.0 * (@stats.error.to_f / @stats.central_tendency)
|
70
64
|
end
|
71
65
|
|
72
66
|
alias_method :runtime, :seconds
|
@@ -78,7 +72,7 @@ module Benchmark
|
|
78
72
|
def body
|
79
73
|
case Benchmark::IPS.options[:format]
|
80
74
|
when :human
|
81
|
-
left = "%s (±%4.1f%%) i/s" % [Helpers.scale(
|
75
|
+
left = "%s (±%4.1f%%) i/s" % [Helpers.scale(@stats.central_tendency), error_percentage]
|
82
76
|
iters = Helpers.scale(@iterations)
|
83
77
|
|
84
78
|
if @show_total_time
|
@@ -87,7 +81,7 @@ module Benchmark
|
|
87
81
|
left.ljust(20) + (" - %s" % iters)
|
88
82
|
end
|
89
83
|
else
|
90
|
-
left = "%10.1f (±%.1f%%) i/s" % [
|
84
|
+
left = "%10.1f (±%.1f%%) i/s" % [@stats.central_tendency, error_percentage]
|
91
85
|
|
92
86
|
if @show_total_time
|
93
87
|
left.ljust(20) + (" - %10d in %10.6fs" % [@iterations, runtime])
|
@@ -131,12 +125,11 @@ module Benchmark
|
|
131
125
|
# @param label [String] Entry label.
|
132
126
|
# @param microseconds [Integer] Measured time in microsecond.
|
133
127
|
# @param iters [Integer] Iterations.
|
134
|
-
# @param
|
135
|
-
# @param ips_sd [Float] Standard deviation of iterations per second.
|
128
|
+
# @param stats [Object] Statistical results.
|
136
129
|
# @param measurement_cycle [Integer] Number of cycles.
|
137
130
|
# @return [Report::Entry] Last added entry.
|
138
|
-
def add_entry label, microseconds, iters,
|
139
|
-
entry = Entry.new(label, microseconds, iters,
|
131
|
+
def add_entry label, microseconds, iters, stats, measurement_cycle
|
132
|
+
entry = Entry.new(label, microseconds, iters, stats, measurement_cycle)
|
140
133
|
@entries.delete_if { |e| e.label == label }
|
141
134
|
@entries << entry
|
142
135
|
entry
|
@@ -155,8 +148,10 @@ module Benchmark
|
|
155
148
|
@data ||= @entries.collect do |entry|
|
156
149
|
{
|
157
150
|
:name => entry.label,
|
158
|
-
:
|
159
|
-
:
|
151
|
+
:central_tendency => entry.stats.central_tendency,
|
152
|
+
:ips => entry.stats.central_tendency, # for backwards compatibility
|
153
|
+
:error => entry.stats.error,
|
154
|
+
:stddev => entry.stats.error, # for backwards compatibility
|
160
155
|
:microseconds => entry.microseconds,
|
161
156
|
:iterations => entry.iterations,
|
162
157
|
:cycles => entry.measurement_cycle,
|
data/lib/benchmark/timing.rb
CHANGED
@@ -8,7 +8,7 @@ module Benchmark
|
|
8
8
|
# @param [Array] samples Samples to calculate mean.
|
9
9
|
# @return [Float] Mean of given samples.
|
10
10
|
def self.mean(samples)
|
11
|
-
sum = samples.inject(
|
11
|
+
sum = samples.inject(:+)
|
12
12
|
sum / samples.size
|
13
13
|
end
|
14
14
|
|
@@ -31,20 +31,6 @@ module Benchmark
|
|
31
31
|
Math.sqrt variance(samples, m)
|
32
32
|
end
|
33
33
|
|
34
|
-
# Resample mean of given samples.
|
35
|
-
# @param [Integer] resample_times Resample times, defaults to 100.
|
36
|
-
# @return [Array] Resampled samples.
|
37
|
-
def self.resample_mean(samples, resample_times=100)
|
38
|
-
resamples = []
|
39
|
-
|
40
|
-
resample_times.times do
|
41
|
-
resample = samples.map { samples[rand(samples.size)] }
|
42
|
-
resamples << Timing.mean(resample)
|
43
|
-
end
|
44
|
-
|
45
|
-
resamples
|
46
|
-
end
|
47
|
-
|
48
34
|
# Recycle used objects by starting Garbage Collector.
|
49
35
|
def self.clean_env
|
50
36
|
# rbx
|
@@ -66,7 +52,7 @@ module Benchmark
|
|
66
52
|
|
67
53
|
# Add one second to the time represenetation
|
68
54
|
def self.add_second(t, s)
|
69
|
-
|
55
|
+
t + (s * MICROSECONDS_PER_SECOND)
|
70
56
|
end
|
71
57
|
|
72
58
|
# Return the number of microseconds between the 2 moments
|
@@ -81,7 +67,7 @@ module Benchmark
|
|
81
67
|
|
82
68
|
# Add one second to the time represenetation
|
83
69
|
def self.add_second(t, s)
|
84
|
-
|
70
|
+
t + s
|
85
71
|
end
|
86
72
|
|
87
73
|
# Return the number of microseconds between the 2 moments
|
data/test/test_benchmark_ips.rb
CHANGED
@@ -55,11 +55,11 @@ class TestBenchmarkIPS < Minitest::Test
|
|
55
55
|
|
56
56
|
assert_equal "sleep 0.25", rep1.label
|
57
57
|
assert_equal 4, rep1.iterations
|
58
|
-
assert_in_delta 4.0, rep1.
|
58
|
+
assert_in_delta 4.0, rep1.stats.central_tendency, 0.2
|
59
59
|
|
60
60
|
assert_equal "sleep 0.05", rep2.label
|
61
61
|
assert_in_delta 20.0, rep2.iterations.to_f, 1.0
|
62
|
-
assert_in_delta 20.0, rep2.
|
62
|
+
assert_in_delta 20.0, rep2.stats.central_tendency, 2.0
|
63
63
|
end
|
64
64
|
|
65
65
|
def test_ips_alternate_config
|
@@ -73,7 +73,7 @@ class TestBenchmarkIPS < Minitest::Test
|
|
73
73
|
|
74
74
|
assert_equal "sleep 0.25", rep.label
|
75
75
|
assert_equal 4, rep.iterations
|
76
|
-
assert_in_delta 4.0, rep.
|
76
|
+
assert_in_delta 4.0, rep.stats.central_tendency, 0.4
|
77
77
|
end
|
78
78
|
|
79
79
|
def test_ips_old_config
|
@@ -85,7 +85,7 @@ class TestBenchmarkIPS < Minitest::Test
|
|
85
85
|
|
86
86
|
assert_equal "sleep 0.25", rep.label
|
87
87
|
assert_equal 4, rep.iterations
|
88
|
-
assert_in_delta 4.0, rep.
|
88
|
+
assert_in_delta 4.0, rep.stats.central_tendency, 0.2
|
89
89
|
end
|
90
90
|
|
91
91
|
def test_ips_config_suite
|
@@ -112,7 +112,7 @@ class TestBenchmarkIPS < Minitest::Test
|
|
112
112
|
|
113
113
|
assert_equal "sleep 0.25", rep.label
|
114
114
|
assert_equal 4*5, rep.iterations
|
115
|
-
assert_in_delta 4.0, rep.
|
115
|
+
assert_in_delta 4.0, rep.stats.central_tendency, 0.2
|
116
116
|
end
|
117
117
|
|
118
118
|
def test_ips_report_using_symbol
|
@@ -124,7 +124,7 @@ class TestBenchmarkIPS < Minitest::Test
|
|
124
124
|
|
125
125
|
assert_equal :sleep_a_quarter_second, rep.label
|
126
126
|
assert_equal 4*5, rep.iterations
|
127
|
-
assert_in_delta 4.0, rep.
|
127
|
+
assert_in_delta 4.0, rep.stats.central_tendency, 0.2
|
128
128
|
end
|
129
129
|
|
130
130
|
def test_ips_default_data
|
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.
|
4
|
+
version: 2.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Evan Phoenix
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '5.
|
19
|
+
version: '5.9'
|
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.
|
26
|
+
version: '5.9'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|