Skip to content

Commit a3a4298

Browse files
authored
add mum to benchmarks (alecthomas#90)
1 parent 3d1dd87 commit a3a4298

File tree

4 files changed

+115
-0
lines changed

4 files changed

+115
-0
lines changed

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ module github.com/alecthomas/go_serialization_benchmarks
33
go 1.13
44

55
require (
6+
github.com/Hatch1fy/errors v0.1.0 // indirect
67
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863
78
github.com/alecthomas/binary v0.0.0-20171101084825-6e8df1b1fb9d
89
github.com/andyleap/gencode v0.0.0-20171124163308-e1423834d4b4 // indirect
@@ -19,6 +20,7 @@ require (
1920
github.com/hprose/hprose-go v0.0.0-20161031134501-83de97da5004
2021
github.com/hprose/hprose-golang v2.0.4+incompatible
2122
github.com/ikkerens/ikeapack v1.5.1
23+
github.com/itsmontoya/mum v0.3.2
2224
github.com/json-iterator/go v1.1.7
2325
github.com/kr/pretty v0.1.0 // indirect
2426
github.com/linkedin/goavro v2.1.0+incompatible

go.sum

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
github.com/Hatch1fy/errors v0.1.0 h1:O0eV+wlv/uF++/IQFxPaTVQOCHxzEXFFX0cMrIs8GSs=
2+
github.com/Hatch1fy/errors v0.1.0/go.mod h1:ghvTU0wQ49AH7DcAfdKmWjBDjgEOoc1ltdPhDlGPz7w=
13
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863 h1:BRrxwOZBolJN4gIwvZMJY1tzqBvQgpaZiQRuIDD40jM=
24
github.com/Sereal/Sereal v0.0.0-20190618215532-0b8ac451a863/go.mod h1:D0JMgToj/WdxCgd30Kc1UcA9E+WdZoJqeVOuYW7iTBM=
35
github.com/alecthomas/binary v0.0.0-20171101084825-6e8df1b1fb9d h1:ndgr53uGotk3W0l6njh0jusaJw8+ZwZn8EKnx8QauJk=
@@ -34,6 +36,16 @@ github.com/hprose/hprose-golang v2.0.4+incompatible h1:xUZLSShgv5+KCfK3RCsac8DyW
3436
github.com/hprose/hprose-golang v2.0.4+incompatible/go.mod h1:FfwwCUQFF3f5t03SrzdSghXVZkC01uEJS6Xwzcz0NOo=
3537
github.com/ikkerens/ikeapack v1.5.1 h1:1fW1eazVsY4/ZTvP14JVxzllfeeRGMBrFEbkhJpxRD0=
3638
github.com/ikkerens/ikeapack v1.5.1/go.mod h1:LeFYIQ/VyvJZrwLoDZ46NJTiUrjjlo/4T0bRmxUS20I=
39+
github.com/itsmontoya/mum v0.1.1 h1:EY7x3jamv9hoInopOtANpV3dBOQ8B+IVYODzmlV+BgI=
40+
github.com/itsmontoya/mum v0.1.1/go.mod h1:TwPOHgiVpDvdtWgSQmW9J0ISlRSwW1J9RnmKEkGQZIY=
41+
github.com/itsmontoya/mum v0.2.0 h1:iNne+bcglhdLp4Vvg3oLATChwumB0K41vrVrZzsejic=
42+
github.com/itsmontoya/mum v0.2.0/go.mod h1:ARRdX1nkNu/x+wPNQNcX4UGPQPl0b33+gFFUhk2a1Oo=
43+
github.com/itsmontoya/mum v0.3.0 h1:ISw2jiTGt9ozSKSQSNw2TcHj7/ocgDtTowJ30Y833GE=
44+
github.com/itsmontoya/mum v0.3.0/go.mod h1:ARRdX1nkNu/x+wPNQNcX4UGPQPl0b33+gFFUhk2a1Oo=
45+
github.com/itsmontoya/mum v0.3.1 h1:Jpd9EpQ7RcUAwOVzHeVM30BgIoNGwQutLPW9DxaqZII=
46+
github.com/itsmontoya/mum v0.3.1/go.mod h1:ARRdX1nkNu/x+wPNQNcX4UGPQPl0b33+gFFUhk2a1Oo=
47+
github.com/itsmontoya/mum v0.3.2 h1:yCU2K1tJ74CFtZ1aC/hY5qSYMUYO6vXWv326pHPNhhs=
48+
github.com/itsmontoya/mum v0.3.2/go.mod h1:ARRdX1nkNu/x+wPNQNcX4UGPQPl0b33+gFFUhk2a1Oo=
3749
github.com/json-iterator/go v1.1.7 h1:KfgG9LzI+pYjr4xvmz/5H4FXjokeP+rlHLhv3iH62Fo=
3850
github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
3951
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=

serialization_benchmarks_test.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1412,3 +1412,14 @@ func BenchmarkSSZNoTimeNoStringNoFloatAUnmarshal(b *testing.B) {
14121412
}
14131413
}
14141414
}
1415+
1416+
// github.com/itsmontoya/mum
1417+
func BenchmarkMumMarshal(b *testing.B) {
1418+
s := newMumSerializer()
1419+
benchMarshal(b, s)
1420+
}
1421+
1422+
func BenchmarkMumUnmarshal(b *testing.B) {
1423+
s := newMumSerializer()
1424+
benchUnmarshal(b, s)
1425+
}

structdef-mum.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
package goserbench
2+
3+
import (
4+
"fmt"
5+
"time"
6+
7+
"github.com/itsmontoya/mum"
8+
)
9+
10+
func newMumSerializer() *mumSerializer {
11+
var m mumSerializer
12+
m.w = mum.NewWriter(make([]byte, 0, 67))
13+
m.r = mum.NewReader(nil)
14+
return &m
15+
}
16+
17+
type mumSerializer struct {
18+
w *mum.Writer
19+
r *mum.Reader
20+
}
21+
22+
func (m *mumSerializer) Marshal(value interface{}) (bs []byte, err error) {
23+
encodee, ok := value.(mum.Encodee)
24+
if !ok {
25+
err = fmt.Errorf("invalid type, expected %t and received %t", encodee, value)
26+
return
27+
}
28+
29+
if err = m.w.Encode(encodee); err != nil {
30+
return
31+
}
32+
33+
bs = m.w.Bytes()
34+
m.w.Reset()
35+
return
36+
}
37+
38+
func (m *mumSerializer) Unmarshal(bs []byte, value interface{}) (err error) {
39+
decodee, ok := value.(mum.Decodee)
40+
if !ok {
41+
err = fmt.Errorf("invalid type, expected %t and received %t", decodee, value)
42+
return
43+
}
44+
45+
m.r.SetBuffer(bs)
46+
return m.r.Decode(decodee)
47+
}
48+
49+
// MarshalMum is an encoding helper func
50+
func (a *A) MarshalMum(enc *mum.Encoder) (err error) {
51+
enc.String(a.Name)
52+
enc.Int64(a.BirthDay.UnixNano())
53+
enc.String(a.Phone)
54+
enc.Int(a.Siblings)
55+
enc.Bool(a.Spouse)
56+
enc.Float64(a.Money)
57+
return
58+
}
59+
60+
// UnmarshalMum is an decoding helper func
61+
func (a *A) UnmarshalMum(dec *mum.Decoder) (err error) {
62+
if a.Name, err = dec.String(); err != nil {
63+
return
64+
}
65+
66+
var unixNano int64
67+
if unixNano, err = dec.Int64(); err != nil {
68+
return
69+
}
70+
71+
a.BirthDay = time.Unix(0, unixNano)
72+
73+
if a.Phone, err = dec.String(); err != nil {
74+
return
75+
}
76+
77+
if a.Siblings, err = dec.Int(); err != nil {
78+
return
79+
}
80+
81+
if a.Spouse, err = dec.Bool(); err != nil {
82+
return
83+
}
84+
85+
if a.Money, err = dec.Float64(); err != nil {
86+
return
87+
}
88+
89+
return
90+
}

0 commit comments

Comments
 (0)