def test_prove_verify(self):
        merkle_tree = MerkleTree()
        for el in elements:
            merkle_tree.add(el)

        # for each pair i, j, try if the proof for element i passes when given element j. Should be true iff i == j
        for i in range(len(elements)):
            p = merkle_tree.prove_leaf(i)
            for j in range(len(elements)):
                self.assertEqual(
                    merkle_proof_verify(merkle_tree.root, len(merkle_tree),
                                        elements[j], i, p), (i == j))
    def test_proof(self):
        merkle_tree = MerkleTree()
        for el in elements:
            merkle_tree.add(el)

        H01 = H(elements[0] + elements[1])
        H45 = H(elements[4] + elements[5])
        H67 = H(NIL + NIL)
        H4567 = H(H45 + H67)

        p = merkle_tree.prove_leaf(3)  # H('of')
        self.assertEqual(p[0], elements[2])  # sibling of leaf 3
        self.assertEqual(p[1], H01)
        self.assertEqual(p[2], H4567)