protobuf-go/internal/encoding/json/bench_test.go
Herbie Ong d2ece139c6 encoding/protojson: refactor to follow prototext pattern
All unmarshaling error messages now contain line number and column
information, except for the following errors:
- `unexpected EOF`
- `no support for proto1 MessageSets`
- `required fields X not set`

Changes to internal/encoding/json:
- Moved encoding funcs in string.go and number.go into encode.go.
- Separated out encoding kind constants from decoding ones.
- Renamed file string.go to decode_string.go.
- Renamed file number.go to decode_number.go.
- Renamed Type struct to Kind.
- Renamed Value struct to Token.
- Token accessor methods no longer return error.
  Name, Bool, ParsedString will panic if called on the wrong kind.
  Float, Int, Uint has ok bool result to check against.
- Changed Peek to return Token and error.

Changes to encoding/protojson:
- Updated internal/encoding/json API calls.
- Added line info on most unmarshaling error messages and kept
  description simple and consistent.

Change-Id: Ie50456694f2214c5c4fafd2c9b9239680da0deec
Reviewed-on: https://go-review.googlesource.com/c/protobuf/+/218978
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
2020-02-11 22:59:08 +00:00

64 lines
1.3 KiB
Go

// Copyright 2019 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package json_test
import (
"testing"
"google.golang.org/protobuf/internal/encoding/json"
)
func BenchmarkFloat(b *testing.B) {
input := []byte(`1.797693134862315708145274237317043567981e+308`)
for i := 0; i < b.N; i++ {
dec := json.NewDecoder(input)
val, err := dec.Read()
if err != nil {
b.Fatal(err)
}
if _, ok := val.Float(64); !ok {
b.Fatal("not a flaot")
}
}
}
func BenchmarkInt(b *testing.B) {
input := []byte(`922337203.6854775807e+10`)
for i := 0; i < b.N; i++ {
dec := json.NewDecoder(input)
val, err := dec.Read()
if err != nil {
b.Fatal(err)
}
if _, ok := val.Int(64); !ok {
b.Fatal("not an int64")
}
}
}
func BenchmarkString(b *testing.B) {
input := []byte(`"abcdefghijklmnopqrstuvwxyz0123456789\\n\\t"`)
for i := 0; i < b.N; i++ {
dec := json.NewDecoder(input)
val, err := dec.Read()
if err != nil {
b.Fatal(err)
}
_ = val.ParsedString()
}
}
func BenchmarkBool(b *testing.B) {
input := []byte(`true`)
for i := 0; i < b.N; i++ {
dec := json.NewDecoder(input)
val, err := dec.Read()
if err != nil {
b.Fatal(err)
}
_ = val.Bool()
}
}