Search Apps Documentation Source Content File Folder Download Copy

merkle_test.gno

1.32 Kb ยท 69 lines
 1package merkle
 2
 3import (
 4	"fmt"
 5	"testing"
 6)
 7
 8type testData struct {
 9	content string
10}
11
12func (d testData) Bytes() []byte {
13	return []byte(d.content)
14}
15
16func TestMerkleTree(t *testing.T) {
17	tests := []struct {
18		size     int
19		expected string
20	}{
21		{
22			size:     1,
23			expected: "cf9f824bce7f5bc63d557b23591f58577f53fe29f974a615bdddbd0140f912f4",
24		},
25		{
26			size:     3,
27			expected: "1a4a5f0fa267244bf9f74a63fdf2a87eed5e97e4bd104a9e94728c8fb5442177",
28		},
29		{
30			size:     10,
31			expected: "cd8a40502b0b92bf58e7432a5abb2d8b60121cf2b7966d6ebaf103f907a1bc21",
32		},
33		{
34			size:     1000,
35			expected: "fa533d2efdf12be26bc410dfa42936ac63361324e35e9b1ff54d422a1dd2388b",
36		},
37	}
38
39	for _, test := range tests {
40		var leaves []Hashable
41		for i := 0; i < test.size; i++ {
42			leaves = append(leaves, testData{fmt.Sprintf("node_%d", i)})
43		}
44
45		tree := NewTree(leaves)
46
47		if tree == nil {
48			t.Error("Merkle tree creation failed")
49		}
50
51		root := tree.Root()
52
53		if root != test.expected {
54			t.Fatalf("merkle.Tree.Root(), expected: %s; got: %s", test.expected, root)
55		}
56
57		for _, leaf := range leaves {
58			proofs, err := tree.Proof(leaf)
59			if err != nil {
60				t.Fatal("failed to proof leaf: %v, on tree: %v", leaf, test)
61			}
62
63			ok := Verify(root, leaf, proofs)
64			if !ok {
65				t.Fatal("failed to verify leaf: %v, on tree: %v", leaf, tree)
66			}
67		}
68	}
69}