defmodule ShardTest.MST do
use ExUnit.Case
alias SData.MerkleSearchTree, as: MST
doctest Shard.Application
test "merkle search tree 1" do
y = Enum.reduce(0..1000, MST.new(),
fn i, acc -> MST.insert(acc, i, i) end)
z = Enum.reduce(Enum.shuffle(0..1000), MST.new(),
fn i, acc -> MST.insert(acc, i, i) end)
for i <- 0..1000 do
assert MST.get(y, i) == i
assert MST.get(z, i) == i
end
assert MST.get(y, 9999) == nil
assert MST.get(z, -1001) == nil
assert MST.get(z, 1.01) == nil
IO.puts "y.root: #{y.root|>Base.encode16}"
IO.puts "z.root: #{z.root|>Base.encode16}"
assert y.root == z.root
end
test "merkle search tree 2" do
items = for i <- 0..1000 do
h = SData.term_hash i
{h, SData.term_hash h}
end
y = Enum.reduce(items, MST.new(),
fn {k, v}, acc -> MST.insert(acc, k, v) end)
z = Enum.reduce(Enum.shuffle(items), MST.new(),
fn {k, v}, acc -> MST.insert(acc, k, v) end)
for {k, v} <- items do
assert MST.get(y, k) == v
assert MST.get(z, k) == v
end
IO.puts "y.root: #{y.root|>Base.encode16}"
IO.puts "z.root: #{z.root|>Base.encode16}"
assert y.root == z.root
end
end