summaryrefslogtreecommitdiff
path: root/lib/vendor/excon/benchmarks/has_key-vs-lookup.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendor/excon/benchmarks/has_key-vs-lookup.rb')
-rw-r--r--lib/vendor/excon/benchmarks/has_key-vs-lookup.rb177
1 files changed, 177 insertions, 0 deletions
diff --git a/lib/vendor/excon/benchmarks/has_key-vs-lookup.rb b/lib/vendor/excon/benchmarks/has_key-vs-lookup.rb
new file mode 100644
index 0000000..b617c0c
--- /dev/null
+++ b/lib/vendor/excon/benchmarks/has_key-vs-lookup.rb
@@ -0,0 +1,177 @@
+# Copied from my benchmark_hell repo: github.com/sgonyea/benchmark_hell
+
+require 'benchmark'
+
+iters = 1000000
+hash = {
+ 'some_key' => 'some_val',
+ 'nil_key' => nil
+}
+
+puts 'Hash#has_key vs. Hash#[]'
+Benchmark.bmbm do |x|
+ x.report('Hash#has_key') do
+ iters.times.each do
+ hash.has_key? 'some_key'
+ end
+ end
+
+ x.report('Hash#has_key (if statement)') do
+ iters.times.each do
+ if hash.has_key?('other_key')
+ "hooray!"
+ end
+ end
+ end
+
+ x.report('Hash#has_key (non-existant)') do
+ iters.times.each do
+ hash.has_key? 'other_key'
+ end
+ end
+
+ x.report('Hash#[]') do
+ iters.times.each do
+ hash['some_key']
+ end
+ end
+
+ x.report('Hash#[] (if statement)') do
+ iters.times.each do
+ if hash['some_key']
+ "hooray!"
+ end
+ end
+ end
+
+ x.report('Hash#[] (non-existant)') do
+ iters.times.each do
+ hash['other_key']
+ end
+ end
+
+ x.report('Hash#has_key (if statement) explicit nil check') do
+ iters.times.each do
+ if hash.has_key?('nil_key') && !hash['nil_key'].nil?
+ "hooray!"
+ end
+ end
+ end
+
+
+ x.report('Hash#has_key (if statement) implicit nil check') do
+ iters.times.each do
+ if hash.has_key?('nil_key') && hash['nil_key']
+ "hooray!"
+ end
+ end
+ end
+
+ x.report('Hash#[] (if statement with nil)') do
+ iters.times.each do
+ if hash['nil_key']
+ "hooray!"
+ end
+ end
+ end
+end
+
+=begin
+
+$ rvm exec bash -c 'echo $RUBY_VERSION && ruby has_key-vs-hash\[key\].rb'
+
+jruby-1.5.6
+Hash#has_key vs. Hash#[]
+Rehearsal ---------------------------------------------------------------
+Hash#has_key 0.410000 0.000000 0.410000 ( 0.341000)
+Hash#has_key (if statement) 0.145000 0.000000 0.145000 ( 0.145000)
+Hash#has_key (non-existant) 0.116000 0.000000 0.116000 ( 0.116000)
+Hash#[] 0.189000 0.000000 0.189000 ( 0.189000)
+Hash#[] (if statement) 0.176000 0.000000 0.176000 ( 0.176000)
+Hash#[] (non-existant) 0.302000 0.000000 0.302000 ( 0.302000)
+------------------------------------------------------ total: 1.338000sec
+
+ user system total real
+Hash#has_key 0.128000 0.000000 0.128000 ( 0.128000)
+Hash#has_key (if statement) 0.128000 0.000000 0.128000 ( 0.128000)
+Hash#has_key (non-existant) 0.153000 0.000000 0.153000 ( 0.153000)
+Hash#[] 0.206000 0.000000 0.206000 ( 0.206000)
+Hash#[] (if statement) 0.182000 0.000000 0.182000 ( 0.182000)
+Hash#[] (non-existant) 0.252000 0.000000 0.252000 ( 0.252000)
+
+macruby-0.7.1
+Hash#has_key vs. Hash#[]
+Rehearsal ---------------------------------------------------------------
+Hash#has_key 2.530000 0.050000 2.580000 ( 1.917643)
+Hash#has_key (if statement) 2.590000 0.050000 2.640000 ( 1.935221)
+Hash#has_key (non-existant) 2.580000 0.050000 2.630000 ( 1.964230)
+Hash#[] 2.240000 0.040000 2.280000 ( 1.640999)
+Hash#[] (if statement) 3.620000 0.070000 3.690000 ( 2.530248)
+Hash#[] (non-existant) 2.060000 0.040000 2.100000 ( 1.473487)
+----------------------------------------------------- total: 15.920000sec
+
+ user system total real
+Hash#has_key 2.230000 0.030000 2.260000 ( 1.661843)
+Hash#has_key (if statement) 2.180000 0.040000 2.220000 ( 1.605644)
+Hash#has_key (non-existant) 2.160000 0.040000 2.200000 ( 1.582561)
+Hash#[] 2.160000 0.030000 2.190000 ( 1.581448)
+Hash#[] (if statement) 3.440000 0.070000 3.510000 ( 2.393421)
+Hash#[] (non-existant) 2.330000 0.040000 2.370000 ( 1.699338)
+
+rbx-head
+Hash#has_key vs. Hash#[]
+Rehearsal ---------------------------------------------------------------
+Hash#has_key 0.660584 0.004932 0.665516 ( 0.508601)
+Hash#has_key (if statement) 0.261708 0.000532 0.262240 ( 0.263021)
+Hash#has_key (non-existant) 0.265908 0.000827 0.266735 ( 0.259509)
+Hash#[] 0.396607 0.001189 0.397796 ( 0.372997)
+Hash#[] (if statement) 0.553003 0.001589 0.554592 ( 0.543859)
+Hash#[] (non-existant) 0.323748 0.000884 0.324632 ( 0.319055)
+------------------------------------------------------ total: 2.471511sec
+
+ user system total real
+Hash#has_key 0.332239 0.000819 0.333058 ( 0.333809)
+Hash#has_key (if statement) 0.284344 0.000521 0.284865 ( 0.285330)
+Hash#has_key (non-existant) 0.339695 0.001301 0.340996 ( 0.324259)
+Hash#[] 0.298555 0.000368 0.298923 ( 0.299557)
+Hash#[] (if statement) 0.392755 0.000773 0.393528 ( 0.395473)
+Hash#[] (non-existant) 0.277721 0.000464 0.278185 ( 0.278540)
+
+ruby-1.8.7-p330
+Hash#has_key vs. Hash#[]
+Rehearsal ---------------------------------------------------------------
+Hash#has_key 0.450000 0.000000 0.450000 ( 0.450143)
+Hash#has_key (if statement) 0.440000 0.000000 0.440000 ( 0.448278)
+Hash#has_key (non-existant) 0.420000 0.000000 0.420000 ( 0.416959)
+Hash#[] 0.450000 0.000000 0.450000 ( 0.450727)
+Hash#[] (if statement) 0.550000 0.000000 0.550000 ( 0.555043)
+Hash#[] (non-existant) 0.530000 0.000000 0.530000 ( 0.527189)
+------------------------------------------------------ total: 2.840000sec
+
+ user system total real
+Hash#has_key 0.440000 0.000000 0.440000 ( 0.447746)
+Hash#has_key (if statement) 0.450000 0.000000 0.450000 ( 0.450331)
+Hash#has_key (non-existant) 0.420000 0.000000 0.420000 ( 0.419157)
+Hash#[] 0.450000 0.000000 0.450000 ( 0.454438)
+Hash#[] (if statement) 0.570000 0.000000 0.570000 ( 0.563948)
+Hash#[] (non-existant) 0.520000 0.000000 0.520000 ( 0.527866)
+
+ruby-1.9.2-p136
+Hash#has_key vs. Hash#[]
+Rehearsal ---------------------------------------------------------------
+Hash#has_key 0.690000 0.000000 0.690000 ( 0.691657)
+Hash#has_key (if statement) 0.630000 0.000000 0.630000 ( 0.638418)
+Hash#has_key (non-existant) 0.640000 0.000000 0.640000 ( 0.637510)
+Hash#[] 0.580000 0.000000 0.580000 ( 0.584500)
+Hash#[] (if statement) 0.840000 0.010000 0.850000 ( 0.837541)
+Hash#[] (non-existant) 0.810000 0.000000 0.810000 ( 0.811598)
+------------------------------------------------------ total: 4.200000sec
+
+ user system total real
+Hash#has_key 0.690000 0.000000 0.690000 ( 0.694192)
+Hash#has_key (if statement) 0.640000 0.000000 0.640000 ( 0.641729)
+Hash#has_key (non-existant) 0.630000 0.000000 0.630000 ( 0.634470)
+Hash#[] 0.580000 0.000000 0.580000 ( 0.587844)
+Hash#[] (if statement) 0.830000 0.000000 0.830000 ( 0.832323)
+Hash#[] (non-existant) 0.790000 0.010000 0.800000 ( 0.791689)
+=end