github.com/code-to-go/safepool.lib@v0.0.0-20221205180519-ee25e63c226e/algo/merkle_test.go (about)

     1  package algo
     2  
     3  import (
     4  	"bytes"
     5  	"math/rand"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"golang.org/x/crypto/blake2b"
    10  )
    11  
    12  func Test_MerkleTree(t *testing.T) {
    13  	rn := make([]byte, 40000)
    14  	rand.Seed(1975)
    15  	rand.Read(rn)
    16  
    17  	rn[0] = 16
    18  	m1, err := MerkleTreeFromReader(bytes.NewBuffer(rn), 13)
    19  	assert.NoErrorf(t, err, "Cannot create tree: %v", err)
    20  	assert.Equal(t, uint32(len(rn)), m1.DataLength, "unexpected length")
    21  
    22  	rn[0] = 8
    23  	m2, err := MerkleTreeFromReader(bytes.NewBuffer(rn), 13)
    24  	assert.NoErrorf(t, err, "Cannot create tree: %v", err)
    25  	assert.Equal(t, uint32(len(rn)), m2.DataLength, "unexpected length")
    26  
    27  	assert.NotEqualValues(t, m1.Blocks[0].Hash, m2.Blocks[0].Hash, "Unexpected same hash for first block")
    28  	assert.EqualValues(t, m1.Blocks[1].Hash, m2.Blocks[1].Hash, "Unexpected different hash for second block")
    29  	assert.NotEqualValues(t, MerkleTreeHash(m1), MerkleTreeHash(m2), "Unexpected same hash")
    30  
    31  }
    32  
    33  func Benchmark_Merkle(b *testing.B) {
    34  	rn := make([]byte, 1000*1000)
    35  	rand.Seed(1975)
    36  	rand.Read(rn)
    37  
    38  	for i := 0; i < 512; i++ {
    39  		MerkleTreeFromReader(bytes.NewBuffer(rn), 13)
    40  	}
    41  }
    42  
    43  func Benchmark_Blake(b *testing.B) {
    44  	blake, _ := blake2b.New256(nil)
    45  	rn := make([]byte, 1000*1000)
    46  
    47  	for i := 0; i < 512; i++ {
    48  		blake.Reset()
    49  		blake.Sum(rn)
    50  	}
    51  
    52  }