Module: Ruport::Bench

Defined in:
lib/ruport/util/bench.rb

Overview

A strange little benchmarking utility that uses Ruport to output the results of benchmark suites. This is primarily an internal developers tool for Ruport, but you might find it interesting or useful.

Example:

require "ruport"  
require "ruport/util/bench"
include Ruport::Bench

class MyFormat < Ruport::Formatter;
   renders :nothing, :for => Ruport::Renderer::Row
end

record = Ruport::Data::Record.new [1,2,3]

bench_suite do
  N = 10000   
  bench_case("as(:nothing)",N) { record.as(:nothing) }
  bench_case("to_nothing",N) { record.to_nothing }
end 

# output

Running Bench Suite...
> as(:nothing)... ok[2.12905] 
> to_nothing... ok[2.00278] 
+--------------------------------------+
|     name     | iterations | realtime |
+--------------------------------------+
| as(:nothing) |      10000 | 2.12905  |
| to_nothing   |      10000 | 2.00278  |
+--------------------------------------+
Suite run time: 4.13183

Instance Method Summary collapse

Instance Method Details

#bench_case(name, n, &block) ⇒ Object


40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/ruport/util/bench.rb', line 40

def bench_case(name,n,&block)
  2.times { 
    @run = 0
    n.times do
      @bench_prepare.call if @bench_prepare
      @run += Benchmark.realtime { block.call } 
    end
  }     
  @bench_results << { "name" => name, "iterations" => n, 
                      "realtime" => (time = sprintf("%.5f",@run)) } 
  STDERR.puts "> #{name}... ok[#{time}] "
  @bench_prepare = nil
end

#bench_prepare(&block) ⇒ Object


54
55
56
# File 'lib/ruport/util/bench.rb', line 54

def bench_prepare(&block)
  @bench_prepare = block
end

#bench_suite(&block) ⇒ Object


58
59
60
61
62
63
64
# File 'lib/ruport/util/bench.rb', line 58

def bench_suite(&block)
  STDERR.puts "Running Bench Suite..."
  @bench_results = Table(%w[name iterations realtime]) 
  block.call   
  puts @bench_results   
  puts "Suite run time: " << sprintf("%.5f",@bench_results.sigma("realtime"))
end