-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbenchmark_test.go
100 lines (74 loc) · 3.01 KB
/
benchmark_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package benchmark
import (
"github.com/dunkyboy/mongo-driver-bench/mgo"
"github.com/dunkyboy/mongo-driver-bench/mongo-go-driver"
"testing"
"github.com/dunkyboy/mongo-driver-bench/shared"
)
// save the test output somewhere global to force the compiler not to optimize it all away
var marshalResult []byte
var unmarshalResult interface{}
func BenchMarshal(b *testing.B, input interface{}, marshaler func(interface{}) []byte) {
var bytes []byte
for n := 0; n < b.N; n++ {
bytes = marshaler(input)
}
marshalResult = bytes
}
func BenchUnmarshal(b *testing.B, input []byte, output interface{}, unmarshaler func([]byte, interface{}) bool) {
var resultSuccess bool
for n := 0; n < b.N; n++ {
resultSuccess = unmarshaler(input, output)
}
if resultSuccess {
unmarshalResult = output
}
}
func BenchmarkMgoMarshalSmallStruct(b *testing.B) {
BenchMarshal(b, shared.ASmallStruct, mgo.Marshaler)
}
func BenchmarkMgoMarshalSmallNestedStruct(b *testing.B) {
BenchMarshal(b, shared.ASmallNestedStruct, mgo.Marshaler)
}
func BenchmarkMgoMarshalLargeStruct(b *testing.B) {
BenchMarshal(b, shared.ALargerStruct, mgo.Marshaler)
}
func BenchmarkMgoMarshalLargeNestedStruct(b *testing.B) {
BenchMarshal(b, shared.ALargerNestedStruct, mgo.Marshaler)
}
func BenchmarkMgoUnmarshalSmallStruct(b *testing.B) {
BenchUnmarshal(b, mgo.Marshaler(shared.ASmallStruct), &shared.SmallStruct{}, mgo.Unmarshaler)
}
func BenchmarkMgoUnmarshalSmallNestedStruct(b *testing.B) {
BenchUnmarshal(b, mgo.Marshaler(shared.ASmallNestedStruct), &shared.SmallStructDepth9{}, mgo.Unmarshaler)
}
func BenchmarkMgoUnmarshalLargeStruct(b *testing.B) {
BenchUnmarshal(b, mgo.Marshaler(shared.ALargerStruct), &shared.LargerStruct{}, mgo.Unmarshaler)
}
func BenchmarkMgoUnmarshalLargeNestedStruct(b *testing.B) {
BenchUnmarshal(b, mgo.Marshaler(shared.ALargerNestedStruct), &shared.LargerStructDepth9{}, mgo.Unmarshaler)
}
func BenchmarkDriverMarshalSmallStruct(b *testing.B) {
BenchMarshal(b, shared.ASmallStruct, driver.Marshaler)
}
func BenchmarkDriverMarshalSmallNestedStruct(b *testing.B) {
BenchMarshal(b, shared.ASmallNestedStruct, driver.Marshaler)
}
func BenchmarkDriverMarshalLargeStruct(b *testing.B) {
BenchMarshal(b, shared.ALargerStruct, driver.Marshaler)
}
func BenchmarkDriverMarshalLargeNestedStruct(b *testing.B) {
BenchMarshal(b, shared.ALargerNestedStruct, driver.Marshaler)
}
func BenchmarkDriverUnmarshalSmallStruct(b *testing.B) {
BenchUnmarshal(b, driver.Marshaler(shared.ASmallStruct), &shared.SmallStruct{}, driver.Unmarshaler)
}
func BenchmarkDriverUnmarshalSmallNestedStruct(b *testing.B) {
BenchUnmarshal(b, driver.Marshaler(shared.ASmallNestedStruct), &shared.SmallStructDepth9{}, driver.Unmarshaler)
}
func BenchmarkDriverUnmarshalLargeStruct(b *testing.B) {
BenchUnmarshal(b, driver.Marshaler(shared.ALargerStruct), &shared.LargerStruct{}, driver.Unmarshaler)
}
func BenchmarkDriverUnmarshalLargeNestedStruct(b *testing.B) {
BenchUnmarshal(b, driver.Marshaler(shared.ALargerNestedStruct), &shared.LargerStructDepth9{}, driver.Unmarshaler)
}