...
1 package jsonutil_test
2
3 import (
4 "encoding/json"
5 "io"
6 "reflect"
7 "strings"
8 "testing"
9 "time"
10
11 "github.com/cli/shurcooL-graphql"
12 "github.com/cli/shurcooL-graphql/internal/jsonutil"
13 )
14
15 func TestUnmarshalGraphQL_benchmark(t *testing.T) {
16
24 type query struct {
25 Viewer struct {
26 Login graphql.String
27 CreatedAt time.Time
28 }
29 }
30 var got query
31 err := jsonutil.UnmarshalGraphQL([]byte(`{
32 "viewer": {
33 "login": "shurcooL-test",
34 "createdAt": "2017-06-29T04:12:01Z"
35 }
36 }`), &got)
37 if err != nil {
38 t.Fatal(err)
39 }
40 var want query
41 want.Viewer.Login = "shurcooL-test"
42 want.Viewer.CreatedAt = time.Unix(1498709521, 0).UTC()
43 if !reflect.DeepEqual(got, want) {
44 t.Error("not equal")
45 }
46 }
47
48 func BenchmarkUnmarshalGraphQL(b *testing.B) {
49 type query struct {
50 Viewer struct {
51 Login graphql.String
52 CreatedAt time.Time
53 }
54 }
55 for i := 0; i < b.N; i++ {
56 now := time.Now().UTC()
57 var got query
58 err := jsonutil.UnmarshalGraphQL([]byte(`{
59 "viewer": {
60 "login": "shurcooL-test",
61 "createdAt": "`+now.Format(time.RFC3339Nano)+`"
62 }
63 }`), &got)
64 if err != nil {
65 b.Fatal(err)
66 }
67 var want query
68 want.Viewer.Login = "shurcooL-test"
69 want.Viewer.CreatedAt = now
70 if !reflect.DeepEqual(got, want) {
71 b.Error("not equal")
72 }
73 }
74 }
75
76 func BenchmarkJSONUnmarshal(b *testing.B) {
77 type query struct {
78 Viewer struct {
79 Login graphql.String
80 CreatedAt time.Time
81 }
82 }
83 for i := 0; i < b.N; i++ {
84 now := time.Now().UTC()
85 var got query
86 err := json.Unmarshal([]byte(`{
87 "viewer": {
88 "login": "shurcooL-test",
89 "createdAt": "`+now.Format(time.RFC3339Nano)+`"
90 }
91 }`), &got)
92 if err != nil {
93 b.Fatal(err)
94 }
95 var want query
96 want.Viewer.Login = "shurcooL-test"
97 want.Viewer.CreatedAt = now
98 if !reflect.DeepEqual(got, want) {
99 b.Error("not equal")
100 }
101 }
102 }
103
104 func BenchmarkJSONTokenize(b *testing.B) {
105 for i := 0; i < b.N; i++ {
106 now := time.Now().UTC()
107 dec := json.NewDecoder(strings.NewReader(`{
108 "viewer": {
109 "login": "shurcooL-test",
110 "createdAt": "` + now.Format(time.RFC3339Nano) + `"
111 }
112 }`))
113 var tokens int
114 for {
115 _, err := dec.Token()
116 if err == io.EOF {
117 break
118 } else if err != nil {
119 b.Error(err)
120 }
121 tokens++
122 }
123 if tokens != 9 {
124 b.Error("not 9 tokens")
125 }
126 }
127 }
128
View as plain text