Skip to content
This repository was archived by the owner on May 8, 2019. It is now read-only.

Commit 1a96793

Browse files
committed
cleanups and test improvements
1 parent e7dcf5d commit 1a96793

File tree

5 files changed

+62
-108
lines changed

5 files changed

+62
-108
lines changed

msgp/number.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@ import (
99
// It can decode itself from any of the native MessagePack number types.
1010
// The zero-value of Number is Int(0).
1111
type Number struct {
12-
// Internally, this is just a tagged union.
13-
// The raw bits of the number are stored the
14-
// same way regardless.
12+
// Internally, this is just a tagged union. The raw bits of
13+
// the number are stored the same way regardless.
1514
bits uint64
1615
typ Type
1716
}

msgp/write.go

Lines changed: 17 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -408,7 +408,7 @@ func (mw *Writer) WriteBool(b bool) error {
408408
return mw.push(mfalse)
409409
}
410410

411-
// WriteString writes a messagepack string to the writer.
411+
// WriteString writes a MessagePack string to the writer.
412412
// (This is NOT an implementation of io.StringWriter)
413413
func (mw *Writer) WriteString(s string) error {
414414
sz := uint32(len(s))
@@ -446,8 +446,7 @@ func (mw *Writer) WriteStringHeader(sz uint32) error {
446446
}
447447
}
448448

449-
// WriteStringFromBytes writes a 'str' object
450-
// from a []byte.
449+
// WriteStringFromBytes writes a 'str' object from a []byte.
451450
func (mw *Writer) WriteStringFromBytes(str []byte) error {
452451
sz := uint32(len(str))
453452
var err error
@@ -553,8 +552,8 @@ func (mw *Writer) WriteTime(t time.Time) error {
553552
return nil
554553
}
555554

556-
// WriteIntf writes the concrete type of 'v'.
557-
// WriteIntf will error if 'v' is not one of the following:
555+
// WriteIntf writes the concrete type of v.
556+
// WriteIntf will error if v is not one of the following:
558557
// - A bool, float, string, []byte, int, uint, or complex
559558
// - A map of supported types (with string keys)
560559
// - An array or slice of supported types
@@ -637,47 +636,45 @@ func (mw *Writer) WriteIntf(v interface{}) error {
637636
return &ErrUnsupportedType{val.Type()}
638637
}
639638

640-
func (mw *Writer) writeMap(v reflect.Value) (err error) {
639+
func (mw *Writer) writeMap(v reflect.Value) error {
641640
if v.Type().Key().Kind() != reflect.String {
642641
return errors.New("msgp: map keys must be strings")
643642
}
644643
ks := v.MapKeys()
645-
err = mw.WriteMapHeader(uint32(len(ks)))
644+
err := mw.WriteMapHeader(uint32(len(ks)))
646645
if err != nil {
647-
return
646+
return err
648647
}
649648
for _, key := range ks {
650649
val := v.MapIndex(key)
651650
err = mw.WriteString(key.String())
652651
if err != nil {
653-
return
652+
return err
654653
}
655654
err = mw.WriteIntf(val.Interface())
656655
if err != nil {
657-
return
656+
return err
658657
}
659658
}
660-
return
659+
return nil
661660
}
662661

663-
func (mw *Writer) writeSlice(v reflect.Value) (err error) {
664-
// is []byte
665-
if v.Type().ConvertibleTo(btsType) {
662+
func (mw *Writer) writeSlice(v reflect.Value) error {
663+
if v.Type().ConvertibleTo(btsType) { // is []byte
666664
return mw.WriteBytes(v.Bytes())
667665
}
668-
669666
sz := uint32(v.Len())
670-
err = mw.WriteArrayHeader(sz)
667+
err := mw.WriteArrayHeader(sz)
671668
if err != nil {
672-
return
669+
return err
673670
}
674671
for i := uint32(0); i < sz; i++ {
675672
err = mw.WriteIntf(v.Index(int(i)).Interface())
676673
if err != nil {
677-
return
674+
return err
678675
}
679676
}
680-
return
677+
return nil
681678
}
682679

683680
func (mw *Writer) writeStruct(v reflect.Value) error {
@@ -687,56 +684,9 @@ func (mw *Writer) writeStruct(v reflect.Value) error {
687684
return fmt.Errorf("msgp: unsupported type: %s", v.Type())
688685
}
689686

690-
func (mw *Writer) writeVal(v reflect.Value) error {
691-
692-
if !isSupported(v.Kind()) {
693-
return fmt.Errorf("msgp: msgp/enc: type %q not supported", v.Type())
694-
}
695-
696-
// shortcut for nil values
697-
if v.IsNil() {
698-
return mw.WriteNil()
699-
}
700-
701-
switch v.Kind() {
702-
case reflect.Bool:
703-
return mw.WriteBool(v.Bool())
704-
705-
case reflect.Float32, reflect.Float64:
706-
return mw.WriteFloat64(v.Float())
707-
case reflect.Complex64, reflect.Complex128:
708-
return mw.WriteComplex128(v.Complex())
709-
case reflect.Int, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Int8:
710-
return mw.WriteInt64(v.Int())
711-
case reflect.Interface, reflect.Ptr:
712-
if v.IsNil() {
713-
mw.WriteNil()
714-
}
715-
return mw.writeVal(v.Elem())
716-
case reflect.Map:
717-
return mw.writeMap(v)
718-
case reflect.Uint, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uint8:
719-
return mw.WriteUint64(v.Uint())
720-
case reflect.String:
721-
return mw.WriteString(v.String())
722-
case reflect.Slice, reflect.Array:
723-
return mw.writeSlice(v)
724-
case reflect.Struct:
725-
return mw.writeStruct(v)
726-
}
727-
728-
return fmt.Errorf("msgp: msgp/enc: type %q not supported", v.Type())
729-
730-
}
731-
732687
// isSupported says if k is encodable.
733688
func isSupported(k reflect.Kind) bool {
734-
switch k {
735-
case reflect.Func, reflect.Chan, reflect.Invalid, reflect.UnsafePointer:
736-
return false
737-
default:
738-
return true
739-
}
689+
return k != reflect.Func && k != reflect.Chan && k != reflect.Invalid && k != reflect.UnsafePointer
740690
}
741691

742692
// GuessSize guesses the size of the underlying value of 'i'. If the underlying value is not

msgp/write_bytes.go

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,17 @@ func ensure(b []byte, sz int) ([]byte, int) {
2121

2222
// AppendMapHeader appends a map header with the given size to b.
2323
func AppendMapHeader(b []byte, sz uint32) []byte {
24-
switch {
25-
case sz <= 15:
24+
if sz <= 15 {
2625
return append(b, wfixmap(uint8(sz)))
27-
28-
case sz <= math.MaxUint16:
26+
}
27+
if sz <= math.MaxUint16 {
2928
o, n := ensure(b, 3)
3029
prefixu16(o[n:], mmap16, uint16(sz))
3130
return o
32-
33-
default:
34-
o, n := ensure(b, 5)
35-
prefixu32(o[n:], mmap32, sz)
36-
return o
3731
}
32+
o, n := ensure(b, 5)
33+
prefixu32(o[n:], mmap32, sz)
34+
return o
3835
}
3936

4037
// AppendArrayHeader appends an array header with the given size to b.

msgp/write_bytes_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@ func TestIssue116(t *testing.T) {
1818
}
1919

2020
var buf bytes.Buffer
21-
2221
w := NewWriter(&buf)
22+
2323
w.WriteInt64(math.MinInt64)
2424
w.Flush()
2525
i, err = NewReader(&buf).ReadInt64()

msgp/write_test.go

Lines changed: 36 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ func RandBytes(sz int) []byte {
2727
}
2828

2929
func TestWriteMapHeader(t *testing.T) {
30+
3031
tests := []struct {
31-
Sz uint32
32-
Outbytes []byte
32+
Sz uint32
33+
Out []byte
3334
}{
3435
{0, []byte{mfixmap}},
3536
{1, []byte{mfixmap | byte(1)}},
@@ -45,22 +46,23 @@ func TestWriteMapHeader(t *testing.T) {
4546
}
4647

4748
var buf bytes.Buffer
48-
var err error
4949
wr := NewWriter(&buf)
50-
for _, test := range tests {
50+
51+
for i, test := range tests {
5152
buf.Reset()
52-
err = wr.WriteMapHeader(test.Sz)
53+
err := wr.WriteMapHeader(test.Sz)
5354
if err != nil {
5455
t.Error(err)
5556
}
5657
err = wr.Flush()
5758
if err != nil {
5859
t.Fatal(err)
5960
}
60-
if !bytes.Equal(buf.Bytes(), test.Outbytes) {
61-
t.Errorf("Expected bytes %x; got %x", test.Outbytes, buf.Bytes())
61+
if !bytes.Equal(buf.Bytes(), test.Out) {
62+
t.Errorf("(case %d) expected bytes %x; got %x", i, test.Out, buf.Bytes())
6263
}
6364
}
65+
6466
}
6567

6668
func BenchmarkWriteMapHeader(b *testing.B) {
@@ -77,9 +79,10 @@ func BenchmarkWriteMapHeader(b *testing.B) {
7779
}
7880

7981
func TestWriteArrayHeader(t *testing.T) {
82+
8083
tests := []struct {
81-
Sz uint32
82-
Outbytes []byte
84+
Sz uint32
85+
Out []byte
8386
}{
8487
{0, []byte{mfixarray}},
8588
{1, []byte{mfixarray | byte(1)}},
@@ -88,74 +91,79 @@ func TestWriteArrayHeader(t *testing.T) {
8891
}
8992

9093
var buf bytes.Buffer
91-
var err error
9294
wr := NewWriter(&buf)
93-
for _, test := range tests {
95+
96+
for i, test := range tests {
9497
buf.Reset()
95-
err = wr.WriteArrayHeader(test.Sz)
98+
err := wr.WriteArrayHeader(test.Sz)
9699
if err != nil {
97100
t.Error(err)
98101
}
99102
err = wr.Flush()
100103
if err != nil {
101104
t.Fatal(err)
102105
}
103-
if !bytes.Equal(buf.Bytes(), test.Outbytes) {
104-
t.Errorf("Expected bytes %x; got %x", test.Outbytes, buf.Bytes())
106+
if !bytes.Equal(buf.Bytes(), test.Out) {
107+
t.Errorf("(case %d) expected bytes %x; got %x", i, test.Out, buf.Bytes())
105108
}
106109
}
110+
107111
}
108112

109113
func TestReadWriteStringHeader(t *testing.T) {
114+
110115
sizes := []uint32{0, 5, 8, 19, 150, tuint16, tuint32}
116+
111117
var buf bytes.Buffer
112-
var err error
113118
wr := NewWriter(&buf)
114-
for _, sz := range sizes {
119+
120+
for i, sz := range sizes {
115121
buf.Reset()
116-
err = wr.WriteStringHeader(sz)
122+
err := wr.WriteStringHeader(sz)
117123
if err != nil {
118124
t.Fatal(err)
119125
}
120126
err = wr.Flush()
121127
if err != nil {
122128
t.Fatal(err)
123129
}
124-
var nsz uint32
125-
nsz, err = NewReader(&buf).ReadStringHeader()
130+
nsz, err := NewReader(&buf).ReadStringHeader()
126131
if err != nil {
127132
t.Fatal(err)
128133
}
129134
if nsz != sz {
130-
t.Errorf("put in size %d but got out size %d", sz, nsz)
135+
t.Errorf("(case %d) put in size %d but got out size %d", i, sz, nsz)
131136
}
132137
}
138+
133139
}
134140

135141
func TestReadWriteBytesHeader(t *testing.T) {
142+
136143
sizes := []uint32{0, 5, 8, 19, 150, tuint16, tuint32}
144+
137145
var buf bytes.Buffer
138-
var err error
139146
wr := NewWriter(&buf)
140-
for _, sz := range sizes {
147+
148+
for i, sz := range sizes {
141149
buf.Reset()
142-
err = wr.WriteBytesHeader(sz)
150+
err := wr.WriteBytesHeader(sz)
143151
if err != nil {
144152
t.Fatal(err)
145153
}
146154
err = wr.Flush()
147155
if err != nil {
148156
t.Fatal(err)
149157
}
150-
var nsz uint32
151-
nsz, err = NewReader(&buf).ReadBytesHeader()
158+
nsz, err := NewReader(&buf).ReadBytesHeader()
152159
if err != nil {
153160
t.Fatal(err)
154161
}
155162
if nsz != sz {
156-
t.Errorf("put in size %d but got out size %d", sz, nsz)
163+
t.Errorf("(case %d) put in size %d but got out size %d", i, sz, nsz)
157164
}
158165
}
166+
159167
}
160168

161169
func BenchmarkWriteArrayHeader(b *testing.B) {
@@ -193,7 +201,7 @@ func TestWriteNil(t *testing.T) {
193201
func TestWriteFloat64(t *testing.T) {
194202
var buf bytes.Buffer
195203
wr := NewWriter(&buf)
196-
204+
rand.Seed(time.Now().Unix())
197205
for i := 0; i < 10000; i++ {
198206
buf.Reset()
199207
flt := (rand.Float64() - 0.5) * math.MaxFloat64
@@ -279,7 +287,7 @@ func TestWriteInt64(t *testing.T) {
279287
}
280288

281289
if buf.Len() > 9 {
282-
t.Errorf("buffer length should be <= 9; it's %d", buf.Len())
290+
t.Errorf("buffer length should be <= 9 but is %d", buf.Len())
283291
}
284292
}
285293
}

0 commit comments

Comments
 (0)