forked from guregu/dynamo
-
Notifications
You must be signed in to change notification settings - Fork 0
/
bench_test.go
152 lines (125 loc) · 2.47 KB
/
bench_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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package dynamo
import (
"testing"
"time"
"github.com/guregu/toki"
)
var (
arbitraryNumber = 555
veryComplexObject = fancyObject{
User: 613,
Test: customMarshaler(1),
ContentID: "監獄学園",
Page: 1,
SkipThis: "i should disappear",
Bonus: &arbitraryNumber,
TestText: toki.MustParseTime("1:2:3"),
StringSlice: []string{"A", "B", "C", "QQQ"},
embedMe: embedMe{
Extra: true,
},
Greeting: other{
Hello: "world",
},
Features: map[string]bool{
"課金": true,
"dlc": true,
},
Something: nil,
}
)
func BenchmarkEncodeSimple(b *testing.B) {
item := simpleObject{
User: 666,
Other: "hello",
}
for n := 0; n < b.N; n++ {
marshalItem(&item)
}
}
func BenchmarkEncodeSimpleMap(b *testing.B) {
item := map[string]interface{}{
"User": 666,
"Other": "hello",
}
for n := 0; n < b.N; n++ {
marshalItem(&item)
}
}
func BenchmarkDecodeSimple(b *testing.B) {
item := simpleObject{
User: 666,
Other: "hello",
}
av, _ := marshalItem(item)
var out simpleObject
for n := 0; n < b.N; n++ {
unmarshalItem(av, &out)
}
}
func BenchmarkDecodeSimpleMap(b *testing.B) {
item := simpleObject{
User: 666,
Other: "hello",
}
av, _ := marshalItem(item)
var out map[string]interface{}
for n := 0; n < b.N; n++ {
unmarshalItem(av, &out)
}
}
func BenchmarkEncodeVeryComplex(b *testing.B) {
for n := 0; n < b.N; n++ {
marshalItem(&veryComplexObject)
}
}
func BenchmarkDecodeVeryComplex(b *testing.B) {
av, _ := marshalItem(veryComplexObject)
var out fancyObject
for n := 0; n < b.N; n++ {
unmarshalItem(av, &out)
}
}
func BenchmarkDecodeVeryComplexMap(b *testing.B) {
av, _ := marshalItem(veryComplexObject)
var out map[string]interface{}
for n := 0; n < b.N; n++ {
unmarshalItem(av, &out)
}
}
type simpleObject struct {
User int
Other string
}
type fancyObject struct {
User int `dynamo:"UserID"`
Test customMarshaler
ContentID string
Page int
SkipThis string `dynamo:"-"`
Bonus *int `dynamo:",omitempty"`
TestText toki.Time
SkipMePlz time.Time `dynamo:",omitempty"`
StringSlice []string
embedMe
Greeting other
Features map[string]bool
Something interface{}
Check SuperComplex
}
type embedMe struct {
Extra bool
}
type other struct {
Hello string
}
type SuperComplex []struct {
HelpMe struct {
FFF []int `dynamo:",set"`
}
}
func makeSuperComplex() SuperComplex {
sc := make(SuperComplex, 2)
sc[0].HelpMe.FFF = []int{1, 2, 3}
return sc
}