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  }