encoding: add bigint fuzz test
Signed-off-by: Evgeniy Stratonikov <evgeniy@nspcc.ru>
This commit is contained in:
parent
d9af122be5
commit
affe1ecb4f
1 changed files with 52 additions and 0 deletions
52
pkg/encoding/bigint/fuzz_test.go
Normal file
52
pkg/encoding/bigint/fuzz_test.go
Normal file
|
@ -0,0 +1,52 @@
|
|||
//go:build go1.18
|
||||
// +build go1.18
|
||||
|
||||
package bigint
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"crypto/rand"
|
||||
"math/big"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func FuzzFromBytes(f *testing.F) {
|
||||
for _, tc := range testCases {
|
||||
f.Add(tc.buf)
|
||||
}
|
||||
for i := 0; i < 50; i++ {
|
||||
for j := 1; j < MaxBytesLen; j++ {
|
||||
b := make([]byte, j)
|
||||
_, err := rand.Read(b)
|
||||
require.NoError(f, err)
|
||||
f.Add(b)
|
||||
}
|
||||
}
|
||||
f.Fuzz(func(t *testing.T, raw []byte) {
|
||||
var bi *big.Int
|
||||
require.NotPanics(t, func() { bi = FromBytes(raw) })
|
||||
|
||||
var actual []byte
|
||||
require.NotPanics(t, func() { actual = ToBytes(bi) })
|
||||
require.True(t, len(actual) <= len(raw), "actual: %x, raw: %x", actual, raw)
|
||||
|
||||
require.True(t, bytes.Equal(actual, raw[:len(actual)]), "actual: %x, raw: %x", actual, raw)
|
||||
if len(actual) == len(raw) {
|
||||
return
|
||||
}
|
||||
|
||||
var b byte
|
||||
if bi.Sign() == -1 {
|
||||
b = 0xFF
|
||||
}
|
||||
for i := len(actual); i < len(raw); i++ {
|
||||
require.Equal(t, b, raw[i], "invalid prefix")
|
||||
}
|
||||
|
||||
newRaw := ToBytes(bi)
|
||||
newBi := FromBytes(newRaw)
|
||||
require.Equal(t, bi, newBi)
|
||||
})
|
||||
}
|
Loading…
Reference in a new issue