- package test
-
- import (
- cmn "github.com/tendermint/tmlibs/common"
- )
-
- // Contract: !bytes.Equal(input, output) && len(input) >= len(output)
- func MutateByteSlice(bytez []byte) []byte {
- // If bytez is empty, panic
- if len(bytez) == 0 {
- panic("Cannot mutate an empty bytez")
- }
-
- // Copy bytez
- mBytez := make([]byte, len(bytez))
- copy(mBytez, bytez)
- bytez = mBytez
-
- // Try a random mutation
- switch cmn.RandInt() % 2 {
- case 0: // Mutate a single byte
- bytez[cmn.RandInt()%len(bytez)] += byte(cmn.RandInt()%255 + 1)
- case 1: // Remove an arbitrary byte
- pos := cmn.RandInt() % len(bytez)
- bytez = append(bytez[:pos], bytez[pos+1:]...)
- }
- return bytez
- }
|