Current section
Files
Jump to
Current section
Files
lib/dets_plus_bench.ex
defmodule DetsPlus.Bench do
@moduledoc false
def test(module, test_size) do
File.rm("test_file_dets_bench")
{:ok, dets} = module.open_file(:test_file_dets_bench, [])
for x <- 0..test_size do
y =
if x == 0 do
1
else
[{_x, y}] = module.lookup(dets, x - 1)
y
end
:ok = module.insert(dets, {x, y + x})
end
:ok = module.sync(dets)
for x <- 0..test_size do
[{^x, _y}] = module.lookup(dets, x)
end
:ok = module.close(dets)
end
def prepare_read_test(module, test_size) do
filename = 'test_file_dets_read_bench.#{module}'
if File.exists?(filename) do
:ok
else
{:ok, dets} = module.open_file(:test_file_dets_read_bench, file: filename)
for x <- 0..test_size do
:ok = module.insert(dets, {x, x * x})
end
:ok = module.close(dets)
end
end
def read_test(module, test_size) do
filename = 'test_file_dets_read_bench.#{module}'
{:ok, dets} = module.open_file(:test_file_dets_bench, file: filename)
for x <- 0..test_size do
module.lookup(dets, test_size + x)
module.lookup(dets, x)
end
:ok = module.close(dets)
end
def run() do
# :observer.start()
rounds = 3
test_size = 100_000
modules = [:dets, DetsPlus]
for module <- modules do
# for module <- [DetsPlus] do
IO.puts("running rw test: #{module}")
for _ <- 1..rounds do
{time, :ok} = :timer.tc(&test/2, [module, test_size])
IO.puts("#{time}μs")
end
end
for module <- modules do
IO.puts("running read test: #{module}")
prepare_read_test(module, test_size)
for _ <- 1..rounds do
{time, :ok} = :timer.tc(&read_test/2, [module, test_size])
IO.puts("#{time}μs")
end
end
end
end