зеркало из https://github.com/github/ruby.git
* lib/benchmark.rb: Fix Benchmark.benchmark output with an empty
caption. patched by Benoit Daloze. [ruby-core:45719] [Bug #6610] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36427 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
9844bc02a0
Коммит
39b33658e3
|
@ -1,3 +1,8 @@
|
||||||
|
Wed Jul 18 12:55:54 2012 NARUSE, Yui <naruse@ruby-lang.org>
|
||||||
|
|
||||||
|
* lib/benchmark.rb: Fix Benchmark.benchmark output with an empty
|
||||||
|
caption. patched by Benoit Daloze. [ruby-core:45719] [Bug #6610]
|
||||||
|
|
||||||
Wed Jul 18 10:00:54 2012 Eric Hodel <drbrain@segment7.net>
|
Wed Jul 18 10:00:54 2012 Eric Hodel <drbrain@segment7.net>
|
||||||
|
|
||||||
* lib/debug.rb: Added toplevel documentation. Based on patch by Oscar
|
* lib/debug.rb: Added toplevel documentation. Based on patch by Oscar
|
||||||
|
|
|
@ -169,7 +169,7 @@ module Benchmark
|
||||||
label_width ||= 0
|
label_width ||= 0
|
||||||
label_width += 1
|
label_width += 1
|
||||||
format ||= FORMAT
|
format ||= FORMAT
|
||||||
print ' '*label_width + caption
|
print ' '*label_width + caption unless caption.empty?
|
||||||
report = Report.new(label_width, format)
|
report = Report.new(label_width, format)
|
||||||
results = yield(report)
|
results = yield(report)
|
||||||
Array === results and results.grep(Tms).each {|t|
|
Array === results and results.grep(Tms).each {|t|
|
||||||
|
@ -284,7 +284,7 @@ module Benchmark
|
||||||
t1.stime - t0.stime,
|
t1.stime - t0.stime,
|
||||||
t1.cutime - t0.cutime,
|
t1.cutime - t0.cutime,
|
||||||
t1.cstime - t0.cstime,
|
t1.cstime - t0.cstime,
|
||||||
r1.to_f - r0.to_f,
|
r1 - r0,
|
||||||
label)
|
label)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -485,13 +485,13 @@ module Benchmark
|
||||||
#
|
#
|
||||||
def format(format = nil, *args)
|
def format(format = nil, *args)
|
||||||
str = (format || FORMAT).dup
|
str = (format || FORMAT).dup
|
||||||
str.gsub!(/(%[-+\.\d]*)n/) { "#{$1}s" % label }
|
str.gsub!(/(%[-+.\d]*)n/) { "#{$1}s" % label }
|
||||||
str.gsub!(/(%[-+\.\d]*)u/) { "#{$1}f" % utime }
|
str.gsub!(/(%[-+.\d]*)u/) { "#{$1}f" % utime }
|
||||||
str.gsub!(/(%[-+\.\d]*)y/) { "#{$1}f" % stime }
|
str.gsub!(/(%[-+.\d]*)y/) { "#{$1}f" % stime }
|
||||||
str.gsub!(/(%[-+\.\d]*)U/) { "#{$1}f" % cutime }
|
str.gsub!(/(%[-+.\d]*)U/) { "#{$1}f" % cutime }
|
||||||
str.gsub!(/(%[-+\.\d]*)Y/) { "#{$1}f" % cstime }
|
str.gsub!(/(%[-+.\d]*)Y/) { "#{$1}f" % cstime }
|
||||||
str.gsub!(/(%[-+\.\d]*)t/) { "#{$1}f" % total }
|
str.gsub!(/(%[-+.\d]*)t/) { "#{$1}f" % total }
|
||||||
str.gsub!(/(%[-+\.\d]*)r/) { "(#{$1}f)" % real }
|
str.gsub!(/(%[-+.\d]*)r/) { "(#{$1}f)" % real }
|
||||||
format ? str % args : str
|
format ? str % args : str
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -554,7 +554,7 @@ if __FILE__ == $0
|
||||||
|
|
||||||
n = ARGV[0].to_i.nonzero? || 50000
|
n = ARGV[0].to_i.nonzero? || 50000
|
||||||
puts %Q([#{n} times iterations of `a = "1"'])
|
puts %Q([#{n} times iterations of `a = "1"'])
|
||||||
benchmark(" " + CAPTION, 7, FORMAT) do |x|
|
benchmark(CAPTION, 7, FORMAT) do |x|
|
||||||
x.report("for:") {for _ in 1..n; _ = "1"; end} # Benchmark.measure
|
x.report("for:") {for _ in 1..n; _ = "1"; end} # Benchmark.measure
|
||||||
x.report("times:") {n.times do ; _ = "1"; end}
|
x.report("times:") {n.times do ; _ = "1"; end}
|
||||||
x.report("upto:") {1.upto(n) do ; _ = "1"; end}
|
x.report("upto:") {1.upto(n) do ; _ = "1"; end}
|
||||||
|
|
|
@ -4,7 +4,7 @@ require 'benchmark'
|
||||||
MiniTest::Unit.autorun
|
MiniTest::Unit.autorun
|
||||||
|
|
||||||
describe Benchmark do
|
describe Benchmark do
|
||||||
BENCH_FOR_TIMES_UPTO = lambda do |x|
|
bench_for_times_upto = lambda do |x|
|
||||||
n = 1000
|
n = 1000
|
||||||
tf = x.report("for:") { for _ in 1..n; '1'; end }
|
tf = x.report("for:") { for _ in 1..n; '1'; end }
|
||||||
tt = x.report("times:") { n.times do ; '1'; end }
|
tt = x.report("times:") { n.times do ; '1'; end }
|
||||||
|
@ -12,21 +12,23 @@ describe Benchmark do
|
||||||
[tf+tt+tu, (tf+tt+tu)/3]
|
[tf+tt+tu, (tf+tt+tu)/3]
|
||||||
end
|
end
|
||||||
|
|
||||||
BENCH_FOR_TIMES_UPTO_NO_LABEL = lambda do |x|
|
bench_for_times_upto_no_label = lambda do |x|
|
||||||
n = 1000
|
n = 1000
|
||||||
x.report { for _ in 1..n; '1'; end }
|
x.report { for _ in 1..n; '1'; end }
|
||||||
x.report { n.times do ; '1'; end }
|
x.report { n.times do ; '1'; end }
|
||||||
x.report { 1.upto(n) do ; '1'; end }
|
x.report { 1.upto(n) do ; '1'; end }
|
||||||
end
|
end
|
||||||
|
|
||||||
LABELS = %w[first second third]
|
def labels
|
||||||
|
%w[first second third]
|
||||||
|
end
|
||||||
|
|
||||||
def bench(type = :bm, *args, &block)
|
def bench(type = :bm, *args, &block)
|
||||||
if block
|
if block
|
||||||
Benchmark.send(type, *args, &block)
|
Benchmark.send(type, *args, &block)
|
||||||
else
|
else
|
||||||
Benchmark.send(type, *args) do |x|
|
Benchmark.send(type, *args) do |x|
|
||||||
LABELS.each { |label|
|
labels.each { |label|
|
||||||
x.report(label) {}
|
x.report(label) {}
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -59,12 +61,29 @@ describe Benchmark do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
benchmark_output_with_total_avg = <<BENCH
|
||||||
|
user system total real
|
||||||
|
for: --time-- --time-- --time-- ( --time--)
|
||||||
|
times: --time-- --time-- --time-- ( --time--)
|
||||||
|
upto: --time-- --time-- --time-- ( --time--)
|
||||||
|
>total: --time-- --time-- --time-- ( --time--)
|
||||||
|
>avg: --time-- --time-- --time-- ( --time--)
|
||||||
|
BENCH
|
||||||
|
|
||||||
describe 'benchmark' do
|
describe 'benchmark' do
|
||||||
|
it 'does not print any space if the given caption is empty' do
|
||||||
|
capture_bench_output(:benchmark).must_equal <<-BENCH
|
||||||
|
first --time-- --time-- --time-- ( --time--)
|
||||||
|
second --time-- --time-- --time-- ( --time--)
|
||||||
|
third --time-- --time-- --time-- ( --time--)
|
||||||
|
BENCH
|
||||||
|
end
|
||||||
|
|
||||||
it 'makes extra calcultations with an Array at the end of the benchmark and show the result' do
|
it 'makes extra calcultations with an Array at the end of the benchmark and show the result' do
|
||||||
capture_bench_output(:benchmark,
|
capture_bench_output(:benchmark,
|
||||||
Benchmark::CAPTION, 7,
|
Benchmark::CAPTION, 7,
|
||||||
Benchmark::FORMAT, ">total:", ">avg:",
|
Benchmark::FORMAT, ">total:", ">avg:",
|
||||||
&BENCH_FOR_TIMES_UPTO).must_equal BENCHMARK_OUTPUT_WITH_TOTAL_AVG
|
&bench_for_times_upto).must_equal benchmark_output_with_total_avg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -74,8 +93,8 @@ describe Benchmark do
|
||||||
capture_io do
|
capture_io do
|
||||||
results = bench(meth)
|
results = bench(meth)
|
||||||
results.must_be_instance_of Array
|
results.must_be_instance_of Array
|
||||||
results.size.must_equal LABELS.size
|
results.size.must_equal labels.size
|
||||||
results.zip(LABELS).each { |tms, label|
|
results.zip(labels).each { |tms, label|
|
||||||
tms.must_be_instance_of Benchmark::Tms
|
tms.must_be_instance_of Benchmark::Tms
|
||||||
tms.label.must_equal label
|
tms.label.must_equal label
|
||||||
}
|
}
|
||||||
|
@ -84,26 +103,49 @@ describe Benchmark do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'correctly output when the label width is given' do
|
it 'correctly output when the label width is given' do
|
||||||
capture_bench_output(:bm, 6).must_equal BM_OUTPUT
|
capture_bench_output(:bm, 6).must_equal <<-BENCH
|
||||||
|
user system total real
|
||||||
|
first --time-- --time-- --time-- ( --time--)
|
||||||
|
second --time-- --time-- --time-- ( --time--)
|
||||||
|
third --time-- --time-- --time-- ( --time--)
|
||||||
|
BENCH
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'correctly output when no label is given' do
|
it 'correctly output when no label is given' do
|
||||||
capture_bench_output(:bm, &BENCH_FOR_TIMES_UPTO_NO_LABEL).must_equal BM_OUTPUT_NO_LABEL
|
capture_bench_output(:bm, &bench_for_times_upto_no_label).must_equal <<-BENCH
|
||||||
|
user system total real
|
||||||
|
--time-- --time-- --time-- ( --time--)
|
||||||
|
--time-- --time-- --time-- ( --time--)
|
||||||
|
--time-- --time-- --time-- ( --time--)
|
||||||
|
BENCH
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'can make extra calcultations with an array at the end of the benchmark' do
|
it 'can make extra calcultations with an array at the end of the benchmark' do
|
||||||
capture_bench_output(:bm, 7, ">total:", ">avg:",
|
capture_bench_output(:bm, 7, ">total:", ">avg:",
|
||||||
&BENCH_FOR_TIMES_UPTO).must_equal BENCHMARK_OUTPUT_WITH_TOTAL_AVG
|
&bench_for_times_upto).must_equal benchmark_output_with_total_avg
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe 'bmbm' do
|
describe 'bmbm' do
|
||||||
|
bmbm_output = <<BENCH
|
||||||
|
Rehearsal ------------------------------------------
|
||||||
|
first --time-- --time-- --time-- ( --time--)
|
||||||
|
second --time-- --time-- --time-- ( --time--)
|
||||||
|
third --time-- --time-- --time-- ( --time--)
|
||||||
|
--------------------------------- total: --time--sec
|
||||||
|
|
||||||
|
user system total real
|
||||||
|
first --time-- --time-- --time-- ( --time--)
|
||||||
|
second --time-- --time-- --time-- ( --time--)
|
||||||
|
third --time-- --time-- --time-- ( --time--)
|
||||||
|
BENCH
|
||||||
|
|
||||||
it 'correctly guess the label width even when not given' do
|
it 'correctly guess the label width even when not given' do
|
||||||
capture_bench_output(:bmbm).must_equal BMBM_OUTPUT
|
capture_bench_output(:bmbm).must_equal bmbm_output
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'correctly output when the label width is given (bmbm ignore it, but it is a frequent mistake)' do
|
it 'correctly output when the label width is given (bmbm ignore it, but it is a frequent mistake)' do
|
||||||
capture_bench_output(:bmbm, 6).must_equal BMBM_OUTPUT
|
capture_bench_output(:bmbm, 6).must_equal bmbm_output
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -125,39 +167,3 @@ describe Benchmark do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
BM_OUTPUT = <<BENCH
|
|
||||||
user system total real
|
|
||||||
first --time-- --time-- --time-- ( --time--)
|
|
||||||
second --time-- --time-- --time-- ( --time--)
|
|
||||||
third --time-- --time-- --time-- ( --time--)
|
|
||||||
BENCH
|
|
||||||
|
|
||||||
BM_OUTPUT_NO_LABEL = <<BENCH
|
|
||||||
user system total real
|
|
||||||
--time-- --time-- --time-- ( --time--)
|
|
||||||
--time-- --time-- --time-- ( --time--)
|
|
||||||
--time-- --time-- --time-- ( --time--)
|
|
||||||
BENCH
|
|
||||||
|
|
||||||
BMBM_OUTPUT = <<BENCH
|
|
||||||
Rehearsal ------------------------------------------
|
|
||||||
first --time-- --time-- --time-- ( --time--)
|
|
||||||
second --time-- --time-- --time-- ( --time--)
|
|
||||||
third --time-- --time-- --time-- ( --time--)
|
|
||||||
--------------------------------- total: --time--sec
|
|
||||||
|
|
||||||
user system total real
|
|
||||||
first --time-- --time-- --time-- ( --time--)
|
|
||||||
second --time-- --time-- --time-- ( --time--)
|
|
||||||
third --time-- --time-- --time-- ( --time--)
|
|
||||||
BENCH
|
|
||||||
|
|
||||||
BENCHMARK_OUTPUT_WITH_TOTAL_AVG = <<BENCH
|
|
||||||
user system total real
|
|
||||||
for: --time-- --time-- --time-- ( --time--)
|
|
||||||
times: --time-- --time-- --time-- ( --time--)
|
|
||||||
upto: --time-- --time-- --time-- ( --time--)
|
|
||||||
>total: --time-- --time-- --time-- ( --time--)
|
|
||||||
>avg: --time-- --time-- --time-- ( --time--)
|
|
||||||
BENCH
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче