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 |