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