Library for generating nice ruby-benchmarks
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
lib
spec
.gitignore
LICENSE
README
Rakefile
TODO
rbench.gemspec

README

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 |