-module(utEtsOrdDs). -compile([nowarn_unused_function, nowarn_unused_vars, nowarn_export_all]). -export([start/2]). start(Num, Pid) -> Ds = init(Num), Time1 = erlang:monotonic_time(), NewDsI = insert(Num, Ds), Time2 = erlang:monotonic_time(), NewDsR = read(Num, NewDsI), Time3 = erlang:monotonic_time(), NewDsU = update(Num, NewDsR), Time4 = erlang:monotonic_time(), NewDsF = for(Num, NewDsU), Time5 = erlang:monotonic_time(), delete(Num, NewDsF), Time6 = erlang:monotonic_time(), erlang:send(Pid, {over, self(), Time2 - Time1, Time3 - Time2, Time4 - Time3, Time5 - Time4, Time6 - Time5, ets:info(Ds, memory)}), exit(normal). init(_Num) -> ets:new(test, [ordered_set]). insert(0, Ds) -> Ds; insert(Num, Ds) -> Key = utTestDs:makeK(Num), Value = utTestDs:makeV(Num), ets:insert(Ds, {Key, Value}), insert(Num - 1, Ds). read(0, Ds) -> Ds; read(Num, Ds) -> Key = utTestDs:makeK(Num), Value = ets:lookup(Ds, Key), read(Num - 1, Ds). update(0, Ds) -> Ds; update(Num, Ds) -> Key = utTestDs:makeK(Num), Value = utTestDs:makeV2(Num), ets:update_element(Ds, Key, {2, Value}), update(Num - 1, Ds). for(Num, Ds) -> Fun = fun({Key, Value}, Acc) -> Value end, List = ets:foldl(Fun, [], Ds), Ds. delete(0, Ds) -> ok; delete(Num, Ds) -> Key = utTestDs:makeK(Num), ets:delete(Ds, Key), delete(Num - 1, Ds).