From 06ba74c36607f5668ab7f3296599078fb8fca132 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Fri, 24 Feb 2012 22:17:31 +0100 Subject: [PATCH 1/6] go: Updated for weekly.2012-02-22 --- go/msgpack_test.go | 3 +- go/pack.go | 70 +++++++++++++++++++++++----------------------- go/unpack.go | 33 +++++++++++----------- 3 files changed, 52 insertions(+), 54 deletions(-) diff --git a/go/msgpack_test.go b/go/msgpack_test.go index 2c32fee2..2cdad6de 100644 --- a/go/msgpack_test.go +++ b/go/msgpack_test.go @@ -1,7 +1,6 @@ -package msgpack_test +package msgpack import ( - . "msgpack" "testing" "bytes" "reflect" diff --git a/go/pack.go b/go/pack.go index 763f9b08..49b293cd 100644 --- a/go/pack.go +++ b/go/pack.go @@ -3,12 +3,12 @@ package msgpack import ( "io" "os" - "unsafe" "reflect" + "unsafe" ) // Packs a given value and writes it into the specified writer. -func PackUint8(writer io.Writer, value uint8) (n int, err os.Error) { +func PackUint8(writer io.Writer, value uint8) (n int, err error) { if value < 128 { return writer.Write([]byte{byte(value)}) } @@ -16,7 +16,7 @@ func PackUint8(writer io.Writer, value uint8) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUint16(writer io.Writer, value uint16) (n int, err os.Error) { +func PackUint16(writer io.Writer, value uint16) (n int, err error) { if value < 128 { return writer.Write([]byte{byte(value)}) } else if value < 256 { @@ -26,7 +26,7 @@ func PackUint16(writer io.Writer, value uint16) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUint32(writer io.Writer, value uint32) (n int, err os.Error) { +func PackUint32(writer io.Writer, value uint32) (n int, err error) { if value < 128 { return writer.Write([]byte{byte(value)}) } else if value < 256 { @@ -38,7 +38,7 @@ func PackUint32(writer io.Writer, value uint32) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUint64(writer io.Writer, value uint64) (n int, err os.Error) { +func PackUint64(writer io.Writer, value uint64) (n int, err error) { if value < 128 { return writer.Write([]byte{byte(value)}) } else if value < 256 { @@ -51,7 +51,7 @@ func PackUint64(writer io.Writer, value uint64) (n int, err os.Error) { return writer.Write([]byte{0xcf, byte(value >> 56), byte(value >> 48), byte(value >> 40), byte(value >> 32), byte(value >> 24), byte(value >> 16), byte(value >> 8), byte(value)}) } -func PackUint(writer io.Writer, value uint) (n int, err os.Error) { +func PackUint(writer io.Writer, value uint) (n int, err error) { // Packs a given value and writes it into the specified writer. switch unsafe.Sizeof(value) { case 4: @@ -59,11 +59,11 @@ func PackUint(writer io.Writer, value uint) (n int, err os.Error) { case 8: return PackUint64(writer, *(*uint64)(unsafe.Pointer(&value))) } - return 0, os.ENOENT // never get here + return 0, os.ErrNotExist // never get here } // Packs a given value and writes it into the specified writer. -func PackInt8(writer io.Writer, value int8) (n int, err os.Error) { +func PackInt8(writer io.Writer, value int8) (n int, err error) { if value < -32 { return writer.Write([]byte{0xd0, byte(value)}) } @@ -71,7 +71,7 @@ func PackInt8(writer io.Writer, value int8) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt16(writer io.Writer, value int16) (n int, err os.Error) { +func PackInt16(writer io.Writer, value int16) (n int, err error) { if value < -128 || value >= 128 { return writer.Write([]byte{0xd1, byte(uint16(value) >> 8), byte(value)}) } else if value < -32 { @@ -81,7 +81,7 @@ func PackInt16(writer io.Writer, value int16) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt32(writer io.Writer, value int32) (n int, err os.Error) { +func PackInt32(writer io.Writer, value int32) (n int, err error) { if value < -32768 || value >= 32768 { return writer.Write([]byte{0xd2, byte(uint32(value) >> 24), byte(uint32(value) >> 16), byte(uint32(value) >> 8), byte(value)}) } else if value < -128 { @@ -95,7 +95,7 @@ func PackInt32(writer io.Writer, value int32) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt64(writer io.Writer, value int64) (n int, err os.Error) { +func PackInt64(writer io.Writer, value int64) (n int, err error) { if value < -2147483648 || value >= 2147483648 { return writer.Write([]byte{0xd3, byte(uint64(value) >> 56), byte(uint64(value) >> 48), byte(uint64(value) >> 40), byte(uint64(value) >> 32), byte(uint64(value) >> 24), byte(uint64(value) >> 16), byte(uint64(value) >> 8), byte(value)}) } else if value < -32768 || value >= 32768 { @@ -109,23 +109,23 @@ func PackInt64(writer io.Writer, value int64) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt(writer io.Writer, value int) (n int, err os.Error) { +func PackInt(writer io.Writer, value int) (n int, err error) { switch unsafe.Sizeof(value) { case 4: return PackInt32(writer, *(*int32)(unsafe.Pointer(&value))) case 8: return PackInt64(writer, *(*int64)(unsafe.Pointer(&value))) } - return 0, os.ENOENT // never get here + return 0, os.ErrNotExist // never get here } // Packs a given value and writes it into the specified writer. -func PackNil(writer io.Writer) (n int, err os.Error) { +func PackNil(writer io.Writer) (n int, err error) { return writer.Write([]byte{0xc0}) } // Packs a given value and writes it into the specified writer. -func PackBool(writer io.Writer, value bool) (n int, err os.Error) { +func PackBool(writer io.Writer, value bool) (n int, err error) { var code byte if value { code = 0xc3 @@ -136,17 +136,17 @@ func PackBool(writer io.Writer, value bool) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackFloat32(writer io.Writer, value float32) (n int, err os.Error) { +func PackFloat32(writer io.Writer, value float32) (n int, err error) { return PackUint32(writer, *(*uint32)(unsafe.Pointer(&value))) } // Packs a given value and writes it into the specified writer. -func PackFloat64(writer io.Writer, value float64) (n int, err os.Error) { +func PackFloat64(writer io.Writer, value float64) (n int, err error) { return PackUint64(writer, *(*uint64)(unsafe.Pointer(&value))) } // Packs a given value and writes it into the specified writer. -func PackBytes(writer io.Writer, value []byte) (n int, err os.Error) { +func PackBytes(writer io.Writer, value []byte) (n int, err error) { if len(value) < 32 { n1, err := writer.Write([]byte{0xa0 | uint8(len(value))}) if err != nil { @@ -171,7 +171,7 @@ func PackBytes(writer io.Writer, value []byte) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUint16Array(writer io.Writer, value []uint16) (n int, err os.Error) { +func PackUint16Array(writer io.Writer, value []uint16) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -213,7 +213,7 @@ func PackUint16Array(writer io.Writer, value []uint16) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUint32Array(writer io.Writer, value []uint32) (n int, err os.Error) { +func PackUint32Array(writer io.Writer, value []uint32) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -255,7 +255,7 @@ func PackUint32Array(writer io.Writer, value []uint32) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUint64Array(writer io.Writer, value []uint64) (n int, err os.Error) { +func PackUint64Array(writer io.Writer, value []uint64) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -297,18 +297,18 @@ func PackUint64Array(writer io.Writer, value []uint64) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackUintArray(writer io.Writer, value []uint) (n int, err os.Error) { +func PackUintArray(writer io.Writer, value []uint) (n int, err error) { switch unsafe.Sizeof(0) { case 4: return PackUint32Array(writer, *(*[]uint32)(unsafe.Pointer(&value))) case 8: return PackUint64Array(writer, *(*[]uint64)(unsafe.Pointer(&value))) } - return 0, os.ENOENT // never get here + return 0, os.ErrNotExist // never get here } // Packs a given value and writes it into the specified writer. -func PackInt8Array(writer io.Writer, value []int8) (n int, err os.Error) { +func PackInt8Array(writer io.Writer, value []int8) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -350,7 +350,7 @@ func PackInt8Array(writer io.Writer, value []int8) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt16Array(writer io.Writer, value []int16) (n int, err os.Error) { +func PackInt16Array(writer io.Writer, value []int16) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -392,7 +392,7 @@ func PackInt16Array(writer io.Writer, value []int16) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt32Array(writer io.Writer, value []int32) (n int, err os.Error) { +func PackInt32Array(writer io.Writer, value []int32) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -434,7 +434,7 @@ func PackInt32Array(writer io.Writer, value []int32) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackInt64Array(writer io.Writer, value []int64) (n int, err os.Error) { +func PackInt64Array(writer io.Writer, value []int64) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -476,18 +476,18 @@ func PackInt64Array(writer io.Writer, value []int64) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackIntArray(writer io.Writer, value []int) (n int, err os.Error) { +func PackIntArray(writer io.Writer, value []int) (n int, err error) { switch unsafe.Sizeof(0) { case 4: return PackInt32Array(writer, *(*[]int32)(unsafe.Pointer(&value))) case 8: return PackInt64Array(writer, *(*[]int64)(unsafe.Pointer(&value))) } - return 0, os.ENOENT // never get here + return 0, os.ErrNotExist // never get here } // Packs a given value and writes it into the specified writer. -func PackFloat32Array(writer io.Writer, value []float32) (n int, err os.Error) { +func PackFloat32Array(writer io.Writer, value []float32) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -529,7 +529,7 @@ func PackFloat32Array(writer io.Writer, value []float32) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackFloat64Array(writer io.Writer, value []float64) (n int, err os.Error) { +func PackFloat64Array(writer io.Writer, value []float64) (n int, err error) { if len(value) < 16 { n, err := writer.Write([]byte{0x90 | byte(len(value))}) if err != nil { @@ -571,7 +571,7 @@ func PackFloat64Array(writer io.Writer, value []float64) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackArray(writer io.Writer, value reflect.Value) (n int, err os.Error) { +func PackArray(writer io.Writer, value reflect.Value) (n int, err error) { { elemType := value.Type().Elem() if (elemType.Kind() == reflect.Uint || elemType.Kind() == reflect.Uint8 || elemType.Kind() == reflect.Uint16 || elemType.Kind() == reflect.Uint32 || elemType.Kind() == reflect.Uint64 || elemType.Kind() == reflect.Uintptr) && @@ -622,7 +622,7 @@ func PackArray(writer io.Writer, value reflect.Value) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackMap(writer io.Writer, value reflect.Value) (n int, err os.Error) { +func PackMap(writer io.Writer, value reflect.Value) (n int, err error) { keys := value.MapKeys() if value.Len() < 16 { n, err := writer.Write([]byte{0x80 | byte(len(keys))}) @@ -680,7 +680,7 @@ func PackMap(writer io.Writer, value reflect.Value) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func PackValue(writer io.Writer, value reflect.Value) (n int, err os.Error) { +func PackValue(writer io.Writer, value reflect.Value) (n int, err error) { if !value.IsValid() || value.Type() == nil { return PackNil(writer) } @@ -710,7 +710,7 @@ func PackValue(writer io.Writer, value reflect.Value) (n int, err os.Error) { } // Packs a given value and writes it into the specified writer. -func Pack(writer io.Writer, value interface{}) (n int, err os.Error) { +func Pack(writer io.Writer, value interface{}) (n int, err error) { if value == nil { return PackNil(writer) } diff --git a/go/unpack.go b/go/unpack.go index cc67fcc1..cf1911d2 100644 --- a/go/unpack.go +++ b/go/unpack.go @@ -2,13 +2,12 @@ package msgpack import ( "io" - "os" - "unsafe" - "strconv" "reflect" + "strconv" + "unsafe" ) -func readByte(reader io.Reader) (v uint8, err os.Error) { +func readByte(reader io.Reader) (v uint8, err error) { data := [1]byte{} _, e := reader.Read(data[0:]) if e != nil { @@ -17,7 +16,7 @@ func readByte(reader io.Reader) (v uint8, err os.Error) { return data[0], nil } -func readUint16(reader io.Reader) (v uint16, n int, err os.Error) { +func readUint16(reader io.Reader) (v uint16, n int, err error) { data := [2]byte{} n, e := reader.Read(data[0:]) if e != nil { @@ -26,7 +25,7 @@ func readUint16(reader io.Reader) (v uint16, n int, err os.Error) { return (uint16(data[0]) << 8) | uint16(data[1]), n, nil } -func readUint32(reader io.Reader) (v uint32, n int, err os.Error) { +func readUint32(reader io.Reader) (v uint32, n int, err error) { data := [4]byte{} n, e := reader.Read(data[0:]) if e != nil { @@ -35,7 +34,7 @@ func readUint32(reader io.Reader) (v uint32, n int, err os.Error) { return (uint32(data[0]) << 24) | (uint32(data[1]) << 16) | (uint32(data[2]) << 8) | uint32(data[3]), n, nil } -func readUint64(reader io.Reader) (v uint64, n int, err os.Error) { +func readUint64(reader io.Reader) (v uint64, n int, err error) { data := [8]byte{} n, e := reader.Read(data[0:]) if e != nil { @@ -44,7 +43,7 @@ func readUint64(reader io.Reader) (v uint64, n int, err os.Error) { return (uint64(data[0]) << 56) | (uint64(data[1]) << 48) | (uint64(data[2]) << 40) | (uint64(data[3]) << 32) | (uint64(data[4]) << 24) | (uint64(data[5]) << 16) | (uint64(data[6]) << 8) | uint64(data[7]), n, nil } -func readInt16(reader io.Reader) (v int16, n int, err os.Error) { +func readInt16(reader io.Reader) (v int16, n int, err error) { data := [2]byte{} n, e := reader.Read(data[0:]) if e != nil { @@ -53,7 +52,7 @@ func readInt16(reader io.Reader) (v int16, n int, err os.Error) { return (int16(data[0]) << 8) | int16(data[1]), n, nil } -func readInt32(reader io.Reader) (v int32, n int, err os.Error) { +func readInt32(reader io.Reader) (v int32, n int, err error) { data := [4]byte{} n, e := reader.Read(data[0:]) if e != nil { @@ -62,7 +61,7 @@ func readInt32(reader io.Reader) (v int32, n int, err os.Error) { return (int32(data[0]) << 24) | (int32(data[1]) << 16) | (int32(data[2]) << 8) | int32(data[3]), n, nil } -func readInt64(reader io.Reader) (v int64, n int, err os.Error) { +func readInt64(reader io.Reader) (v int64, n int, err error) { data := [8]byte{} n, e := reader.Read(data[0:]) if e != nil { @@ -71,7 +70,7 @@ func readInt64(reader io.Reader) (v int64, n int, err os.Error) { return (int64(data[0]) << 56) | (int64(data[1]) << 48) | (int64(data[2]) << 40) | (int64(data[3]) << 32) | (int64(data[4]) << 24) | (int64(data[5]) << 16) | (int64(data[6]) << 8) | int64(data[7]), n, nil } -func unpackArray(reader io.Reader, nelems uint) (v reflect.Value, n int, err os.Error) { +func unpackArray(reader io.Reader, nelems uint) (v reflect.Value, n int, err error) { retval := make([]interface{}, nelems) nbytesread := 0 var i uint @@ -86,7 +85,7 @@ func unpackArray(reader io.Reader, nelems uint) (v reflect.Value, n int, err os. return reflect.ValueOf(retval), nbytesread, nil } -func unpackArrayReflected(reader io.Reader, nelems uint) (v reflect.Value, n int, err os.Error) { +func unpackArrayReflected(reader io.Reader, nelems uint) (v reflect.Value, n int, err error) { retval := make([]reflect.Value, nelems) nbytesread := 0 var i uint @@ -101,7 +100,7 @@ func unpackArrayReflected(reader io.Reader, nelems uint) (v reflect.Value, n int return reflect.ValueOf(retval), nbytesread, nil } -func unpackMap(reader io.Reader, nelems uint) (v reflect.Value, n int, err os.Error) { +func unpackMap(reader io.Reader, nelems uint) (v reflect.Value, n int, err error) { retval := make(map[interface{}]interface{}) nbytesread := 0 var i uint @@ -121,7 +120,7 @@ func unpackMap(reader io.Reader, nelems uint) (v reflect.Value, n int, err os.Er return reflect.ValueOf(retval), nbytesread, nil } -func unpackMapReflected(reader io.Reader, nelems uint) (v reflect.Value, n int, err os.Error) { +func unpackMapReflected(reader io.Reader, nelems uint) (v reflect.Value, n int, err error) { retval := make(map[interface{}]reflect.Value) nbytesread := 0 var i uint @@ -141,7 +140,7 @@ func unpackMapReflected(reader io.Reader, nelems uint) (v reflect.Value, n int, return reflect.ValueOf(retval), nbytesread, nil } -func unpack(reader io.Reader, reflected bool) (v reflect.Value, n int, err os.Error) { +func unpack(reader io.Reader, reflected bool) (v reflect.Value, n int, err error) { var retval reflect.Value var nbytesread int = 0 @@ -354,13 +353,13 @@ func unpack(reader io.Reader, reflected bool) (v reflect.Value, n int, err os.Er } // Reads a value from the reader, unpack and returns it. -func Unpack(reader io.Reader) (v reflect.Value, n int, err os.Error) { +func Unpack(reader io.Reader) (v reflect.Value, n int, err error) { return unpack(reader, false) } // Reads unpack a value from the reader, unpack and returns it. When the // value is an array or map, leaves the elements wrapped by corresponding // wrapper objects defined in reflect package. -func UnpackReflected(reader io.Reader) (v reflect.Value, n int, err os.Error) { +func UnpackReflected(reader io.Reader) (v reflect.Value, n int, err error) { return unpack(reader, true) } From c96a39d3158dc30b4f96e10bbb4c68d96e9bc3b7 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Fri, 24 Feb 2012 22:52:37 +0100 Subject: [PATCH 2/6] go: Fix unit test for non-deterministic map ordering --- go/msgpack_test.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/go/msgpack_test.go b/go/msgpack_test.go index 2cdad6de..081be7b2 100644 --- a/go/msgpack_test.go +++ b/go/msgpack_test.go @@ -246,7 +246,14 @@ func TestPackMap(t *testing.T) { if err != nil { t.Error("err != nil") } - if bytes.Compare(b.Bytes(), []byte{0x83, 0x00, 0x01, 0x04, 0x05, 0x02, 0x03}) != 0 { + + // map ordering is no longer deterministic -- check all possible orderings :( + if bytes.Compare(b.Bytes(), []byte{0x83, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05}) != 0 && + bytes.Compare(b.Bytes(), []byte{0x83, 0x00, 0x01, 0x04, 0x05, 0x02, 0x03}) != 0 && + bytes.Compare(b.Bytes(), []byte{0x83, 0x02, 0x03, 0x00, 0x01, 0x04, 0x05}) != 0 && + bytes.Compare(b.Bytes(), []byte{0x83, 0x02, 0x03, 0x04, 0x05, 0x00, 0x01}) != 0 && + bytes.Compare(b.Bytes(), []byte{0x83, 0x04, 0x05, 0x00, 0x01, 0x02, 0x03}) != 0 && + bytes.Compare(b.Bytes(), []byte{0x83, 0x04, 0x05, 0x02, 0x03, 0x00, 0x01}) != 0 { t.Error("wrong output", b.Bytes()) } } From 154bcbc4f7651e7690d77bbf2bf11a34d9cb39dc Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Sat, 25 Feb 2012 03:10:06 +0100 Subject: [PATCH 3/6] go: Makefiles not needed any more. --- go/Makefile | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 go/Makefile diff --git a/go/Makefile b/go/Makefile deleted file mode 100644 index adc243af..00000000 --- a/go/Makefile +++ /dev/null @@ -1,11 +0,0 @@ -include $(GOROOT)/src/Make.inc - -TARG=msgpack - -GOFILES=pack.go unpack.go - -include $(GOROOT)/src/Make.pkg - -%: install %.go - $(GC) $*.go - $(LD) -o $@ $*.$O From 8f35dbc3062bcd6ed30c6b8cded57f9b931f71e9 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Sat, 25 Feb 2012 03:11:37 +0100 Subject: [PATCH 4/6] go: README with installation instructions --- go/README | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 go/README diff --git a/go/README b/go/README new file mode 100644 index 00000000..1b8b8ed9 --- /dev/null +++ b/go/README @@ -0,0 +1,3 @@ +This builds with the new 'go' tool. + +It is installable with "go get github.com/msgpack/msgpack/go". From 31a49db68b0368e54a44c2d92ad41b814549d018 Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Tue, 28 Feb 2012 22:54:54 +0100 Subject: [PATCH 5/6] go: Fix length mask error in []byte packing. --- go/unpack.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go/unpack.go b/go/unpack.go index cf1911d2..0f34695f 100644 --- a/go/unpack.go +++ b/go/unpack.go @@ -174,7 +174,7 @@ func unpack(reader io.Reader, reflected bool) (v reflect.Value, n int, err error } nbytesread += n } else if c >= 0xa0 && c <= 0xbf { - data := make([]byte, c&0xf) + data := make([]byte, c&0x1f) n, e := reader.Read(data) nbytesread += n if e != nil { From 71919f7523e33309c1f532bc5067395bf46b9f7a Mon Sep 17 00:00:00 2001 From: Damian Gryski Date: Wed, 29 Feb 2012 10:36:58 +0100 Subject: [PATCH 6/6] go: update unit tests for fixbytes packing bug --- go/msgpack_test.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/go/msgpack_test.go b/go/msgpack_test.go index 081be7b2..b5dcc52a 100644 --- a/go/msgpack_test.go +++ b/go/msgpack_test.go @@ -73,6 +73,35 @@ func TestPackUint8(t *testing.T) { } } +func TestPackBytes(t *testing.T) { + for _, i := range []struct { + s string + b []byte + }{ + {"a", []byte("\xa1a")}, + {"hello", []byte("\xa5hello")}, + {"world world world", []byte("\xb1world world world")}, + {"world world world world world world", []byte("\xda\x00#world world world world world world")}, + } { + + b := &bytes.Buffer{} + + _, err := PackBytes(b, []byte(i.s)) + if err != nil { + t.Error("err != nil") + } + + v, _, e := Unpack(b) + if e != nil { + t.Error("err != nil") + } + + if !equal(v, reflect.ValueOf([]byte(i.s))) { + t.Error("unpack(pack(%s)) != %s", i.s) + } + } +} + func TestPackUint16(t *testing.T) { b := &bytes.Buffer{} for _, i := range []uint16{0, 1, 2, 125, 126, 127, 128, 253, 254, 255, 256, 65533, 65534, 65535} {