package slices import ( "math/rand" "testing" ) var size = 1024 * 1024 func TestSumUint8(t *testing.T) { x, y := generateUint8Slices() genericXCopy := make([]uint8, len(x)) copy(genericXCopy, x) sumUint8(x, y) sumUint8Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint8YLarger(t *testing.T) { x, y := generateUint8Slices() y = append(y, uint8(100)) genericXCopy := make([]uint8, len(x)) copy(genericXCopy, x) sumUint8(x, y) sumUint8Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint8XLarger(t *testing.T) { x, y := generateUint8Slices() x = append(x, uint8(100)) genericXCopy := make([]uint8, len(x)) copy(genericXCopy, x) sumUint8(x, y) sumUint8Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint16(t *testing.T) { x, y := generateUint16Slices() genericXCopy := make([]uint16, len(x)) copy(genericXCopy, x) sumUint16(x, y) sumUint16Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint16YLarger(t *testing.T) { x, y := generateUint16Slices() y = append(y, uint16(100)) genericXCopy := make([]uint16, len(x)) copy(genericXCopy, x) sumUint16(x, y) sumUint16Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint16XLarger(t *testing.T) { x, y := generateUint16Slices() x = append(x, uint16(100)) genericXCopy := make([]uint16, len(x)) copy(genericXCopy, x) sumUint16(x, y) sumUint16Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint32(t *testing.T) { x, y := generateUint32Slices() genericXCopy := make([]uint32, len(x)) copy(genericXCopy, x) sumUint32(x, y) sumUint32Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint32YLarger(t *testing.T) { x, y := generateUint32Slices() y = append(y, uint32(100)) genericXCopy := make([]uint32, len(x)) copy(genericXCopy, x) sumUint32(x, y) sumUint32Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint32XLarger(t *testing.T) { x, y := generateUint32Slices() x = append(x, uint32(100)) genericXCopy := make([]uint32, len(x)) copy(genericXCopy, x) sumUint32(x, y) sumUint32Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint64(t *testing.T) { x, y := generateUint64Slices() genericXCopy := make([]uint64, len(x)) copy(genericXCopy, x) sumUint64(x, y) sumUint64Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint64YLarger(t *testing.T) { x, y := generateUint64Slices() y = append(y, uint64(100)) genericXCopy := make([]uint64, len(x)) copy(genericXCopy, x) sumUint64(x, y) sumUint64Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func TestSumUint64XLarger(t *testing.T) { x, y := generateUint64Slices() x = append(x, uint64(100)) genericXCopy := make([]uint64, len(x)) copy(genericXCopy, x) sumUint64(x, y) sumUint64Generic(genericXCopy, y) for i := 0; i < len(x); i++ { if x[i] != genericXCopy[i] { t.Fatalf("mismatch sums at index %d, expected %d : got %d", i, genericXCopy[i], x[i]) } } } func generateUint8Slices() ([]uint8, []uint8) { var x []uint8 var y []uint8 for i := 0; i < size; i++ { x = append(x, uint8(i)) y = append(y, uint8(i)) } return x, y } func generateUint16Slices() ([]uint16, []uint16) { var x []uint16 var y []uint16 for i := 0; i < size; i++ { x = append(x, uint16(i)) y = append(y, uint16(i)) } return x, y } func generateUint32Slices() ([]uint32, []uint32) { var x []uint32 var y []uint32 prng := rand.New(rand.NewSource(0)) for i := 0; i < size; i++ { x = append(x, prng.Uint32()) y = append(y, prng.Uint32()) } return x, y } func generateUint64Slices() ([]uint64, []uint64) { var x []uint64 var y []uint64 prng := rand.New(rand.NewSource(0)) for i := 0; i < size; i++ { x = append(x, prng.Uint64()) y = append(y, prng.Uint64()) } return x, y } func BenchmarkSumUnit8(b *testing.B) { x, y := generateUint8Slices() for i := 0; i < b.N; i++ { SumUint8(x, y) } } func BenchmarkSumUnit8Generic(b *testing.B) { x, y := generateUint8Slices() for i := 0; i < b.N; i++ { sumUint8Generic(x, y) } } func BenchmarkSumUnit16(b *testing.B) { x, y := generateUint16Slices() for i := 0; i < b.N; i++ { SumUint16(x, y) } } func BenchmarkSumUnit16Generic(b *testing.B) { x, y := generateUint16Slices() for i := 0; i < b.N; i++ { sumUint16Generic(x, y) } } func BenchmarkSumUnit32(b *testing.B) { x, y := generateUint32Slices() for i := 0; i < b.N; i++ { SumUint32(x, y) } } func BenchmarkSumUnit32Generic(b *testing.B) { x, y := generateUint32Slices() for i := 0; i < b.N; i++ { sumUint32Generic(x, y) } } func BenchmarkSumUnit64(b *testing.B) { x, y := generateUint64Slices() for i := 0; i < b.N; i++ { SumUint64(x, y) } } func BenchmarkSumUnit64Generic(b *testing.B) { x, y := generateUint64Slices() for i := 0; i < b.N; i++ { sumUint64Generic(x, y) } }