-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathext_bench_test.go
116 lines (105 loc) · 2.71 KB
/
ext_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
package jsoniterpb_test
import (
"testing"
gofuzz "github.com/google/gofuzz"
jsoniter "github.com/json-iterator/go"
"github.com/molon/jsoniterpb"
testv1 "github.com/molon/jsoniterpb/internal/gen/go/test/v1"
"google.golang.org/protobuf/encoding/protojson"
)
func BenchmarkWrite(b *testing.B) {
f := appendFuzzFuncs(gofuzz.New())
var ms []*testv1.All
for i := 0; i < 10000; i++ {
var all testv1.All
f.Fuzz(&all)
ms = append(ms, &all)
}
b.ReportAllocs()
b.ResetTimer()
b.Run("protojson", func(b *testing.B) {
for i := 0; i < b.N; i++ {
m := ms[i%len(ms)]
_, err := protojson.Marshal(m)
if err != nil {
b.Fatal(err)
}
}
})
cfg := jsoniter.Config{SortMapKeys: true, DisallowUnknownFields: true}.Froze()
cfg.RegisterExtension(&jsoniterpb.ProtoExtension{})
b.Run("jsoniter", func(b *testing.B) {
for i := 0; i < b.N; i++ {
m := ms[i%len(ms)]
_, err := cfg.Marshal(m)
if err != nil {
b.Fatal(err)
}
}
})
cfg = jsoniter.Config{SortMapKeys: false, DisallowUnknownFields: false}.Froze()
cfg.RegisterExtension(&jsoniterpb.ProtoExtension{PermitInvalidUTF8: true})
b.Run("jsoniter-fast", func(b *testing.B) {
for i := 0; i < b.N; i++ {
m := ms[i%len(ms)]
_, err := cfg.Marshal(m)
if err != nil {
b.Fatal(err)
}
}
})
// cfg = jsoniter.Config{SortMapKeys: false, DisallowUnknownFields: false}.Froze()
// b.Run("jsoniter-noext", func(b *testing.B) {
// for i := 0; i < b.N; i++ {
// m := ms[i%len(ms)]
// _, err := cfg.Marshal(m)
// if err != nil {
// b.Fatal(err)
// }
// }
// })
}
func BenchmarkRead(b *testing.B) {
f := appendFuzzFuncs(gofuzz.New())
var buffers [][]byte
for i := 0; i < 10000; i++ {
var all testv1.All
f.Fuzz(&all)
buffer, _ := protojson.Marshal(&all)
buffers = append(buffers, buffer)
}
var all testv1.All
b.ReportAllocs()
b.ResetTimer()
b.Run("protojson", func(b *testing.B) {
for i := 0; i < b.N; i++ {
buffer := buffers[i%len(buffers)]
err := protojson.Unmarshal(buffer, &all)
if err != nil {
b.Fatal(err)
}
}
})
cfg := jsoniter.Config{SortMapKeys: true, DisallowUnknownFields: true}.Froze()
cfg.RegisterExtension(&jsoniterpb.ProtoExtension{})
b.Run("jsoniter", func(b *testing.B) {
for i := 0; i < b.N; i++ {
buffer := buffers[i%len(buffers)]
err := cfg.Unmarshal(buffer, &all)
if err != nil {
b.Fatal(err)
}
}
})
cfg = jsoniter.Config{SortMapKeys: true, DisallowUnknownFields: true}.Froze()
cfg.RegisterExtension(&jsoniterpb.ProtoExtension{DisableFuzzyDecode: true})
b.Run("jsoniter-nofuzzydecode", func(b *testing.B) {
for i := 0; i < b.N; i++ {
buffer := buffers[i%len(buffers)]
err := cfg.Unmarshal(buffer, &all)
if err != nil {
b.Fatal(err)
}
}
})
}