rbench

What is RBench?

Library for generating nice ruby-benchmarks in several formats. Only text-output is available atm.

Heavily inspired by benchwarmer. Much love.

Usage

require “rubygems” require “rbench”

# Choose how many times you want to repeat each benchmark. # This can be overridden on specific reports, if needed. TIMES = 100_000

# A relatively simple benchmark: RBench.run(TIMES) do

column :one
column :two

report "Squeezing with #squeeze" do
  one { "abc//def//ghi//jkl".squeeze("/") }
  two { "abc///def///ghi///jkl".squeeze("/") }
end

report "Squeezing with #gsub" do
  one { "abc//def//ghi//jkl".gsub(/\/+/, "/") }
  two { "abc///def///ghi///jkl".gsub(/\/+/, "/") }
end

report "Splitting with #split" do
  one { "aaa/aaa/aaa.bbb.ccc.ddd".split(".") }
  two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".split(".") }
end

report "Splitting with #match" do
  one { "aaa/aaa/aaa.bbb.ccc.ddd".match(/\.([^\.]*)$/) }
  two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".match(/\.([^\.]*)$/) }
end

end

# The benchmark above will output the following:

ONE |     TWO |

Squeezing with #squeeze 0.122 | 0.118 | Squeezing with #gsub 0.274 | 0.271 | Splitting with #split 0.349 | 0.394 | Splitting with #match 0.238 | 0.291 |

# Now onto a benchmark that utilizes a some more stiff. RBench.run(TIMES) do

format :width => 65

column :times
column :one,  :title => "#1"
column :two,  :title => "#2"
column :diff, :title => "#1/#2", :compare => [:one,:two]

group "Squeezing" do
  report "with #squeeze" do
    one { "abc//def//ghi//jkl".squeeze("/") }
    two { "abc///def///ghi///jkl".squeeze("/") }
  end
  report "with #gsub" do
    one { "abc//def//ghi//jkl".gsub(/\/+/, "/") }
    two { "abc///def///ghi///jkl".gsub(/\/+/, "/") }
  end

  summary "all methods (totals)"
end

group "Splitting" do
  report "with #split" do
    one { "aaa/aaa/aaa.bbb.ccc.ddd".split(".") }
    two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".split(".") }
  end
  report "with #match", TIMES / 100 do
    one { "aaa/aaa/aaa.bbb.ccc.ddd".match(/\.([^\.]*)$/) }
    two { "aaa//aaa//aaa.bbb.ccc.ddd.eee".match(/\.([^\.]*)$/) }
  end
end

end

# The benchmark above will output the following:

|      #1 |      #2 |   #1/#2 |

–Squeezing—————————————————— with #squeeze x100000 | 0.122 | 0.117 | 1.04x | with #gsub x100000 | 0.267 | 0.279 | 0.96x | all methods (totals) | 0.390 | 0.396 | 0.98x | –Splitting—————————————————— with #split x100000 | 0.341 | 0.394 | 0.87x | with #match x1000 | 0.002 | 0.003 | 0.82x |