Skip to content

Instantly share code, notes, and snippets.

@dubek
Created October 22, 2014 17:09
Show Gist options
  • Save dubek/979fd1bd74c0f80c2ce7 to your computer and use it in GitHub Desktop.
Save dubek/979fd1bd74c0f80c2ce7 to your computer and use it in GitHub Desktop.
require "benchmark/ips"
require "hamster/hash"
require "hamster/version"
puts "OS Name: #{`uname -s -r -v -m -p -i -o`}"
puts "Ruby Version: #{`ruby -v`}"
puts "RubyGems Version: #{`gem -v`}"
puts "RVM Version: #{`rvm -v`}"
puts "Hamster version: #{Hamster::VERSION}"
def benchmark_merges(hash_size)
puts
puts
puts
Benchmark.ips do |b|
keys_a = (1..hash_size).to_a
values_a = keys_a.map { |k| "a-#{k}" }
hash_a = Hamster.hash(keys_a.zip(values_a))
keys_b = ((hash_size/2)..(hash_size*3/2)).to_a
values_b = keys_a.map { |k| "b-#{k}" }
hash_b = Hamster.hash(keys_b.zip(values_b))
b.report "old_merge(N=#{hash_size})" do
hash_a.old_merge(hash_b)
end
b.report "merge(N=#{hash_size})" do
hash_a.merge(hash_b)
end
b.compare!
end
end
benchmark_merges(10)
benchmark_merges(20)
benchmark_merges(50)
benchmark_merges(100)
benchmark_merges(1000)
OS Name: Linux 2.6.32-431.30.1.el6.x86_64 #1 SMP Wed Jul 30 14:44:26 EDT 2014 x86_64 x86_64 x86_64 GNU/Linux
Ruby Version: ruby 2.1.3p242 (2014-09-19 revision 47630) [x86_64-linux]
RubyGems Version: 2.2.2
RVM Version: rvm 1.25.33 (stable) by Wayne E. Seguin <wayneeseguin@gmail.com>, Michal Papis <mpapis@gmail.com> [https://rvm.io/]
Hamster version: 1.0.1-rc2
Calculating -------------------------------------
old_merge(N=10) 2467 i/100ms
merge(N=10) 3668 i/100ms
-------------------------------------------------
old_merge(N=10) 24102.7 (±7.6%) i/s - 120883 in 5.048146s
merge(N=10) 36664.0 (±5.8%) i/s - 183400 in 5.020794s
Comparison:
merge(N=10): 36664.0 i/s
old_merge(N=10): 24102.7 i/s - 1.52x slower
Calculating -------------------------------------
old_merge(N=20) 1175 i/100ms
merge(N=20) 1640 i/100ms
-------------------------------------------------
old_merge(N=20) 11590.7 (±11.2%) i/s - 57575 in 5.037649s
merge(N=20) 17729.1 (±7.7%) i/s - 88560 in 5.027350s
Comparison:
merge(N=20): 17729.1 i/s
old_merge(N=20): 11590.7 i/s - 1.53x slower
Calculating -------------------------------------
old_merge(N=50) 403 i/100ms
merge(N=50) 542 i/100ms
-------------------------------------------------
old_merge(N=50) 4096.4 (±3.8%) i/s - 20553 in 5.026043s
merge(N=50) 5454.1 (±1.0%) i/s - 27642 in 5.068634s
Comparison:
merge(N=50): 5454.1 i/s
old_merge(N=50): 4096.4 i/s - 1.33x slower
Calculating -------------------------------------
old_merge(N=100) 219 i/100ms
merge(N=100) 298 i/100ms
-------------------------------------------------
old_merge(N=100) 2237.3 (±2.0%) i/s - 11388 in 5.092143s
merge(N=100) 2983.3 (±1.2%) i/s - 15198 in 5.095135s
Comparison:
merge(N=100): 2983.3 i/s
old_merge(N=100): 2237.3 i/s - 1.33x slower
Calculating -------------------------------------
old_merge(N=1000) 14 i/100ms
merge(N=1000) 18 i/100ms
-------------------------------------------------
old_merge(N=1000) 151.4 (±2.6%) i/s - 770 in 5.091162s
merge(N=1000) 185.3 (±2.7%) i/s - 936 in 5.053930s
Comparison:
merge(N=1000): 185.3 i/s
old_merge(N=1000): 151.4 i/s - 1.22x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment