mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/benchmark.rb: merge eregon/benchmark.
https://github.com/eregon/ruby/tree/benchmark patched by Benoit Daloze. [ruby-core:37593] [Bug #4940] * lib/benchmark (Benchmark#bmbm): bmbm should be consistent with bm for the return value. * test/benchmark: remove preemptive test instead of skipping I removed the preemptive test I wrote for Feature #4197. I'll add it back when the implementation will be able to satisfy it. * lib/benchmark (Benchmark#bmbm): remove useless explicit call, #format is an alias of #to_s test/benchmark: add a test for format of long time. * lib/benchmark: fix label width: always add 1 to ensure there is a space delimiter even with times over 100s When I asked for Feature #4197, I wanted to make delimiting spaces consistent for #bm and #bmbm. But with times over 100s, the output contains no space between the label and the first time (user). Now both ensure there is always a space, even if that means 3 spaces with times under 10s (because it is formatted as %10.6f) * test/benchmark: let labels be a constant lib/benchmark (Benchmark#realtime): avoid creating an unused Proc lib/benchmark (Benchmark#benchmark): use ensure clause to restore STDOUT.sync, as in #bmbm git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32269 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
565336acca
commit
4870feb31a
3 changed files with 74 additions and 44 deletions
31
ChangeLog
31
ChangeLog
|
@ -1,3 +1,34 @@
|
|||
Tue Jun 28 15:09:21 2011 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* lib/benchmark.rb: merge eregon/benchmark.
|
||||
https://github.com/eregon/ruby/tree/benchmark
|
||||
patched by Benoit Daloze. [ruby-core:37593] [Bug #4940]
|
||||
|
||||
* lib/benchmark (Benchmark#bmbm): bmbm should be consistent with bm
|
||||
for the return value.
|
||||
|
||||
* test/benchmark: remove preemptive test instead of skipping
|
||||
I removed the preemptive test I wrote for Feature #4197.
|
||||
I'll add it back when the implementation will be able to satisfy it.
|
||||
|
||||
* lib/benchmark (Benchmark#bmbm): remove useless explicit call,
|
||||
#format is an alias of #to_s test/benchmark: add a test for
|
||||
format of long time.
|
||||
|
||||
* lib/benchmark: fix label width: always add 1 to ensure there is a
|
||||
space delimiter even with times over 100s
|
||||
When I asked for Feature #4197, I wanted to make delimiting spaces
|
||||
consistent for #bm and #bmbm.
|
||||
But with times over 100s, the output contains no space between the
|
||||
label and the first time (user).
|
||||
Now both ensure there is always a space, even if that means 3 spaces
|
||||
with times under 10s (because it is formatted as %10.6f)
|
||||
|
||||
* test/benchmark: let labels be a constant
|
||||
lib/benchmark (Benchmark#realtime): avoid creating an unused Proc
|
||||
lib/benchmark (Benchmark#benchmark): use ensure clause to restore
|
||||
STDOUT.sync, as in #bmbm
|
||||
|
||||
Tue Jun 28 13:41:51 2011 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||
|
||||
* thread_win32.c (native_stop_timer_thread): fixed commit miss of
|
||||
|
|
|
@ -167,6 +167,7 @@ module Benchmark
|
|||
sync = STDOUT.sync
|
||||
STDOUT.sync = true
|
||||
label_width ||= 0
|
||||
label_width += 1
|
||||
format ||= FORMAT
|
||||
print ' '*label_width + caption
|
||||
report = Report.new(label_width, format)
|
||||
|
@ -174,8 +175,9 @@ module Benchmark
|
|||
Array === results and results.grep(Tms).each {|t|
|
||||
print((labels.shift || t.label || "").ljust(label_width), t.format(format))
|
||||
}
|
||||
STDOUT.sync = sync
|
||||
report.list
|
||||
ensure
|
||||
STDOUT.sync = sync unless sync.nil?
|
||||
end
|
||||
|
||||
|
||||
|
@ -244,7 +246,7 @@ module Benchmark
|
|||
def bmbm(width = 0, &blk) # :yield: job
|
||||
job = Job.new(width)
|
||||
yield(job)
|
||||
width = job.width
|
||||
width = job.width + 1
|
||||
sync = STDOUT.sync
|
||||
STDOUT.sync = true
|
||||
|
||||
|
@ -263,7 +265,7 @@ module Benchmark
|
|||
job.list.map { |label,item|
|
||||
GC.start
|
||||
print label.ljust(width)
|
||||
Benchmark.measure(&item).tap { |res| print res.format }
|
||||
Benchmark.measure(label, &item).tap { |res| print res }
|
||||
}
|
||||
ensure
|
||||
STDOUT.sync = sync unless sync.nil?
|
||||
|
@ -288,7 +290,7 @@ module Benchmark
|
|||
#
|
||||
# Returns the elapsed real time used to execute the given block.
|
||||
#
|
||||
def realtime(&blk) # :yield:
|
||||
def realtime # :yield:
|
||||
r0 = Time.now
|
||||
yield
|
||||
Time.now - r0
|
||||
|
|
|
@ -19,16 +19,14 @@ describe Benchmark do
|
|||
x.report { 1.upto(n) do ; '1'; end }
|
||||
end
|
||||
|
||||
def labels
|
||||
%w[first second third]
|
||||
end
|
||||
LABELS = %w[first second third]
|
||||
|
||||
def bench(type = :bm, *args, &block)
|
||||
if block
|
||||
Benchmark.send(type, *args, &block)
|
||||
else
|
||||
Benchmark.send(type, *args) do |x|
|
||||
labels.each { |label|
|
||||
LABELS.each { |label|
|
||||
x.report(label) {}
|
||||
}
|
||||
end
|
||||
|
@ -50,6 +48,8 @@ describe Benchmark do
|
|||
Benchmark::Tms.new(1,2,3,4,5,'label').format('%u %y %U %Y %t %r %n').must_equal \
|
||||
"1.000000 2.000000 3.000000 4.000000 10.000000 (5.000000) label"
|
||||
Benchmark::Tms.new(1).format('%u %.3f', 2).must_equal "1.000000 2.000"
|
||||
Benchmark::Tms.new(100, 150, 0, 0, 200).to_s.must_equal \
|
||||
"100.000000 150.000000 250.000000 (200.000000)\n"
|
||||
end
|
||||
|
||||
it 'wont modify the format String given' do
|
||||
|
@ -70,22 +70,19 @@ describe Benchmark do
|
|||
|
||||
describe 'bm' do
|
||||
it "returns an Array of the times with the labels" do
|
||||
capture_io do
|
||||
results = bench
|
||||
results.must_be_instance_of Array
|
||||
results.size.must_equal labels.size
|
||||
results.zip(labels).each { |tms, label|
|
||||
tms.must_be_instance_of Benchmark::Tms
|
||||
tms.label.must_equal label
|
||||
}
|
||||
[:bm, :bmbm].each do |meth|
|
||||
capture_io do
|
||||
results = bench(meth)
|
||||
results.must_be_instance_of Array
|
||||
results.size.must_equal LABELS.size
|
||||
results.zip(LABELS).each { |tms, label|
|
||||
tms.must_be_instance_of Benchmark::Tms
|
||||
tms.label.must_equal label
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
it 'correctly guess the label width even when not given' do
|
||||
skip :not_implemented
|
||||
capture_bench_output(:bm).must_equal BM_OUTPUT
|
||||
end
|
||||
|
||||
it 'correctly output when the label width is given' do
|
||||
capture_bench_output(:bm, 6).must_equal BM_OUTPUT
|
||||
end
|
||||
|
@ -130,37 +127,37 @@ describe Benchmark do
|
|||
end
|
||||
|
||||
BM_OUTPUT = <<BENCH
|
||||
user system total real
|
||||
first --time-- --time-- --time-- ( --time--)
|
||||
second --time-- --time-- --time-- ( --time--)
|
||||
third --time-- --time-- --time-- ( --time--)
|
||||
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--)
|
||||
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
|
||||
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--)
|
||||
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--)
|
||||
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
|
||||
|
|
Loading…
Add table
Reference in a new issue