package binary
|
|
|
|
import (
|
|
"bytes"
|
|
"fmt"
|
|
"testing"
|
|
)
|
|
|
|
func TestVarint(t *testing.T) {
|
|
|
|
check := func(i int, s string) {
|
|
buf := new(bytes.Buffer)
|
|
n, err := new(int64), new(error)
|
|
WriteVarint(i, buf, n, err)
|
|
bufBytes := buf.Bytes() // Read before consuming below.
|
|
i_ := ReadVarint(buf, n, err)
|
|
if i != i_ {
|
|
fmt.Println(bufBytes)
|
|
t.Fatalf("Encoded %v and got %v", i, i_)
|
|
}
|
|
if s != "" {
|
|
if bufHex := fmt.Sprintf("%X", bufBytes); bufHex != s {
|
|
t.Fatalf("Encoded %v, expected %v", bufHex, s)
|
|
}
|
|
}
|
|
}
|
|
|
|
// 123457 is some prime.
|
|
for i := -(2 << 33); i < (2 << 33); i += 123457 {
|
|
check(i, "")
|
|
}
|
|
|
|
// Near zero
|
|
check(-1, "F101")
|
|
check(0, "0100")
|
|
check(1, "0101")
|
|
// Positives
|
|
check(1<<32-1, "04FFFFFFFF")
|
|
check(1<<32+0, "050100000000")
|
|
check(1<<32+1, "050100000001")
|
|
check(1<<53-1, "071FFFFFFFFFFFFF")
|
|
// Negatives
|
|
check(-1<<32+1, "F4FFFFFFFF")
|
|
check(-1<<32-0, "F50100000000")
|
|
check(-1<<32-1, "F50100000001")
|
|
check(-1<<53+1, "F71FFFFFFFFFFFFF")
|
|
}
|
|
|
|
func TestUvarint(t *testing.T) {
|
|
|
|
check := func(i uint, s string) {
|
|
buf := new(bytes.Buffer)
|
|
n, err := new(int64), new(error)
|
|
WriteUvarint(i, buf, n, err)
|
|
bufBytes := buf.Bytes()
|
|
i_ := ReadUvarint(buf, n, err)
|
|
if i != i_ {
|
|
fmt.Println(buf.Bytes())
|
|
t.Fatalf("Encoded %v and got %v", i, i_)
|
|
}
|
|
if s != "" {
|
|
if bufHex := fmt.Sprintf("%X", bufBytes); bufHex != s {
|
|
t.Fatalf("Encoded %v, expected %v", bufHex, s)
|
|
}
|
|
}
|
|
}
|
|
|
|
// 123457 is some prime.
|
|
for i := 0; i < (2 << 33); i += 123457 {
|
|
check(uint(i), "")
|
|
}
|
|
|
|
check(1, "0101")
|
|
check(1<<32-1, "04FFFFFFFF")
|
|
check(1<<32+0, "050100000000")
|
|
check(1<<32+1, "050100000001")
|
|
check(1<<53-1, "071FFFFFFFFFFFFF")
|
|
|
|
}
|