benchmark-interface 0.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 +7 -0
- data/.travis.yml +39 -0
- data/Gemfile +2 -0
- data/LICENCE +7 -0
- data/README.md +237 -0
- data/benchmark-interface.gemspec +20 -0
- data/bin/benchmark +15 -0
- data/examples/bench9000.rb +23 -0
- data/examples/bench9000micro.rb +31 -0
- data/examples/benchmark.rb +40 -0
- data/examples/bips.rb +34 -0
- data/examples/clamp.rb +17 -0
- data/examples/interface.rb +13 -0
- data/examples/long.rb +9 -0
- data/examples/mri.rb +15 -0
- data/examples/perfer.rb +25 -0
- data/examples/rbench.rb +46 -0
- data/examples/readme.rb +12 -0
- data/examples/script.rb +14 -0
- data/lib/benchmark-interface.rb +40 -0
- data/lib/benchmark-interface/backends/bench9000.rb +87 -0
- data/lib/benchmark-interface/backends/benchmark.rb +68 -0
- data/lib/benchmark-interface/backends/bips.rb +49 -0
- data/lib/benchmark-interface/backends/simple.rb +38 -0
- data/lib/benchmark-interface/benchmark-set.rb +85 -0
- data/lib/benchmark-interface/benchmark.rb +72 -0
- data/lib/benchmark-interface/frontends/bench9000.rb +21 -0
- data/lib/benchmark-interface/frontends/bench9000micro.rb +19 -0
- data/lib/benchmark-interface/frontends/benchmark.rb +50 -0
- data/lib/benchmark-interface/frontends/bips.rb +40 -0
- data/lib/benchmark-interface/frontends/mri.rb +84 -0
- data/lib/benchmark-interface/frontends/perfer.rb +27 -0
- data/lib/benchmark-interface/frontends/rbench.rb +64 -0
- data/lib/benchmark-interface/require.rb +38 -0
- data/lib/benchmark-interface/run.rb +111 -0
- data/lib/benchmark-interface/version.rb +13 -0
- data/tests/expected/bench9000-bips.txt +8 -0
- data/tests/expected/bench9000-bm.txt +2 -0
- data/tests/expected/bench9000-bmbm.txt +2 -0
- data/tests/expected/bench9000-simple.txt +2 -0
- data/tests/expected/bench9000micro-bips.txt +8 -0
- data/tests/expected/bench9000micro-bm.txt +2 -0
- data/tests/expected/bench9000micro-bmbm.txt +2 -0
- data/tests/expected/bench9000micro-simple.txt +2 -0
- data/tests/expected/benchmark-bips.txt +72 -0
- data/tests/expected/benchmark-bm.txt +12 -0
- data/tests/expected/benchmark-bmbm.txt +12 -0
- data/tests/expected/benchmark-simple.txt +22 -0
- data/tests/expected/bips-bips.txt +2 -0
- data/tests/expected/bips-bm.txt +7 -0
- data/tests/expected/bips-bmbm.txt +7 -0
- data/tests/expected/bips-simple.txt +11 -0
- data/tests/expected/interface-bips.txt +24 -0
- data/tests/expected/interface-bm.txt +4 -0
- data/tests/expected/interface-bmbm.txt +4 -0
- data/tests/expected/interface-simple.txt +6 -0
- data/tests/expected/long-bips.txt +9 -0
- data/tests/expected/long-bm.txt +2 -0
- data/tests/expected/long-bmbm.txt +2 -0
- data/tests/expected/long-simple.txt +2 -0
- data/tests/expected/mri-bips.txt +9 -0
- data/tests/expected/mri-bm.txt +2 -0
- data/tests/expected/mri-bmbm.txt +2 -0
- data/tests/expected/mri-simple.txt +2 -0
- data/tests/expected/perfer-bips.txt +20 -0
- data/tests/expected/perfer-bm.txt +4 -0
- data/tests/expected/perfer-bmbm.txt +4 -0
- data/tests/expected/perfer-simple.txt +5 -0
- data/tests/expected/rbench-bips.txt +42 -0
- data/tests/expected/rbench-bm.txt +7 -0
- data/tests/expected/rbench-bmbm.txt +7 -0
- data/tests/expected/rbench-simple.txt +12 -0
- data/tests/expected/readme-bips.txt +18 -0
- data/tests/expected/readme-bm.txt +3 -0
- data/tests/expected/readme-bmbm.txt +3 -0
- data/tests/expected/readme-simple.txt +4 -0
- data/tests/expected/script-bips.txt +18 -0
- data/tests/expected/script-bm.txt +3 -0
- data/tests/expected/script-bmbm.txt +3 -0
- data/tests/expected/script-simple.txt +4 -0
- data/tests/rewritten/mri.rb +15 -0
- data/tests/tests.rb +73 -0
- data/tests/tools/squash.rb +63 -0
- metadata +130 -0
data/examples/clamp.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
def clamp_a(min, value, max)
|
10
|
+
[min, value, max].sort[1]
|
11
|
+
end
|
12
|
+
|
13
|
+
def clamp_b(min, value, max)
|
14
|
+
return min if value < min
|
15
|
+
return max if value > max
|
16
|
+
value
|
17
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
require File.expand_path('clamp', File.dirname(__FILE__))
|
10
|
+
|
11
|
+
benchmark { clamp_a(10, 40, 90) }
|
12
|
+
benchmark('clamp_a') { clamp_a(10, 40, 90) }
|
13
|
+
benchmark('clamp_b') { clamp_b(10, 40, 90) }
|
data/examples/long.rb
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
benchmark('sleep') { sleep 3 }
|
data/examples/mri.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
array = [1, 2, 3]
|
10
|
+
|
11
|
+
i = 0
|
12
|
+
while i < 30_000_000
|
13
|
+
i += 1
|
14
|
+
array.length
|
15
|
+
end
|
data/examples/perfer.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
require 'perfer'
|
10
|
+
|
11
|
+
require File.expand_path('clamp', File.dirname(__FILE__))
|
12
|
+
|
13
|
+
Perfer.session 'clamp' do |s|
|
14
|
+
s.iterate 'clamp_a' do |n|
|
15
|
+
n.times do
|
16
|
+
clamp_a(10, 40, 90)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
s.iterate 'clamp_b' do |n|
|
21
|
+
n.times do
|
22
|
+
clamp_b(10, 40, 90)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/examples/rbench.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
require 'rbench'
|
10
|
+
|
11
|
+
require File.expand_path('clamp', File.dirname(__FILE__))
|
12
|
+
|
13
|
+
RBench.run(10_000) do
|
14
|
+
format :width => 65
|
15
|
+
|
16
|
+
group 'clamp1' do
|
17
|
+
report 'clamp_a1' do
|
18
|
+
clamp_a(10, 40, 90)
|
19
|
+
end
|
20
|
+
report 'clamp_b1' do
|
21
|
+
clamp_a(10, 40, 90)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
RBench.run(10_000) do
|
27
|
+
format :width => 65
|
28
|
+
|
29
|
+
column :times
|
30
|
+
column :one, :title => "#1"
|
31
|
+
column :two, :title => "#2"
|
32
|
+
column :diff, :title => "#1/#2", :compare => [:one,:two]
|
33
|
+
|
34
|
+
group 'clamp2' do
|
35
|
+
report 'clamp_a2' do
|
36
|
+
one { clamp_a(10, 40, 90) }
|
37
|
+
two { clamp_a(10, 40, 90) }
|
38
|
+
end
|
39
|
+
report 'clamp_b2' do
|
40
|
+
one { clamp_a(10, 40, 90) }
|
41
|
+
two { clamp_a(10, 40, 90) }
|
42
|
+
end
|
43
|
+
|
44
|
+
summary 'all methods (totals)'
|
45
|
+
end
|
46
|
+
end
|
data/examples/readme.rb
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
require 'benchmark-interface'
|
10
|
+
|
11
|
+
benchmark('mul') { '14 * 14 * 14' }
|
12
|
+
benchmark('pow') { '14 ** 3' }
|
data/examples/script.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
require 'benchmark-interface'
|
10
|
+
|
11
|
+
require File.expand_path('clamp', File.dirname(__FILE__))
|
12
|
+
|
13
|
+
benchmark('clamp_a') { clamp_a(10, 40, 90) }
|
14
|
+
benchmark('clamp_b') { clamp_b(10, 40, 90) }
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
require 'benchmark-interface/version'
|
10
|
+
require 'benchmark-interface/benchmark'
|
11
|
+
require 'benchmark-interface/benchmark-set'
|
12
|
+
require 'benchmark-interface/frontends/mri'
|
13
|
+
require 'benchmark-interface/backends/simple'
|
14
|
+
require 'benchmark-interface/backends/benchmark'
|
15
|
+
require 'benchmark-interface/backends/bips'
|
16
|
+
require 'benchmark-interface/backends/bench9000'
|
17
|
+
require 'benchmark-interface/require'
|
18
|
+
require 'benchmark-interface/run'
|
19
|
+
|
20
|
+
module BenchmarkInterface
|
21
|
+
|
22
|
+
def self.benchmark(name=nil, &block)
|
23
|
+
BenchmarkInterface::BenchmarkSet.current.register name, block
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def benchmark(name=nil, &block)
|
29
|
+
BenchmarkInterface.benchmark name, &block
|
30
|
+
end
|
31
|
+
|
32
|
+
if $PROGRAM_NAME.split('/').last != 'benchmark'
|
33
|
+
set = BenchmarkInterface::BenchmarkSet.new
|
34
|
+
backend = BenchmarkInterface::Backends::Bips
|
35
|
+
|
36
|
+
at_exit do
|
37
|
+
set.prepare
|
38
|
+
backend.run set, set.benchmarks, {}
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
module BenchmarkInterface
|
10
|
+
module Backends
|
11
|
+
module Bench9000
|
12
|
+
|
13
|
+
MIN_SAMPLING_TIME = 0.1 # seconds
|
14
|
+
|
15
|
+
def self.run(benchmark_set, names, options)
|
16
|
+
unless names.size == 1
|
17
|
+
abort 'The bench9000 backend only works when you run just one benchmark at a time - specify the name on the command line'
|
18
|
+
end
|
19
|
+
|
20
|
+
unless options['--no-scale']
|
21
|
+
min_time = benchmark_set.benchmarks.map(&:basic_iteration_time).min
|
22
|
+
|
23
|
+
if min_time < MIN_SAMPLING_TIME
|
24
|
+
short_iterations = true
|
25
|
+
samples = (MIN_SAMPLING_TIME / min_time / MIN_SAMPLING_TIME).to_i
|
26
|
+
puts "These are short benchmarks - we're running each #{samples} times so they take about a second and using the micro harness"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
benchmark = benchmark_set.benchmark(names.first)
|
31
|
+
block = benchmark.block
|
32
|
+
|
33
|
+
Object.instance_eval do
|
34
|
+
if short_iterations
|
35
|
+
define_method(:micro_harness_input) do
|
36
|
+
nil
|
37
|
+
end
|
38
|
+
|
39
|
+
define_method(:micro_harness_iterations) do
|
40
|
+
samples
|
41
|
+
end
|
42
|
+
|
43
|
+
define_method(:micro_harness_sample) do |input|
|
44
|
+
block.call
|
45
|
+
end
|
46
|
+
|
47
|
+
define_method(:micro_harness_expected) do
|
48
|
+
raise 'not expecting this to be called, as we\'ve patched harness_verify'
|
49
|
+
end
|
50
|
+
else
|
51
|
+
define_method(:harness_input) do
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
|
55
|
+
define_method(:harness_sample) do |input|
|
56
|
+
block.call
|
57
|
+
end
|
58
|
+
|
59
|
+
define_method(:harness_verify) do |output|
|
60
|
+
true
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
@loading_real = true
|
67
|
+
|
68
|
+
if short_iterations
|
69
|
+
benchmark_interface_original_require 'bench9000/micro-harness'
|
70
|
+
|
71
|
+
Object.instance_eval do
|
72
|
+
define_method(:harness_verify) do |output|
|
73
|
+
true
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
benchmark_interface_original_require 'bench9000/harness'
|
79
|
+
end
|
80
|
+
|
81
|
+
def self.loading_real?
|
82
|
+
@loading_real
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
module BenchmarkInterface
|
10
|
+
module Backends
|
11
|
+
module Bm
|
12
|
+
|
13
|
+
MIN_SAMPLING_TIME = 0.1 # seconds
|
14
|
+
|
15
|
+
def self.run(benchmark_set, names, options)
|
16
|
+
# If we don't remove these we'll get a warning when we load the real
|
17
|
+
# implementation.
|
18
|
+
|
19
|
+
::Benchmark.send(:remove_const, :CAPTION) if defined?(::Benchmark::CAPTION)
|
20
|
+
::Benchmark.send(:remove_const, :FORMAT) if defined?(::Benchmark::FORMAT)
|
21
|
+
|
22
|
+
benchmark_interface_original_require 'benchmark'
|
23
|
+
|
24
|
+
unless options['--no-scale']
|
25
|
+
min_time = benchmark_set.benchmarks.map(&:basic_iteration_time).min
|
26
|
+
|
27
|
+
if min_time < MIN_SAMPLING_TIME
|
28
|
+
short_iterations = true
|
29
|
+
samples = (MIN_SAMPLING_TIME / min_time / MIN_SAMPLING_TIME).to_i
|
30
|
+
puts "These are short benchmarks - we're running each #{samples} times so they take about a second"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
label_width = benchmark_set.benchmarks(names).map(&:name).map(&:size).max
|
35
|
+
|
36
|
+
block = Proc.new do |x|
|
37
|
+
benchmark_set.benchmarks(names).each do |benchmark|
|
38
|
+
block = benchmark.block
|
39
|
+
if short_iterations
|
40
|
+
x.report(benchmark.name) do
|
41
|
+
samples.times do
|
42
|
+
block.call
|
43
|
+
end
|
44
|
+
end
|
45
|
+
else
|
46
|
+
x.report(benchmark.name, &benchmark.block)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if self == BmBm
|
52
|
+
::Benchmark.bmbm label_width, &block
|
53
|
+
else
|
54
|
+
::Benchmark.bm label_width, &block
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
module BmBm
|
61
|
+
|
62
|
+
def self.run(benchmark_set, names, options)
|
63
|
+
Bm.run benchmark_set, names, options
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
module BenchmarkInterface
|
10
|
+
module Backends
|
11
|
+
module Bips
|
12
|
+
|
13
|
+
LONG_ITERATION_THRESHOLD = 0.1 # seconds
|
14
|
+
|
15
|
+
def self.run(benchmark_set, names, options)
|
16
|
+
Kernel.instance_eval do
|
17
|
+
alias_method :require, :benchmark_interface_original_require
|
18
|
+
require 'rubygems'
|
19
|
+
alias_method :benchmark_interface_original_require, :require
|
20
|
+
end
|
21
|
+
|
22
|
+
benchmark_interface_original_require 'benchmark/ips'
|
23
|
+
|
24
|
+
unless options['--no-scale']
|
25
|
+
if benchmark_set.benchmarks.map(&:basic_iteration_time).max > LONG_ITERATION_THRESHOLD
|
26
|
+
long_iterations = true
|
27
|
+
puts "These are long benchmarks - we're increasing warmup and sample time"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
::Benchmark.ips do |x|
|
32
|
+
x.iterations = 3
|
33
|
+
|
34
|
+
if long_iterations
|
35
|
+
x.time = 10
|
36
|
+
x.warmup = 10
|
37
|
+
end
|
38
|
+
|
39
|
+
benchmark_set.benchmarks(names).each do |benchmark|
|
40
|
+
x.report benchmark.name, &benchmark.block
|
41
|
+
end
|
42
|
+
|
43
|
+
x.compare!
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# Copyright (c) 2016 Oracle and/or its affiliates. All rights reserved. This
|
2
|
+
# code is released under a tri EPL/GPL/LGPL license. You can use it,
|
3
|
+
# redistribute it and/or modify it under the terms of the:
|
4
|
+
#
|
5
|
+
# Eclipse Public License version 1.0
|
6
|
+
# GNU General Public License version 2
|
7
|
+
# GNU Lesser General Public License version 2.1
|
8
|
+
|
9
|
+
module BenchmarkInterface
|
10
|
+
module Backends
|
11
|
+
module Simple
|
12
|
+
|
13
|
+
def self.run(benchmark_set, names, options)
|
14
|
+
loop_time = options['--time']
|
15
|
+
|
16
|
+
benchmark_set.benchmarks(names).each do |benchmark|
|
17
|
+
puts benchmark.name
|
18
|
+
block = benchmark.block
|
19
|
+
|
20
|
+
start_time = Time.now
|
21
|
+
|
22
|
+
while Time.now - start_time < loop_time
|
23
|
+
start_iteration_time = Time.now
|
24
|
+
iterations = 0
|
25
|
+
while Time.now - start_iteration_time < 1
|
26
|
+
block.call
|
27
|
+
iterations += 1
|
28
|
+
end
|
29
|
+
iteration_time = Time.now - start_iteration_time
|
30
|
+
iterations *= benchmark_set.iterations
|
31
|
+
puts iterations / iteration_time
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|