-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathbench_test.go
118 lines (107 loc) · 3.74 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
package sjson_test
import (
"compress/gzip"
"encoding/json"
"github.com/vovkasm/go-sjson"
"io/ioutil"
"os"
"testing"
)
var (
sample = `[1434751206.666,"127.0.0.1",[{"site":"Odnolalalalali","uniq2":"db","env":"Canvas","value":"0","project":"SuperGame","type":"VIRAL.requestSuccess.notification_sns","uniq1":"friend_touch"},{"env":"Canvas","value":1,"project":"SuperGame","uniq2":"db","type":"VIRAL.requestFailed.notification_sns","uniq1":"friend_touch","site":"Odnolalalalali"},{"site":"Odnolalalalali","type":"VIRAL.requestInvalid.notification_sns","uniq1":"friend_touch","uniq2":"db","env":"Canvas","value":"0","project":"SuperGame"},{"type":"Viral.requestShortened.notification_sns","uniq1":"friend_touch","env":"Canvas","uniq2":"text","value":100,"project":"SuperGame","site":"Odnolalalalali"}]]`
sampleStringFast = `"stringwoquoting"`
sampleStringEsc = `"fdvsdfvs\"dfvsdfvfds"`
sampleNumInt = `1234`
sampleNum = `123.45e-2`
sampleObject = `{"key1":"val1","key2":123}`
sampleArray = `[true,false,true,false,true,false]`
sampleArrayLong = `[true,false,true,false,true,false,true,false,true,false,true,false]`
)
var result interface{}
func BenchmarkSample_sjson(b *testing.B) { benchSimple(b, sample) }
func BenchmarkSample__json(b *testing.B) { benchStdjsn(b, sample) }
func BenchmarkFastString_sjson(b *testing.B) { benchSimple(b, sampleStringFast) }
func BenchmarkFastString__json(b *testing.B) { benchStdjsn(b, sampleStringFast) }
func BenchmarkEscString_sjson(b *testing.B) { benchSimple(b, sampleStringEsc) }
func BenchmarkEscString__json(b *testing.B) { benchStdjsn(b, sampleStringEsc) }
func BenchmarkNumInt_sjson(b *testing.B) { benchSimple(b, sampleNumInt) }
func BenchmarkNumInt__json(b *testing.B) { benchStdjsn(b, sampleNumInt) }
func BenchmarkNum_sjson(b *testing.B) { benchSimple(b, sampleNum) }
func BenchmarkNum__json(b *testing.B) { benchStdjsn(b, sampleNum) }
func BenchmarkObject_sjson(b *testing.B) { benchSimple(b, sampleObject) }
func BenchmarkObject__json(b *testing.B) { benchStdjsn(b, sampleObject) }
func BenchmarkArray_sjson(b *testing.B) { benchSimple(b, sampleArray) }
func BenchmarkArray__json(b *testing.B) { benchStdjsn(b, sampleArray) }
func BenchmarkArrayLong_sjson(b *testing.B) { benchSimple(b, sampleArrayLong) }
func BenchmarkArrayLong__json(b *testing.B) { benchStdjsn(b, sampleArrayLong) }
func benchSimple(b *testing.B, data string) {
for n := 0; n < b.N; n++ {
r, err := sjson.Decode(data)
if err != nil {
b.Fatalf("Error in json: %v\n", err)
}
result = r
}
b.SetBytes(int64(len(data)))
}
func benchStdjsn(b *testing.B, data string) {
datab := []byte(data)
for n := 0; n < b.N; n++ {
var r interface{}
err := json.Unmarshal(datab, &r)
if err != nil {
b.Fatalf("Error in json: %v\n", err)
}
result = r
}
b.SetBytes(int64(len(data)))
}
var codeJSON []byte
var codeJSONStr string
func codeInit() {
f, err := os.Open("testdata/code.json.gz")
if err != nil {
panic(err)
}
defer f.Close()
gz, err := gzip.NewReader(f)
if err != nil {
panic(err)
}
data, err := ioutil.ReadAll(gz)
if err != nil {
panic(err)
}
codeJSON = data
codeJSONStr = string(data)
}
func BenchmarkCode_sjson(b *testing.B) {
if codeJSON == nil {
b.StopTimer()
codeInit()
b.StartTimer()
}
for i := 0; i < b.N; i++ {
r, err := sjson.Decode(codeJSONStr)
if err != nil {
b.Fatal("Unmmarshal:", err)
}
result = r
}
b.SetBytes(int64(len(codeJSON)))
}
func BenchmarkCode__json(b *testing.B) {
if codeJSON == nil {
b.StopTimer()
codeInit()
b.StartTimer()
}
for i := 0; i < b.N; i++ {
var r interface{}
if err := json.Unmarshal(codeJSON, &r); err != nil {
b.Fatal("Unmmarshal:", err)
}
result = r
}
b.SetBytes(int64(len(codeJSON)))
}