Skip to content

somebee/rbench

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 |


About

Library for generating nice ruby-benchmarks

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages