Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
## Managed Open Source blog code # http://blog.managedopensource.com # http://blog.managedopensource.com/2008/02/02/ruby-benchmark-options-passing-1.8-to-1.9 ## Ruby benchmark code require 'benchmark' def ops_delete(ops={}) a = ops.delete(:a) || 11 b = ops.delete(:b) || 22 c = ops.delete(:c) || 33 d = ops.delete(:d) || 44 end def ops_merge(ops={}) ops = {:a => 11, :b => 22, :c => 33, :d => 44}.merge(ops) a = ops[:a] b = ops[:b] c = ops[:c] d = ops[:d] end def ops_or(ops={}) a = ops[:a] || 11 b = ops[:b] || 22 c = ops[:c] || 33 d = ops[:d] || 44 end n = 100000 puts "With no option values passed" Benchmark.bmbm(7) do |x| x.report("delete:") { n.times do ops_delete; end } x.report("merge:") { n.times do ops_merge; end } x.report("or_nil:") { n.times do ops_or; end } end puts puts "With some option values passed" Benchmark.bmbm(7) do |x| x.report("delete:") { n.times do ops_delete(:a => 5, :c => 2); end } x.report("merge:") { n.times do ops_merge(:a => 5, :c => 2); end } x.report("or_nil:") { n.times do ops_or(:a => 5, :c => 2); end } end puts puts "With all option values passed" Benchmark.bmbm(7) do |x| x.report("delete:") { n.times do ops_delete(:a => 5, :b => 1, :c => 2, :d => 4); end } x.report("merge:") { n.times do ops_merge(:a => 5, :b => 1, :c => 2, :d => 4); end } x.report("or_nil:") { n.times do ops_or(:a => 5, :b => 1, :c => 2, :d => 4); end } end
This paste will be private.
From the Design Piracy series on my blog: