github.com/nspcc-dev/neo-go@v0.105.2-0.20240517133400-6be757af3eba/pkg/encoding/bigint/fuzz_test.go (about) 1 package bigint 2 3 import ( 4 "bytes" 5 "crypto/rand" 6 "math/big" 7 "testing" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 func FuzzFromBytes(f *testing.F) { 13 for _, tc := range testCases { 14 f.Add(tc.buf) 15 } 16 for i := 0; i < 50; i++ { 17 for j := 1; j < MaxBytesLen; j++ { 18 b := make([]byte, j) 19 _, err := rand.Read(b) 20 require.NoError(f, err) 21 f.Add(b) 22 } 23 } 24 f.Fuzz(func(t *testing.T, raw []byte) { 25 var bi *big.Int 26 require.NotPanics(t, func() { bi = FromBytes(raw) }) 27 28 var actual []byte 29 require.NotPanics(t, func() { actual = ToBytes(bi) }) 30 require.True(t, len(actual) <= len(raw), "actual: %x, raw: %x", actual, raw) 31 32 require.True(t, bytes.Equal(actual, raw[:len(actual)]), "actual: %x, raw: %x", actual, raw) 33 if len(actual) == len(raw) { 34 return 35 } 36 37 var b byte 38 if bi.Sign() == -1 { 39 b = 0xFF 40 } 41 for i := len(actual); i < len(raw); i++ { 42 require.Equal(t, b, raw[i], "invalid prefix") 43 } 44 45 newRaw := ToBytes(bi) 46 newBi := FromBytes(newRaw) 47 require.Equal(t, bi, newBi) 48 }) 49 }