blob: 7102a9fe54b18835f70c784d99865af7419e0a3d [file] [log] [blame]
#! /usr/bin/env escript
%% This file is part of khash released under the MIT license.
%% See the LICENSE file for more information.
%% Copyright 2013 Cloudant, Inc <support@cloudant.com>
-mode(compile).
num_cycles() -> 10000000.
num_kvs() -> 5000.
main([]) ->
% Let the VM settle for a bit
receive after 1000 -> ok end,
code:add_pathz("test"),
util:run(1, fun() ->
test(),
ok
end).
test() ->
{DTime, _} = timer:tc(fun() -> test_dict() end, []),
{KTime, _} = timer:tc(fun() -> test_khash() end, []),
etap:diag("Dict: ~10b", [DTime]),
etap:diag("KHash: ~10b", [KTime]),
etap:is_greater(DTime, KTime, "Dict is slower than khash").
test_dict() ->
erlang:garbage_collect(),
D = dict:from_list(kv_data()),
test_dict(D, num_cycles()).
test_dict(_D, 0) ->
ok;
test_dict(D, NumCycles) ->
bing = dict:fetch(1, D),
test_dict(D, NumCycles - 1).
test_khash() ->
erlang:garbage_collect(),
{ok, H} = khash:from_list(kv_data()),
test_khash(H, num_cycles()).
test_khash(_H, 0) ->
ok;
test_khash(H, NumCycles) ->
bing = khash:get(H, 1),
test_khash(H, NumCycles - 1).
kv_data() ->
[{I, bing} || I <- lists:seq(1, num_kvs())].