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, "00") 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") }