|
- // 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)
- }
- })
- }
- }
- }
|