// Copyright 2011 The Snappy-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 varint import ( "testing" ) var testCases = []struct { valid bool s string v uint64 }{ // Valid encodings. {true, "\x00", 0}, {true, "\x01", 1}, {true, "\x7f", 127}, {true, "\x80\x01", 128}, {true, "\xff\x02", 383}, {true, "\x9e\xa7\x05", 86942}, // 86942 = 0x1e + 0x27<<7 + 0x05<<14 {true, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01", 0xffffffffffffffff}, { true, "\x8a\x89\x88\x87\x86\x85\x84\x83\x82\x01", 10 + 9<<7 + 8<<14 + 7<<21 + 6<<28 + 5<<35 + 4<<42 + 3<<49 + 2<<56 + 1<<63, }, // Invalid encodings. {false, "", 0}, {false, "\x80", 0}, {false, "\xff", 0}, {false, "\x9e\xa7", 0}, } func TestDecode(t *testing.T) { for _, tc := range testCases { v, n := Decode([]byte(tc.s)) if v != tc.v { t.Errorf("decode %q: want value %d got %d", tc.s, tc.v, v) continue } m := 0 if tc.valid { m = len(tc.s) } if n != m { t.Errorf("decode %q: want length %d got %d", tc.s, m, n) continue } } } func TestEncode(t *testing.T) { for _, tc := range testCases { if !tc.valid { continue } var b [MaxLen]byte n := Encode(b[:], tc.v) if s := string(b[:n]); s != tc.s { t.Errorf("encode %d: want bytes %q got %q", tc.v, tc.s, s) continue } if n != Len(tc.v) { t.Errorf("encode %d: Encode length %d != Len length %d", tc.v, n, Len(tc.v)) continue } } }