github.com/jlogelin/fastmerkle@v0.0.1/root_test.go (about) 1 package fastmerkle 2 3 import ( 4 "crypto/rand" 5 "log" 6 "reflect" 7 "testing" 8 ) 9 10 func BenchmarkMerkleRoot(b *testing.B) { 11 // equivalent hashes of a 8G file, chunked into 256 byte tranches 12 13 iterations := 8 << 30 / 256 14 blkstream := make([][]byte, iterations) 15 buf := make([]byte, 128) 16 for i := 0; i < iterations; i++ { 17 _, err := rand.Read(buf) 18 if err != nil { 19 log.Fatalf("error while generating random string: %s", err) 20 } 21 blkstream[i] = buf 22 } 23 24 m := New() 25 _ = m.Root(blkstream) 26 } 27 28 func TestMerkleRoot(t *testing.T) { 29 type args struct { 30 stream [][]byte 31 } 32 tests := []struct { 33 name string 34 args args 35 want []byte 36 }{ 37 { 38 name: "test 1", 39 args: args{ 40 stream: [][]byte{[]byte("a"), []byte("b"), []byte("c")}, 41 }, 42 want: []byte{0x70, 0x75, 0x15, 0x2d, 0x03, 0xa5, 0xcd, 0x92, 0x10, 0x48, 0x87, 0xb4, 0x76, 0x86, 0x27, 0x78, 0xec, 0x0c, 0x87, 0xbe, 0x5c, 0x2f, 0xa1, 0xc0, 0xa9, 0x0f, 0x87, 0xc4, 0x9f, 0xad, 0x6e, 0xff}, 43 }, 44 } 45 for _, tt := range tests { 46 t.Run(tt.name, func(t *testing.T) { 47 m := New() 48 if got := m.Root(tt.args.stream); !reflect.DeepEqual(got, tt.want) { 49 t.Errorf("merkleRoot() = %v, want %v", got, tt.want) 50 } 51 }) 52 } 53 } 54 55 func TestMerkleRootWithAdd(t *testing.T) { 56 type args struct { 57 stream [][]byte 58 } 59 tests := []struct { 60 name string 61 args args 62 want []byte 63 }{ 64 { 65 name: "test 1", 66 args: args{ 67 stream: [][]byte{[]byte("a"), []byte("b"), []byte("c")}, 68 }, 69 want: []byte{0x70, 0x75, 0x15, 0x2d, 0x03, 0xa5, 0xcd, 0x92, 0x10, 0x48, 0x87, 0xb4, 0x76, 0x86, 0x27, 0x78, 0xec, 0x0c, 0x87, 0xbe, 0x5c, 0x2f, 0xa1, 0xc0, 0xa9, 0x0f, 0x87, 0xc4, 0x9f, 0xad, 0x6e, 0xff}, 70 }, 71 } 72 for _, tt := range tests { 73 t.Run(tt.name, func(t *testing.T) { 74 m := New() 75 for i := 0; i < len(tt.args.stream); i++ { 76 m.Add(tt.args.stream[i]) 77 } 78 79 if got := m.Digest(); !reflect.DeepEqual(got, tt.want) { 80 t.Errorf("merkleRoot() = %v, want %v", got, tt.want) 81 } 82 }) 83 } 84 }