Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Library for generating nice ruby-benchmarks
Ruby
branch: master

This branch is 2 commits ahead, 6 commits behind somebee:master

Fetching latest commit…

Cannot retrieve the latest commit at this 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 |


Something went wrong with that request. Please try again.