diff options
author | Alex Auvolat <alex@adnab.me> | 2018-09-01 15:28:05 +0200 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2018-09-01 15:28:05 +0200 |
commit | dd078cfecbe07f1e4d4e002467707ed53aeff180 (patch) | |
tree | 0a2af29409942e62f42e50b534688c21c5579ee6 /test | |
parent | 0b5d43e1857e541af58575a7e1c2bbe729436b15 (diff) | |
download | shard-dd078cfecbe07f1e4d4e002467707ed53aeff180.tar.gz shard-dd078cfecbe07f1e4d4e002467707ed53aeff180.zip |
Make merkle search tree work over network
Diffstat (limited to 'test')
-rw-r--r-- | test/mst_test.exs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/test/mst_test.exs b/test/mst_test.exs index cf5a898..c1758ad 100644 --- a/test/mst_test.exs +++ b/test/mst_test.exs @@ -174,4 +174,24 @@ defmodule ShardTest.MST do assert MST.last(mg1, nil, 2000) == all_items end + test "merkle search tree 8: MST.merge callback" do + items1 = (for i <- 1..1000, do: i*2+40) + items2 = (for i <- 1..1000, do: i*3) + + y = Enum.reduce(items1, %MST{}, fn i, acc -> MST.insert(acc, i) end) + z = Enum.reduce(items2, %MST{}, fn i, acc -> MST.insert(acc, i) end) + + {:ok, cb_called} = Agent.start_link fn -> [] end + + cb = fn i, true -> Agent.update(cb_called, fn x -> [i | x] end) end + mg = MST.merge(y, z, cb) + + cb_vals = Agent.get cb_called, &(&1) + expected = MapSet.difference(MapSet.new(items2), MapSet.new(items1)) + |> MapSet.to_list + |> Enum.sort + |> Enum.reverse + assert expected == cb_vals + end + end |