-
Notifications
You must be signed in to change notification settings - Fork 3
/
benchmark_test.go
111 lines (93 loc) · 2 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
99
100
101
102
103
104
105
106
107
108
109
110
111
package jsonry_test
import (
"bytes"
"encoding/json"
"reflect"
"testing"
"code.cloudfoundry.org/jsonry"
)
type container struct {
A []int `jsonry:"a"`
C interface{} `jsonry:"b.c"`
D string `jsonry:"b.d"`
}
const marshaled = `{"a":[1,2,3],"b":{"c":null,"d":"hello"}}`
func unmarshaled() container {
return container{
A: []int{1, 2, 3},
C: nil,
D: "hello",
}
}
func BenchmarkUnmarshal(b *testing.B) {
b.Run("JSONry", func(b *testing.B) {
var receiver container
b.ResetTimer()
for i := 0; i < b.N; i++ {
jsonry.Unmarshal([]byte(marshaled), &receiver)
}
b.StopTimer()
if !reflect.DeepEqual(receiver, unmarshaled()) {
b.Fatalf("received struct not equal")
}
})
b.Run("JSON", func(b *testing.B) {
var result container
b.ResetTimer()
for i := 0; i < b.N; i++ {
var receiver struct {
A []int `json:"a"`
B struct {
C interface{} `json:"c"`
D string `json:"d"`
} `json:"b"`
}
json.Unmarshal([]byte(marshaled), &receiver)
result = container{
A: receiver.A,
C: receiver.B.C,
D: receiver.B.D,
}
}
b.StopTimer()
if !reflect.DeepEqual(result, unmarshaled()) {
b.Fatalf("received struct not equal")
}
})
}
func BenchmarkMarshal(b *testing.B) {
b.Run("JSONry", func(b *testing.B) {
u := unmarshaled()
var result []byte
b.ResetTimer()
for i := 0; i < b.N; i++ {
result, _ = jsonry.Marshal(u)
}
b.StopTimer()
if !bytes.Equal(result, []byte(marshaled)) {
b.Fatalf("received bytes not equal")
}
})
b.Run("JSON", func(b *testing.B) {
u := unmarshaled()
var result []byte
b.ResetTimer()
for i := 0; i < b.N; i++ {
var transmitter struct {
A []int `json:"a"`
B struct {
C interface{} `json:"c"`
D string `json:"d"`
} `json:"b"`
}
transmitter.A = u.A
transmitter.B.C = u.C
transmitter.B.D = u.D
result, _ = json.Marshal(transmitter)
}
b.StopTimer()
if !bytes.Equal(result, []byte(marshaled)) {
b.Fatalf("received bytes not equal")
}
})
}