Исходники и презентации
This commit is contained in:
107
lessons/structs/dod/comparison_test.go
Normal file
107
lessons/structs/dod/comparison_test.go
Normal file
@ -0,0 +1,107 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user