import (
"bytes"
+ "fmt"
"testing"
)
})
}
}
+
+func BenchmarkByteSliceMutators(b *testing.B) {
+ tests := [...]struct {
+ name string
+ mutator func(*mutator, []byte) []byte
+ }{
+ {"RemoveBytes", byteSliceRemoveBytes},
+ {"InsertRandomBytes", byteSliceInsertRandomBytes},
+ {"DuplicateBytes", byteSliceDuplicateBytes},
+ {"OverwriteBytes", byteSliceOverwriteBytes},
+ {"BitFlip", byteSliceBitFlip},
+ {"XORByte", byteSliceXORByte},
+ {"SwapByte", byteSliceSwapByte},
+ {"ArithmeticUint8", byteSliceArithmeticUint8},
+ {"ArithmeticUint16", byteSliceArithmeticUint16},
+ {"ArithmeticUint32", byteSliceArithmeticUint32},
+ {"ArithmeticUint64", byteSliceArithmeticUint64},
+ {"OverwriteInterestingUint8", byteSliceOverwriteInterestingUint8},
+ {"OverwriteInterestingUint16", byteSliceOverwriteInterestingUint16},
+ {"OverwriteInterestingUint32", byteSliceOverwriteInterestingUint32},
+ {"InsertConstantBytes", byteSliceInsertConstantBytes},
+ {"OverwriteConstantBytes", byteSliceOverwriteConstantBytes},
+ {"ShuffleBytes", byteSliceShuffleBytes},
+ {"SwapBytes", byteSliceSwapBytes},
+ }
+
+ for _, tc := range tests {
+ b.Run(tc.name, func(b *testing.B) {
+ for size := 64; size <= 1024; size *= 2 {
+ b.Run(fmt.Sprintf("%d", size), func(b *testing.B) {
+ m := &mutator{r: newPcgRand()}
+ input := make([]byte, size)
+ for i := 0; i < b.N; i++ {
+ tc.mutator(m, input)
+ }
+ })
+ }
+ })
+ }
+}