mirror of
https://github.com/zhufuyi/sponge.git
synced 2025-10-23 17:05:02 +08:00
128 lines
2.1 KiB
Go
128 lines
2.1 KiB
Go
package encoding
|
|
|
|
import (
|
|
"errors"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
type obj struct {
|
|
ID uint64 `json:"id"`
|
|
Name string `json:"name"`
|
|
}
|
|
|
|
func xEncoding(e Encoding) error {
|
|
o1 := &obj{ID: 1, Name: "foo"}
|
|
data, err := Marshal(e, o1)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
o2 := &obj{}
|
|
err = Unmarshal(e, data, o2)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if o1.ID != o2.ID {
|
|
return errors.New("Unmarshal failed")
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func TestEncoding(t *testing.T) {
|
|
err := xEncoding(GobEncoding{})
|
|
assert.NoError(t, err)
|
|
|
|
err = xEncoding(JSONEncoding{})
|
|
assert.NoError(t, err)
|
|
|
|
err = xEncoding(JSONGzipEncoding{})
|
|
assert.NoError(t, err)
|
|
|
|
err = xEncoding(JSONSnappyEncoding{})
|
|
assert.NoError(t, err)
|
|
|
|
err = xEncoding(MsgPackEncoding{})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
type codec struct{}
|
|
|
|
func (c codec) Marshal(v interface{}) ([]byte, error) {
|
|
return []byte{}, nil
|
|
}
|
|
|
|
func (c codec) Unmarshal(data []byte, v interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (c codec) Name() string {
|
|
return "json"
|
|
}
|
|
|
|
func TestRegisterCodec(t *testing.T) {
|
|
defer func() { recover() }()
|
|
|
|
RegisterCodec(&codec{})
|
|
c := GetCodec("json")
|
|
assert.NotNil(t, c)
|
|
|
|
RegisterCodec(nil)
|
|
}
|
|
|
|
func BenchmarkJsonMarshal(b *testing.B) {
|
|
a := make([]int, 0, 400)
|
|
for i := 0; i < 400; i++ {
|
|
a = append(a, i)
|
|
}
|
|
jsonEncoding := JSONEncoding{}
|
|
for n := 0; n < b.N; n++ {
|
|
_, err := jsonEncoding.Marshal(a)
|
|
if err != nil {
|
|
b.Error(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkJsonUnmarshal(b *testing.B) {
|
|
a := make([]int, 0, 400)
|
|
for i := 0; i < 400; i++ {
|
|
a = append(a, i)
|
|
}
|
|
jsonEncoding := JSONEncoding{}
|
|
data, err := jsonEncoding.Marshal(a)
|
|
if err != nil {
|
|
b.Error(err)
|
|
}
|
|
var result []int
|
|
for n := 0; n < b.N; n++ {
|
|
err = jsonEncoding.Unmarshal(data, &result)
|
|
if err != nil {
|
|
b.Error(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func BenchmarkMsgpack(b *testing.B) {
|
|
// run the Fib function b.N times
|
|
a := make([]int, 400)
|
|
for i := 0; i < 400; i++ {
|
|
a = append(a, i)
|
|
}
|
|
msgPackEncoding := MsgPackEncoding{}
|
|
data, err := msgPackEncoding.Marshal(a)
|
|
if err != nil {
|
|
b.Error(err)
|
|
}
|
|
var result []int
|
|
for n := 0; n < b.N; n++ {
|
|
err = msgPackEncoding.Unmarshal(data, &result)
|
|
if err != nil {
|
|
b.Error(err)
|
|
}
|
|
}
|
|
}
|