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}
merkle_test.gno
1.32 Kb ยท 69 lines