summaryrefslogtreecommitdiff
path: root/vendor/golang.org/x/text/internal/catmsg/varint_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/golang.org/x/text/internal/catmsg/varint_test.go')
-rw-r--r--vendor/golang.org/x/text/internal/catmsg/varint_test.go123
1 files changed, 123 insertions, 0 deletions
diff --git a/vendor/golang.org/x/text/internal/catmsg/varint_test.go b/vendor/golang.org/x/text/internal/catmsg/varint_test.go
new file mode 100644
index 0000000..04d881d
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/catmsg/varint_test.go
@@ -0,0 +1,123 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package catmsg
+
+import (
+ "fmt"
+ "testing"
+)
+
+func TestEncodeUint(t *testing.T) {
+ testCases := []struct {
+ x uint64
+ enc string
+ }{
+ {0, "\x00"},
+ {1, "\x01"},
+ {2, "\x02"},
+ {0x7f, "\x7f"},
+ {0x80, "\x80\x01"},
+ {1 << 14, "\x80\x80\x01"},
+ {0xffffffff, "\xff\xff\xff\xff\x0f"},
+ {0xffffffffffffffff, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01"},
+ }
+ for _, tc := range testCases {
+ buf := [maxVarintBytes]byte{}
+ got := string(buf[:encodeUint(buf[:], tc.x)])
+ if got != tc.enc {
+ t.Errorf("EncodeUint(%#x) = %q; want %q", tc.x, got, tc.enc)
+ }
+ }
+}
+
+func TestDecodeUint(t *testing.T) {
+ testCases := []struct {
+ x uint64
+ size int
+ enc string
+ err error
+ }{{
+ x: 0,
+ size: 0,
+ enc: "",
+ err: errIllegalVarint,
+ }, {
+ x: 0,
+ size: 1,
+ enc: "\x80",
+ err: errIllegalVarint,
+ }, {
+ x: 0,
+ size: 3,
+ enc: "\x80\x80\x80",
+ err: errIllegalVarint,
+ }, {
+ x: 0,
+ size: 1,
+ enc: "\x00",
+ }, {
+ x: 1,
+ size: 1,
+ enc: "\x01",
+ }, {
+ x: 2,
+ size: 1,
+ enc: "\x02",
+ }, {
+ x: 0x7f,
+ size: 1,
+ enc: "\x7f",
+ }, {
+ x: 0x80,
+ size: 2,
+ enc: "\x80\x01",
+ }, {
+ x: 1 << 14,
+ size: 3,
+ enc: "\x80\x80\x01",
+ }, {
+ x: 0xffffffff,
+ size: 5,
+ enc: "\xff\xff\xff\xff\x0f",
+ }, {
+ x: 0xffffffffffffffff,
+ size: 10,
+ enc: "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01",
+ }, {
+ x: 0xffffffffffffffff,
+ size: 10,
+ enc: "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00",
+ }, {
+ x: 0,
+ size: 10,
+ enc: "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01",
+ err: errVarintTooLarge,
+ }}
+ forms := []struct {
+ name string
+ decode func(s string) (x uint64, size int, err error)
+ }{
+ {"decode", func(s string) (x uint64, size int, err error) {
+ return decodeUint([]byte(s))
+ }},
+ {"decodeString", decodeUintString},
+ }
+ for _, f := range forms {
+ for _, tc := range testCases {
+ t.Run(fmt.Sprintf("%s:%q", f.name, tc.enc), func(t *testing.T) {
+ x, size, err := f.decode(tc.enc)
+ if err != tc.err {
+ t.Errorf("err = %q; want %q", err, tc.err)
+ }
+ if size != tc.size {
+ t.Errorf("size = %d; want %d", size, tc.size)
+ }
+ if x != tc.x {
+ t.Errorf("decode = %#x; want %#x", x, tc.x)
+ }
+ })
+ }
+ }
+}