ExUnit.start() defmodule Sn.Test do use ExUnit.Case, async: false import Record require KVS defrecord(:msg, id: [], body: []) setup do: (on_exit(fn -> :ok = :kvs.leave();:ok = :kvs_rocks.destroy() end);:kvs.join()) setup kvs, do: [ id0: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/duck") end, :lists.seq(1,10)), id1: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/luck") end, :lists.seq(1,10)), id2: :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/crm/truck") end, :lists.seq(1,10))] #% @tag :ignore #% test "1", kvs do #% :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), "/aco/thug") end, :lists.seq(1,7)) #% log "all", :kvs.all("/aco/thug") #% r = KVS.reader(id: rid) = :kvs.save(:kvs.reader("/aco/thug")) #% log "real readers are good", r #% r1 = :kvs.take(KVS.reader(r, args: 5, dir: 0)) #% log "take 5", r1 #% r3 = :kvs.take(KVS.reader(r1, args: 5, dir: 0)) #% log "take 2", r3 #% r5 = KVS.reader(args: args) = :kvs.take(KVS.reader(r3, args: 5, dir: 1)) #% log "back 5", r5 #% log "is pretty good", args #% r6 = :kvs.take(KVS.reader(r5, args: 5, dir: 1)) #% log "back 2", r6 #% end #% @tag :ignore #% test "2" do #% {t1,_} = :timer.tc( fn -> #% :lists.map(fn _ -> :kvs.append(msg(id: :kvs.seq([],[])), #% "АТУ/ЧЕРНІГІВСЬКА ОБЛАСТЬ/МІСТА СНОВСЬКОГО РАЙОНУ/СНОВСЬК/РАЙОНИ ШОТО ТАМ") end, :lists.seq(1,10000)) #% end) #% {t,_} = :timer.tc(fn -> #% :kvs.all("АТУ/ЧЕРНІГІВСЬКА ОБЛАСТЬ/МІСТА СНОВСЬКОГО РАЙОНУ/СНОВСЬК/РАЙОНИ ШОТО ТАМ") #% end) #% log "put:", :erlang.float_to_binary(t1 / 1_000_000, [:compact, {:decimals, 10}]) #% log "all:", :erlang.float_to_binary(t / 1_000_000, [:compact, {:decimals, 10}]) #% end test "removed writer" do prev = :kvs.all("/crm/duck") KVS.writer(cache: ch) = w = :kvs.writer("/crm/duck") w1 = KVS.writer(w, cache: {:msg, "unknown", "/corrupted"}) :ok = :kvs_rocks.put(w1) w2 = :kvs.writer("/crm/duck") assert {:ok, ^w2} = :kvs.get(:writer, "/crm/duck") assert w1 == w2 assert prev = :kvs.all("/crm/duck") {:ok,_} = :kvs.get(:writer, "/crm/duck") :ok = :kvs.delete(:writer, "/crm/duck") {:error, :not_found} = :kvs.get(:writer, "/crm/duck") assert prev = :kvs.all("/crm/duck") end #% feed(Feed) -> feed(fun(#reader{}=R) -> take(R#reader{args=4}) end, top(reader(Feed)),[]). #% feed(F,#reader{cache=C1}=R,Acc) -> #% #reader{args=A, cache=Ch, feed=Feed} = R1 = F(R), #% case Ch of #% C1 -> Acc ++ A; #% {_,_,K} when binary_part(K,{0,byte_size(Feed)}) == Feed #% andalso length(A) == 4 #% -> feed(F, R1, Acc ++ A); #% _ -> Acc ++ A #% end. defp log(x), do: IO.puts '#{inspect(x)}' defp log(m, x), do: IO.puts '#{m} #{inspect(x)}' end