mirror of
https://gitlab.com/pulsechaincom/erigon-pulse.git
synced 2024-12-22 19:50:36 +00:00
761524a986
moves eth2shuffle package to erigon.
85 lines
2.1 KiB
Go
85 lines
2.1 KiB
Go
package eth2shuffle_test
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/ledgerwatch/erigon/common/eth2shuffle"
|
|
)
|
|
|
|
func BenchmarkPermuteIndex(b *testing.B) {
|
|
listSizes := []uint64{4000000, 40000, 400}
|
|
|
|
hashFn := getStandardHashFn()
|
|
// "random" seed for testing. Can be any 32 bytes.
|
|
seed := [32]byte{123, 42}
|
|
|
|
// rounds of shuffling, constant in spec
|
|
rounds := uint8(90)
|
|
|
|
for _, listSize := range listSizes {
|
|
// benchmark!
|
|
b.Run(fmt.Sprintf("PermuteIndex_%d", listSize), func(ib *testing.B) {
|
|
for i := uint64(0); i < uint64(ib.N); i++ {
|
|
eth2shuffle.PermuteIndex(hashFn, rounds, i%listSize, listSize, seed)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkIndexComparison(b *testing.B) {
|
|
// 4M is just too inefficient to even start comparing.
|
|
listSizes := []uint64{40000, 400}
|
|
|
|
hashFn := getStandardHashFn()
|
|
// "random" seed for testing. Can be any 32 bytes.
|
|
seed := [32]byte{123, 42}
|
|
|
|
// rounds of shuffling, constant in spec
|
|
rounds := uint8(90)
|
|
|
|
for _, listSize := range listSizes {
|
|
// benchmark!
|
|
b.Run(fmt.Sprintf("Indexwise_ShuffleList_%d", listSize), func(ib *testing.B) {
|
|
for i := 0; i < ib.N; i++ {
|
|
// Simulate a list-shuffle by running permute-index listSize times.
|
|
for j := uint64(0); j < listSize; j++ {
|
|
eth2shuffle.PermuteIndex(hashFn, rounds, j, listSize, seed)
|
|
}
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func BenchmarkShuffleList(b *testing.B) {
|
|
listSizes := []uint64{4000000, 40000, 400}
|
|
|
|
hashFn := getStandardHashFn()
|
|
// "random" seed for testing. Can be any 32 bytes.
|
|
seed := [32]byte{123, 42}
|
|
|
|
// rounds of shuffling, constant in spec
|
|
rounds := uint8(90)
|
|
|
|
for _, listSize := range listSizes {
|
|
// list to test
|
|
testIndices := make([]uint64, listSize, listSize)
|
|
// fill
|
|
for i := uint64(0); i < listSize; i++ {
|
|
testIndices[i] = i
|
|
}
|
|
// benchmark!
|
|
b.Run(fmt.Sprintf("ShuffleList_%d", listSize), func(ib *testing.B) {
|
|
for i := 0; i < ib.N; i++ {
|
|
eth2shuffle.ShuffleList(hashFn, testIndices, rounds, seed)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
//// TODO optimize memory allocations even more by analysis of statistics
|
|
//func BenchmarkShuffleListWithAllocsReport(b *testing.B) {
|
|
// b.ReportAllocs()
|
|
// BenchmarkShuffleList(b)
|
|
//}
|