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