package keys
|
|
|
|
import (
|
|
"testing"
|
|
|
|
cmn "github.com/tendermint/tmlibs/common"
|
|
)
|
|
|
|
func warmupCodec(bank string) *WordCodec {
|
|
codec, err := LoadCodec(bank)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
_, err = codec.GetIndex(codec.words[123])
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
return codec
|
|
}
|
|
|
|
func BenchmarkCodec(b *testing.B) {
|
|
banks := []string{"english", "spanish", "japanese", "chinese_simplified"}
|
|
|
|
for _, bank := range banks {
|
|
b.Run(bank, func(sub *testing.B) {
|
|
codec := warmupCodec(bank)
|
|
sub.ResetTimer()
|
|
benchSuite(sub, codec)
|
|
})
|
|
}
|
|
}
|
|
|
|
func benchSuite(b *testing.B, codec *WordCodec) {
|
|
b.Run("to_words", func(sub *testing.B) {
|
|
benchMakeWords(sub, codec)
|
|
})
|
|
b.Run("to_bytes", func(sub *testing.B) {
|
|
benchParseWords(sub, codec)
|
|
})
|
|
}
|
|
|
|
func benchMakeWords(b *testing.B, codec *WordCodec) {
|
|
numBytes := 32
|
|
data := cmn.RandBytes(numBytes)
|
|
for i := 1; i <= b.N; i++ {
|
|
_, err := codec.BytesToWords(data)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func benchParseWords(b *testing.B, codec *WordCodec) {
|
|
// generate a valid test string to parse
|
|
numBytes := 32
|
|
data := cmn.RandBytes(numBytes)
|
|
words, err := codec.BytesToWords(data)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
for i := 1; i <= b.N; i++ {
|
|
_, err := codec.WordsToBytes(words)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
}
|