~ubuntu-branches/ubuntu/utopic/gccgo-go/utopic

« back to all changes in this revision

Viewing changes to test/bench/go1/json_test.go

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2014-01-27 09:18:55 UTC
  • Revision ID: package-import@ubuntu.com-20140127091855-zxfshmykfsyyw4b2
Tags: upstream-1.2
ImportĀ upstreamĀ versionĀ 1.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// Copyright 2011 The Go Authors.  All rights reserved.
 
2
// Use of this source code is governed by a BSD-style
 
3
// license that can be found in the LICENSE file.
 
4
 
 
5
// This benchmark tests JSON encoding and decoding performance.
 
6
 
 
7
package go1
 
8
 
 
9
import (
 
10
        "bytes"
 
11
        "compress/bzip2"
 
12
        "encoding/base64"
 
13
        "encoding/json"
 
14
        "io"
 
15
        "io/ioutil"
 
16
        "testing"
 
17
)
 
18
 
 
19
var (
 
20
        jsonbytes = makeJsonBytes()
 
21
        jsondata  = makeJsonData()
 
22
)
 
23
 
 
24
func makeJsonBytes() []byte {
 
25
        var r io.Reader
 
26
        r = bytes.NewReader(bytes.Replace(jsonbz2_base64, []byte{'\n'}, nil, -1))
 
27
        r = base64.NewDecoder(base64.StdEncoding, r)
 
28
        r = bzip2.NewReader(r)
 
29
        b, err := ioutil.ReadAll(r)
 
30
        if err != nil {
 
31
                panic(err)
 
32
        }
 
33
        return b
 
34
}
 
35
 
 
36
func makeJsonData() JSONResponse {
 
37
        var v JSONResponse
 
38
        if err := json.Unmarshal(jsonbytes, &v); err != nil {
 
39
                panic(err)
 
40
        }
 
41
        return v
 
42
}
 
43
 
 
44
type JSONResponse struct {
 
45
        Tree     *JSONNode `json:"tree"`
 
46
        Username string    `json:"username"`
 
47
}
 
48
 
 
49
type JSONNode struct {
 
50
        Name     string      `json:"name"`
 
51
        Kids     []*JSONNode `json:"kids"`
 
52
        CLWeight float64     `json:"cl_weight"`
 
53
        Touches  int         `json:"touches"`
 
54
        MinT     int64       `json:"min_t"`
 
55
        MaxT     int64       `json:"max_t"`
 
56
        MeanT    int64       `json:"mean_t"`
 
57
}
 
58
 
 
59
func jsondec() {
 
60
        var r JSONResponse
 
61
        if err := json.Unmarshal(jsonbytes, &r); err != nil {
 
62
                panic(err)
 
63
        }
 
64
        _ = r
 
65
}
 
66
 
 
67
func jsonenc() {
 
68
        buf, err := json.Marshal(&jsondata)
 
69
        if err != nil {
 
70
                panic(err)
 
71
        }
 
72
        _ = buf
 
73
}
 
74
 
 
75
func BenchmarkJSONEncode(b *testing.B) {
 
76
        b.SetBytes(int64(len(jsonbytes)))
 
77
        for i := 0; i < b.N; i++ {
 
78
                jsonenc()
 
79
        }
 
80
}
 
81
 
 
82
func BenchmarkJSONDecode(b *testing.B) {
 
83
        b.SetBytes(int64(len(jsonbytes)))
 
84
        for i := 0; i < b.N; i++ {
 
85
                jsondec()
 
86
        }
 
87
}