1 // Copyright 2011 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
13 func testConstant(t
*testing
.T
, w
uint, max
int) {
14 buf
:= make([]byte, MaxVarintLen64
)
15 n
:= PutUvarint(buf
, 1<<w
-1)
17 t
.Errorf("MaxVarintLen%d = %d; want %d", w
, max
, n
)
21 func TestConstants(t
*testing
.T
) {
22 testConstant(t
, 16, MaxVarintLen16
)
23 testConstant(t
, 32, MaxVarintLen32
)
24 testConstant(t
, 64, MaxVarintLen64
)
27 func testVarint(t
*testing
.T
, x
int64) {
28 buf
:= make([]byte, MaxVarintLen64
)
29 n
:= PutVarint(buf
, x
)
30 y
, m
:= Varint(buf
[0:n
])
32 t
.Errorf("Varint(%d): got %d", x
, y
)
35 t
.Errorf("Varint(%d): got n = %d; want %d", x
, m
, n
)
38 y
, err
:= ReadVarint(bytes
.NewReader(buf
))
40 t
.Errorf("ReadVarint(%d): %s", x
, err
)
43 t
.Errorf("ReadVarint(%d): got %d", x
, y
)
47 func testUvarint(t
*testing
.T
, x
uint64) {
48 buf
:= make([]byte, MaxVarintLen64
)
49 n
:= PutUvarint(buf
, x
)
50 y
, m
:= Uvarint(buf
[0:n
])
52 t
.Errorf("Uvarint(%d): got %d", x
, y
)
55 t
.Errorf("Uvarint(%d): got n = %d; want %d", x
, m
, n
)
58 y
, err
:= ReadUvarint(bytes
.NewReader(buf
))
60 t
.Errorf("ReadUvarint(%d): %s", x
, err
)
63 t
.Errorf("ReadUvarint(%d): got %d", x
, y
)
88 func TestVarint(t
*testing
.T
) {
89 for _
, x
:= range tests
{
93 for x
:= int64(0x7); x
!= 0; x
<<= 1 {
99 func TestUvarint(t
*testing
.T
) {
100 for _
, x
:= range tests
{
101 testUvarint(t
, uint64(x
))
103 for x
:= uint64(0x7); x
!= 0; x
<<= 1 {
108 func TestBufferTooSmall(t
*testing
.T
) {
109 buf
:= []byte{0x80, 0x80, 0x80, 0x80}
110 for i
:= 0; i
<= len(buf
); i
++ {
113 if x
!= 0 || n
!= 0 {
114 t
.Errorf("Uvarint(%v): got x = %d, n = %d", buf
, x
, n
)
117 x
, err
:= ReadUvarint(bytes
.NewReader(buf
))
118 if x
!= 0 || err
!= io
.EOF
{
119 t
.Errorf("ReadUvarint(%v): got x = %d, err = %s", buf
, x
, err
)
124 func testOverflow(t
*testing
.T
, buf
[]byte, n0
int, err0 error
) {
126 if x
!= 0 || n
!= n0
{
127 t
.Errorf("Uvarint(%v): got x = %d, n = %d; want 0, %d", buf
, x
, n
, n0
)
130 x
, err
:= ReadUvarint(bytes
.NewReader(buf
))
131 if x
!= 0 || err
!= err0
{
132 t
.Errorf("ReadUvarint(%v): got x = %d, err = %s; want 0, %s", buf
, x
, err
, err0
)
136 func TestOverflow(t
*testing
.T
) {
137 testOverflow(t
, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x2}, -10, overflow
)
138 testOverflow(t
, []byte{0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x1, 0, 0}, -13, overflow
)
141 func TestNonCanonicalZero(t
*testing
.T
) {
142 buf
:= []byte{0x80, 0x80, 0x80, 0}
144 if x
!= 0 || n
!= 4 {
145 t
.Errorf("Uvarint(%v): got x = %d, n = %d; want 0, 4", buf
, x
, n
)
150 func BenchmarkPutUvarint32(b
*testing
.B
) {
151 buf
:= make([]byte, MaxVarintLen32
)
153 for i
:= 0; i
< b
.N
; i
++ {
154 for j
:= uint(0); j
< MaxVarintLen32
; j
++ {
155 PutUvarint(buf
, 1<<(j
*7))
160 func BenchmarkPutUvarint64(b
*testing
.B
) {
161 buf
:= make([]byte, MaxVarintLen64
)
163 for i
:= 0; i
< b
.N
; i
++ {
164 for j
:= uint(0); j
< MaxVarintLen64
; j
++ {
165 PutUvarint(buf
, 1<<(j
*7))