rbench
rbench copied to clipboard
Library for generating nice ruby-benchmarks
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 |