|
|
@@ -71,6 +71,49 @@ func TestSplitTypes(t *testing.T) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestSplitUint64(t *testing.T) {
|
|
|
+ tests := []struct {
|
|
|
+ input string
|
|
|
+ val uint64
|
|
|
+ rest string
|
|
|
+ err error
|
|
|
+ }{
|
|
|
+ {"01", 1, "", nil},
|
|
|
+ {"7FFF", 0x7F, "FF", nil},
|
|
|
+ {"80FF", 0, "FF", nil},
|
|
|
+ {"81FAFF", 0xFA, "FF", nil},
|
|
|
+ {"82FAFAFF", 0xFAFA, "FF", nil},
|
|
|
+ {"83FAFAFAFF", 0xFAFAFA, "FF", nil},
|
|
|
+ {"84FAFAFAFAFF", 0xFAFAFAFA, "FF", nil},
|
|
|
+ {"85FAFAFAFAFAFF", 0xFAFAFAFAFA, "FF", nil},
|
|
|
+ {"86FAFAFAFAFAFAFF", 0xFAFAFAFAFAFA, "FF", nil},
|
|
|
+ {"87FAFAFAFAFAFAFAFF", 0xFAFAFAFAFAFAFA, "FF", nil},
|
|
|
+ {"88FAFAFAFAFAFAFAFAFF", 0xFAFAFAFAFAFAFAFA, "FF", nil},
|
|
|
+
|
|
|
+ // errors
|
|
|
+ {"", 0, "", io.ErrUnexpectedEOF},
|
|
|
+ {"00", 0, "00", ErrCanonInt},
|
|
|
+ {"81", 0, "81", ErrValueTooLarge},
|
|
|
+ {"8100", 0, "8100", ErrCanonSize},
|
|
|
+ {"8200FF", 0, "8200FF", ErrCanonInt},
|
|
|
+ {"8103FF", 0, "8103FF", ErrCanonSize},
|
|
|
+ {"89FAFAFAFAFAFAFAFAFAFF", 0, "89FAFAFAFAFAFAFAFAFAFF", errUintOverflow},
|
|
|
+ }
|
|
|
+
|
|
|
+ for i, test := range tests {
|
|
|
+ val, rest, err := SplitUint64(unhex(test.input))
|
|
|
+ if val != test.val {
|
|
|
+ t.Errorf("test %d: val mismatch: got %x, want %x (input %q)", i, val, test.val, test.input)
|
|
|
+ }
|
|
|
+ if !bytes.Equal(rest, unhex(test.rest)) {
|
|
|
+ t.Errorf("test %d: rest mismatch: got %x, want %s (input %q)", i, rest, test.rest, test.input)
|
|
|
+ }
|
|
|
+ if err != test.err {
|
|
|
+ t.Errorf("test %d: error mismatch: got %q, want %q", i, err, test.err)
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func TestSplit(t *testing.T) {
|
|
|
tests := []struct {
|
|
|
input string
|
|
|
@@ -78,7 +121,9 @@ func TestSplit(t *testing.T) {
|
|
|
val, rest string
|
|
|
err error
|
|
|
}{
|
|
|
+ {input: "00FFFF", kind: Byte, val: "00", rest: "FFFF"},
|
|
|
{input: "01FFFF", kind: Byte, val: "01", rest: "FFFF"},
|
|
|
+ {input: "7FFFFF", kind: Byte, val: "7F", rest: "FFFF"},
|
|
|
{input: "80FFFF", kind: String, val: "", rest: "FFFF"},
|
|
|
{input: "C3010203", kind: List, val: "010203"},
|
|
|
|