···11+import unittest
22+33+from atmst import MemoryBlockStore, NodeStore, NodeWrangler, mst_diff, very_slow_mst_diff
44+from atmst.mst.node import MSTNode
55+from atmst.util import hash_to_cid
66+77+class MSTDiffTestCase(unittest.TestCase):
88+ def setUp(self):
99+ keys = []
1010+ dummy_value = hash_to_cid(b"value")
1111+ i = 0
1212+ for height in [0, 1, 0, 2, 0, 1, 0]: # if all these keys are added to a MST, it'll form a perfect binary tree.
1313+ while True:
1414+ key = f"{i:04d}"
1515+ i += 1
1616+ if MSTNode.key_height(key) == height:
1717+ keys.append(key)
1818+ break
1919+2020+ bs = MemoryBlockStore()
2121+ self.ns = NodeStore(bs)
2222+ wrangler = NodeWrangler(self.ns)
2323+2424+ # create all possible permutations of the full binary tree
2525+ # the idea is that this'll cover most "interesting" trees up to a height of 3
2626+2727+ self.trees = []
2828+ for i in range(2**len(keys)):
2929+ root = self.ns.get_node(None).cid
3030+ for j, k in enumerate(keys):
3131+ if (i>>j)&1:
3232+ root = wrangler.put_record(root, k, dummy_value)
3333+ self.trees.append(root)
3434+3535+ def test_diff_all_pairs(self):
3636+ for a in self.trees:
3737+ for b in self.trees:
3838+ reference_created, reference_deleted = very_slow_mst_diff(self.ns, a, b)
3939+ created, deleted = mst_diff(self.ns, a, b)
4040+ self.assertEqual(created, reference_created)
4141+ self.assertEqual(deleted, reference_deleted)
4242+4343+if __name__ == '__main__':
4444+ unittest.main()