1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
require 'benchmark'
require 'radix_tree' # gem install radix_tree
require 'avl_tree'
require 'openssl'
times = 100000
key_size = 10
def aset(h, keys)
keys.each do |k|
h[k] = 1
end
end
def aref(h, keys)
keys.each do |k|
h[k]
end
end
def delete(h, keys)
keys.each do |k|
h.delete(k)
end
end
def run(bm, h, keys)
name = h.class.name
bm.report("#{name} aset (#{keys.size})") do
aset(h, keys)
end
bm.report("#{name} aref (#{keys.size})") do
aref(h, keys)
end
bm.report("#{name} delete (#{keys.size})") do
delete(h, keys)
end
end
keys = []
1000000.times do
keys << OpenSSL::Random.random_bytes(key_size)
end
1.upto(100) do |idx|
elements = idx * 10000
Benchmark.bm(30) do |bm|
#run(bm, Hash.new, keys[0, elements])
#run(bm, RadixTree.new, keys)
run(bm, AVLTree.new, keys[0, elements])
end
end
|