59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
// Copyright (C) 2017 Michael J. Fromberger. All Rights Reserved.
|
|
|
|
package jrpc2
|
|
|
|
import (
|
|
"encoding/json"
|
|
"strconv"
|
|
"testing"
|
|
)
|
|
|
|
const payloadText = `{
|
|
"alpha": [1, 2, 3, 4, 5],
|
|
"bravo": true,
|
|
"charlie": {
|
|
"foo": ["xyz", "pdq"],
|
|
"bar": false,
|
|
"baz": 1.00003e+19
|
|
},
|
|
"delta": null,
|
|
"echo": 3.352391934e-19,
|
|
"foxtrot": "all your \"base\" are belong to us"
|
|
}`
|
|
|
|
const errMessage = "you did not do the correct thing and you should feel bad"
|
|
|
|
const methodName = "some long method name whatever"
|
|
|
|
func BenchmarkEncodeMessage(b *testing.B) {
|
|
msgs := jmessages{
|
|
{ID: []byte("12345"), M: methodName, R: []byte(payloadText)},
|
|
{ID: nil, M: methodName, R: []byte(payloadText)},
|
|
{ID: []byte("12345"), R: []byte(payloadText)},
|
|
{ID: []byte("12345"), E: &Error{Code: 12345, Message: errMessage}},
|
|
}
|
|
for i, msg := range msgs {
|
|
b.Run(strconv.Itoa(i+1)+"-std", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
json.Marshal(msg)
|
|
}
|
|
})
|
|
b.Run(strconv.Itoa(i+1)+"-custom", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
msg.toJSON()
|
|
}
|
|
})
|
|
}
|
|
|
|
b.Run("batch-std", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
json.Marshal(msgs)
|
|
}
|
|
})
|
|
b.Run("batch-custom", func(b *testing.B) {
|
|
for i := 0; i < b.N; i++ {
|
|
msgs.toJSON()
|
|
}
|
|
})
|
|
}
|