108 lines
2.0 KiB
Go
108 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"testing"
|
|
)
|
|
|
|
// go test -bench=. comparison_test.go
|
|
|
|
type OODStyle struct {
|
|
Field1 int
|
|
Field2 string
|
|
Field3 int
|
|
Field4 string
|
|
Field5 int
|
|
Field6 string
|
|
Field7 int
|
|
Field8 string
|
|
}
|
|
|
|
type DODStyle struct {
|
|
Field1 []int
|
|
Field2 []string
|
|
Field3 []int
|
|
Field4 []string
|
|
Field5 []int
|
|
Field6 []string
|
|
Field7 []int
|
|
Field8 []string
|
|
}
|
|
|
|
var Sink int
|
|
|
|
func BenchmarkDOD(b *testing.B) {
|
|
r := rand.New(rand.NewSource(42))
|
|
data := generateDOD(r, 1_000_000)
|
|
b.ResetTimer()
|
|
|
|
Sink = 0
|
|
for i := 0; i < b.N; i++ {
|
|
for j, f1 := range data.Field1 {
|
|
if f1 == 500000 {
|
|
Sink = j
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkOOD(b *testing.B) {
|
|
r := rand.New(rand.NewSource(42))
|
|
data := generateOOD(r, 1_000_000)
|
|
b.ResetTimer()
|
|
|
|
Sink = 0
|
|
for i := 0; i < b.N; i++ {
|
|
for j, ant := range data {
|
|
if ant.Field1 == 500000 {
|
|
Sink = j
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func generateOOD(r *rand.Rand, size int) []OODStyle {
|
|
data := make([]OODStyle, size)
|
|
for i := range data {
|
|
data[i] = OODStyle{
|
|
Field1: r.Intn(1000),
|
|
Field2: fmt.Sprintf("field2-%d", r.Intn(1000)),
|
|
Field3: r.Intn(1000),
|
|
Field4: fmt.Sprintf("field4-%d", r.Intn(1000)),
|
|
Field5: r.Intn(1000),
|
|
Field6: fmt.Sprintf("field6-%d", r.Intn(1000)),
|
|
Field7: r.Intn(1000),
|
|
Field8: fmt.Sprintf("fiel8-%d", r.Intn(1000)),
|
|
}
|
|
}
|
|
|
|
return data
|
|
}
|
|
|
|
func generateDOD(r *rand.Rand, size int) DODStyle {
|
|
data := DODStyle{
|
|
Field1: make([]int, size),
|
|
Field2: make([]string, size),
|
|
Field3: make([]int, size),
|
|
Field4: make([]string, size),
|
|
Field5: make([]int, size),
|
|
Field6: make([]string, size),
|
|
Field7: make([]int, size),
|
|
Field8: make([]string, size),
|
|
}
|
|
|
|
for i := 0; i < size; i++ {
|
|
data.Field1[i] = r.Intn(1000)
|
|
data.Field2[i] = fmt.Sprintf("field2-%d", r.Intn(1000))
|
|
data.Field3[i] = r.Intn(1000)
|
|
data.Field4[i] = fmt.Sprintf("field4-%d", r.Intn(1000))
|
|
data.Field5[i] = r.Intn(1000)
|
|
data.Field6[i] = fmt.Sprintf("field6-%d", r.Intn(1000))
|
|
data.Field7[i] = r.Intn(1000)
|
|
data.Field8[i] = fmt.Sprintf("fiel8-%d", r.Intn(1000))
|
|
}
|
|
|
|
return data
|
|
}
|