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
|
require 'benchmark'
require 'avl_tree'
require 'red_black_tree'
require 'openssl'
#random = Random.new(0)
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") do
aset(h, keys)
end
bm.report("#{name} aref") do
aref(h, keys)
end
bm.report("#{name} delete") do
delete(h, keys)
end
end
keys = []
TIMES.times do
keys << OpenSSL::Random.random_bytes(key_size)
end
Benchmark.bmbm do |bm|
run(bm, Hash.new, keys)
run(bm, AVLTree.new, keys)
run(bm, RedBlackTree.new, keys)
end
|