Packages

Pure Elixir AVL tree implementation

Current section

Files

Jump to
avl_tree bench run.exs
Raw

bench/run.exs

defmodule Bench do
def run(size) do
IO.puts("============ #{size} elements ============\n")
:rand.seed(:exrop, {1, 2, 3})
data = Enum.shuffle(1..size)
set = Enum.reduce(data, MapSet.new(), fn x, set -> MapSet.put(set, x) end)
tree = Enum.reduce(data, AVLTree.new(), fn x, tree -> AVLTree.put(tree, x) end)
IO.puts("Flat size (bytes):")
IO.puts("MapSet: #{:erts_debug.flat_size(set) - size}")
IO.puts("AVLTree: #{:erts_debug.flat_size(tree) - size}")
gen_element = fn _ -> :rand.uniform(size * 2) end
IO.puts("\n============ SEARCH ============")
Benchee.run(
%{
"MapSet SEARCH" => fn x -> MapSet.member?(set, x) end,
"AVLTree SEARCH" => fn x -> AVLTree.member?(tree, x) end
},
before_each: gen_element,
time: 5,
print: %{
benchmarking: false,
configuration: false
}
)
IO.puts("\n============ INSERT ============")
Benchee.run(
%{
"MapSet INSERT" => fn x -> MapSet.put(set, x) end,
"AVLTree INSERT" => fn x -> AVLTree.put(tree, x) end
},
before_each: gen_element,
time: 5,
print: %{
benchmarking: false,
configuration: false
}
)
IO.puts("\n============ DELETE ============")
Benchee.run(
%{
"MapSet DELETE" => fn x -> MapSet.delete(set, x) end,
"AVLTree DELETE" => fn x -> AVLTree.delete(tree, x) end
},
before_each: gen_element,
time: 5,
print: %{
benchmarking: false,
configuration: false
}
)
end
end
case System.argv() do
[a | _] ->
case Integer.parse(a) do
{n, ""} -> Bench.run(n)
_ -> IO.puts("integer expected")
end
_ ->
Bench.run(100_000)
end