Files
deep_go/lessons/structs/dod/comparison_test.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
}