From 4870feb31a6625dcbf8817ccf16294bb3f3737e1 Mon Sep 17 00:00:00 2001 From: naruse Date: Tue, 28 Jun 2011 06:09:46 +0000 Subject: * 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 --- test/benchmark/test_benchmark.rb | 79 +++++++++++++++++++--------------------- 1 file changed, 38 insertions(+), 41 deletions(-) (limited to 'test/benchmark') diff --git a/test/benchmark/test_benchmark.rb b/test/benchmark/test_benchmark.rb index b34884fdc6..801da47dae 100644 --- a/test/benchmark/test_benchmark.rb +++ b/test/benchmark/test_benchmark.rb @@ -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 = <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 -- cgit v1.2.3