@@ -11,6 +11,7 @@ package mysql
11
11
import (
12
12
"fmt"
13
13
"testing"
14
+ "bytes"
14
15
"time"
15
16
)
16
17
@@ -122,3 +123,42 @@ func TestScanNullTime(t *testing.T) {
122
123
}
123
124
}
124
125
}
126
+
127
+ func TestLengthEncodedInteger (t * testing.T ) {
128
+ var integerTests = []struct {
129
+ num uint64
130
+ encoded []byte
131
+ }{
132
+ {0x0000000000000000 , []byte {0x00 }},
133
+ {0x0000000000000012 , []byte {0x12 }},
134
+ {0x00000000000000fa , []byte {0xfa }},
135
+ {0x0000000000000100 , []byte {0xfc , 0x00 , 0x01 }},
136
+ {0x0000000000001234 , []byte {0xfc , 0x34 , 0x12 }},
137
+ {0x000000000000ffff , []byte {0xfc , 0xff , 0xff }},
138
+ {0x0000000000010000 , []byte {0xfd , 0x00 , 0x00 , 0x01 }},
139
+ {0x0000000000123456 , []byte {0xfd , 0x56 , 0x34 , 0x12 }},
140
+ {0x0000000000ffffff , []byte {0xfd , 0xff , 0xff , 0xff }},
141
+ {0x0000000001000000 , []byte {0xfe , 0x00 , 0x00 , 0x00 , 0x01 , 0x00 , 0x00 , 0x00 , 0x00 }},
142
+ {0x123456789abcdef0 , []byte {0xfe , 0xf0 , 0xde , 0xbc , 0x9a , 0x78 , 0x56 , 0x34 , 0x12 }},
143
+ {0xffffffffffffffff , []byte {0xfe , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff , 0xff }},
144
+ }
145
+
146
+ for _ , tst := range integerTests {
147
+ num , isNull , numLen := readLengthEncodedInteger (tst .encoded )
148
+ if isNull {
149
+ t .Errorf ("%x: expected %d, got NULL" , tst .encoded , tst .num )
150
+ }
151
+ if num != tst .num {
152
+ t .Errorf ("%x: expected %d, got %d" , tst .encoded , tst .num , num )
153
+ }
154
+ if numLen != len (tst .encoded ) {
155
+ t .Errorf ("%x: expected size %d, got %d" , tst .encoded , len (tst .encoded ), numLen )
156
+ }
157
+ encoded := appendLengthEncodedInteger (nil , num )
158
+ if (! bytes .Equal (encoded , tst .encoded )) {
159
+ t .Errorf ("%v: expected %x, got %x" , num , tst .encoded , encoded )
160
+ }
161
+ }
162
+
163
+
164
+ }
0 commit comments