package main import ( "bytes" "fmt" "math/rand" "testing" ) func testMerkle(mtype string) bool { m := NewMerkle(mtype, 5, "test.db") root := m.Build() id := m.Size() / 2 proof := m.Proof(id) v := verify(id, proof) if !bytes.Equal(v, root) { return false } id = m.Size()/2 + 1 proof = m.Proof(id) v = verify(id, proof) if !bytes.Equal(v, root) { return false } return true } func TestMerkle(t *testing.T) { tests := []string{"bfs", "post"} for _, test := range tests { fmt.Println("Testing", test) if !testMerkle(test) { t.Error(test) } } } func BenchmarkBFSMerkle(b *testing.B) { m := NewBFSMerkle(25, "/mnt/data/bfs.db") root := make([]byte, hashSize) m.Read(root, 0) var id int64 var proof [][]byte for i := 0; i < b.N; i++ { id = rand.Int63n(m.Size()/2) + m.Size()/2 proof = m.Proof(id) if len(proof) != int(m.height) { fmt.Println("error") } } } func BenchmarkPostMerkle(b *testing.B) { m := NewPostMerkle(25, "/mnt/data/post.db") root := make([]byte, hashSize) m.Read(root, 0) var id int64 var proof [][]byte for i := 0; i < b.N; i++ { id = rand.Int63n(m.Size()/2) + m.Size()/2 proof = m.Proof(id) if len(proof) != int(m.height) { fmt.Println("error") } } }