]>
Commit | Line | Data |
---|---|---|
49aad941 | 1 | use super::*; |
add651ee FG |
2 | use crate::unpeek; |
3 | use crate::IResult; | |
49aad941 FG |
4 | |
5 | mod complete { | |
6 | use super::*; | |
add651ee | 7 | use crate::error::InputError; |
49aad941 FG |
8 | |
9 | macro_rules! assert_parse( | |
10 | ($left: expr, $right: expr) => { | |
add651ee | 11 | let res: $crate::IResult<_, _, InputError<_>> = $left; |
49aad941 FG |
12 | assert_eq!(res, $right); |
13 | }; | |
14 | ); | |
15 | ||
16 | #[test] | |
17 | fn i8_tests() { | |
add651ee FG |
18 | assert_parse!(i8.parse_peek(&[0x00][..]), Ok((&b""[..], 0))); |
19 | assert_parse!(i8.parse_peek(&[0x7f][..]), Ok((&b""[..], 127))); | |
20 | assert_parse!(i8.parse_peek(&[0xff][..]), Ok((&b""[..], -1))); | |
21 | assert_parse!(i8.parse_peek(&[0x80][..]), Ok((&b""[..], -128))); | |
49aad941 FG |
22 | } |
23 | ||
24 | #[test] | |
25 | fn be_i8_tests() { | |
add651ee FG |
26 | assert_parse!(be_i8.parse_peek(&[0x00][..]), Ok((&b""[..], 0))); |
27 | assert_parse!(be_i8.parse_peek(&[0x7f][..]), Ok((&b""[..], 127))); | |
28 | assert_parse!(be_i8.parse_peek(&[0xff][..]), Ok((&b""[..], -1))); | |
29 | assert_parse!(be_i8.parse_peek(&[0x80][..]), Ok((&b""[..], -128))); | |
49aad941 FG |
30 | } |
31 | ||
32 | #[test] | |
33 | fn be_i16_tests() { | |
add651ee FG |
34 | assert_parse!(be_i16.parse_peek(&[0x00, 0x00][..]), Ok((&b""[..], 0))); |
35 | assert_parse!( | |
36 | be_i16.parse_peek(&[0x7f, 0xff][..]), | |
37 | Ok((&b""[..], 32_767_i16)) | |
38 | ); | |
39 | assert_parse!(be_i16.parse_peek(&[0xff, 0xff][..]), Ok((&b""[..], -1))); | |
40 | assert_parse!( | |
41 | be_i16.parse_peek(&[0x80, 0x00][..]), | |
42 | Ok((&b""[..], -32_768_i16)) | |
43 | ); | |
49aad941 FG |
44 | } |
45 | ||
46 | #[test] | |
47 | fn be_u24_tests() { | |
49aad941 | 48 | assert_parse!( |
add651ee FG |
49 | be_u24.parse_peek(&[0x00, 0x00, 0x00][..]), |
50 | Ok((&b""[..], 0)) | |
51 | ); | |
52 | assert_parse!( | |
53 | be_u24.parse_peek(&[0x00, 0xFF, 0xFF][..]), | |
54 | Ok((&b""[..], 65_535_u32)) | |
55 | ); | |
56 | assert_parse!( | |
57 | be_u24.parse_peek(&[0x12, 0x34, 0x56][..]), | |
49aad941 FG |
58 | Ok((&b""[..], 1_193_046_u32)) |
59 | ); | |
60 | } | |
61 | ||
62 | #[test] | |
63 | fn be_i24_tests() { | |
49aad941 | 64 | assert_parse!( |
add651ee FG |
65 | be_i24.parse_peek(&[0xFF, 0xFF, 0xFF][..]), |
66 | Ok((&b""[..], -1_i32)) | |
67 | ); | |
68 | assert_parse!( | |
69 | be_i24.parse_peek(&[0xFF, 0x00, 0x00][..]), | |
70 | Ok((&b""[..], -65_536_i32)) | |
71 | ); | |
72 | assert_parse!( | |
73 | be_i24.parse_peek(&[0xED, 0xCB, 0xAA][..]), | |
49aad941 FG |
74 | Ok((&b""[..], -1_193_046_i32)) |
75 | ); | |
76 | } | |
77 | ||
78 | #[test] | |
79 | fn be_i32_tests() { | |
49aad941 | 80 | assert_parse!( |
add651ee FG |
81 | be_i32.parse_peek(&[0x00, 0x00, 0x00, 0x00][..]), |
82 | Ok((&b""[..], 0)) | |
83 | ); | |
84 | assert_parse!( | |
85 | be_i32.parse_peek(&[0x7f, 0xff, 0xff, 0xff][..]), | |
49aad941 FG |
86 | Ok((&b""[..], 2_147_483_647_i32)) |
87 | ); | |
49aad941 | 88 | assert_parse!( |
add651ee FG |
89 | be_i32.parse_peek(&[0xff, 0xff, 0xff, 0xff][..]), |
90 | Ok((&b""[..], -1)) | |
91 | ); | |
92 | assert_parse!( | |
93 | be_i32.parse_peek(&[0x80, 0x00, 0x00, 0x00][..]), | |
49aad941 FG |
94 | Ok((&b""[..], -2_147_483_648_i32)) |
95 | ); | |
96 | } | |
97 | ||
98 | #[test] | |
99 | fn be_i64_tests() { | |
100 | assert_parse!( | |
add651ee | 101 | be_i64.parse_peek(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), |
49aad941 FG |
102 | Ok((&b""[..], 0)) |
103 | ); | |
104 | assert_parse!( | |
add651ee | 105 | be_i64.parse_peek(&[0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff][..]), |
49aad941 FG |
106 | Ok((&b""[..], 9_223_372_036_854_775_807_i64)) |
107 | ); | |
108 | assert_parse!( | |
add651ee | 109 | be_i64.parse_peek(&[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff][..]), |
49aad941 FG |
110 | Ok((&b""[..], -1)) |
111 | ); | |
112 | assert_parse!( | |
add651ee | 113 | be_i64.parse_peek(&[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), |
49aad941 FG |
114 | Ok((&b""[..], -9_223_372_036_854_775_808_i64)) |
115 | ); | |
116 | } | |
117 | ||
118 | #[test] | |
119 | fn be_i128_tests() { | |
120 | assert_parse!( | |
add651ee | 121 | be_i128.parse_peek( |
49aad941 FG |
122 | &[ |
123 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
124 | 0x00, 0x00, 0x00 | |
125 | ][..] | |
126 | ), | |
127 | Ok((&b""[..], 0)) | |
128 | ); | |
129 | assert_parse!( | |
add651ee | 130 | be_i128.parse_peek( |
49aad941 FG |
131 | &[ |
132 | 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
133 | 0xff, 0xff, 0xff | |
134 | ][..] | |
135 | ), | |
136 | Ok(( | |
137 | &b""[..], | |
138 | 170_141_183_460_469_231_731_687_303_715_884_105_727_i128 | |
139 | )) | |
140 | ); | |
141 | assert_parse!( | |
add651ee | 142 | be_i128.parse_peek( |
49aad941 FG |
143 | &[ |
144 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
145 | 0xff, 0xff, 0xff | |
146 | ][..] | |
147 | ), | |
148 | Ok((&b""[..], -1)) | |
149 | ); | |
150 | assert_parse!( | |
add651ee | 151 | be_i128.parse_peek( |
49aad941 FG |
152 | &[ |
153 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
154 | 0x00, 0x00, 0x00 | |
155 | ][..] | |
156 | ), | |
157 | Ok(( | |
158 | &b""[..], | |
159 | -170_141_183_460_469_231_731_687_303_715_884_105_728_i128 | |
160 | )) | |
161 | ); | |
162 | } | |
163 | ||
164 | #[test] | |
165 | fn le_i8_tests() { | |
add651ee FG |
166 | assert_parse!(le_i8.parse_peek(&[0x00][..]), Ok((&b""[..], 0))); |
167 | assert_parse!(le_i8.parse_peek(&[0x7f][..]), Ok((&b""[..], 127))); | |
168 | assert_parse!(le_i8.parse_peek(&[0xff][..]), Ok((&b""[..], -1))); | |
169 | assert_parse!(le_i8.parse_peek(&[0x80][..]), Ok((&b""[..], -128))); | |
49aad941 FG |
170 | } |
171 | ||
172 | #[test] | |
173 | fn le_i16_tests() { | |
add651ee FG |
174 | assert_parse!(le_i16.parse_peek(&[0x00, 0x00][..]), Ok((&b""[..], 0))); |
175 | assert_parse!( | |
176 | le_i16.parse_peek(&[0xff, 0x7f][..]), | |
177 | Ok((&b""[..], 32_767_i16)) | |
178 | ); | |
179 | assert_parse!(le_i16.parse_peek(&[0xff, 0xff][..]), Ok((&b""[..], -1))); | |
180 | assert_parse!( | |
181 | le_i16.parse_peek(&[0x00, 0x80][..]), | |
182 | Ok((&b""[..], -32_768_i16)) | |
183 | ); | |
49aad941 FG |
184 | } |
185 | ||
186 | #[test] | |
187 | fn le_u24_tests() { | |
49aad941 | 188 | assert_parse!( |
add651ee FG |
189 | le_u24.parse_peek(&[0x00, 0x00, 0x00][..]), |
190 | Ok((&b""[..], 0)) | |
191 | ); | |
192 | assert_parse!( | |
193 | le_u24.parse_peek(&[0xFF, 0xFF, 0x00][..]), | |
194 | Ok((&b""[..], 65_535_u32)) | |
195 | ); | |
196 | assert_parse!( | |
197 | le_u24.parse_peek(&[0x56, 0x34, 0x12][..]), | |
49aad941 FG |
198 | Ok((&b""[..], 1_193_046_u32)) |
199 | ); | |
200 | } | |
201 | ||
202 | #[test] | |
203 | fn le_i24_tests() { | |
49aad941 | 204 | assert_parse!( |
add651ee FG |
205 | le_i24.parse_peek(&[0xFF, 0xFF, 0xFF][..]), |
206 | Ok((&b""[..], -1_i32)) | |
207 | ); | |
208 | assert_parse!( | |
209 | le_i24.parse_peek(&[0x00, 0x00, 0xFF][..]), | |
210 | Ok((&b""[..], -65_536_i32)) | |
211 | ); | |
212 | assert_parse!( | |
213 | le_i24.parse_peek(&[0xAA, 0xCB, 0xED][..]), | |
49aad941 FG |
214 | Ok((&b""[..], -1_193_046_i32)) |
215 | ); | |
216 | } | |
217 | ||
218 | #[test] | |
219 | fn le_i32_tests() { | |
49aad941 | 220 | assert_parse!( |
add651ee FG |
221 | le_i32.parse_peek(&[0x00, 0x00, 0x00, 0x00][..]), |
222 | Ok((&b""[..], 0)) | |
223 | ); | |
224 | assert_parse!( | |
225 | le_i32.parse_peek(&[0xff, 0xff, 0xff, 0x7f][..]), | |
49aad941 FG |
226 | Ok((&b""[..], 2_147_483_647_i32)) |
227 | ); | |
49aad941 | 228 | assert_parse!( |
add651ee FG |
229 | le_i32.parse_peek(&[0xff, 0xff, 0xff, 0xff][..]), |
230 | Ok((&b""[..], -1)) | |
231 | ); | |
232 | assert_parse!( | |
233 | le_i32.parse_peek(&[0x00, 0x00, 0x00, 0x80][..]), | |
49aad941 FG |
234 | Ok((&b""[..], -2_147_483_648_i32)) |
235 | ); | |
236 | } | |
237 | ||
238 | #[test] | |
239 | fn le_i64_tests() { | |
240 | assert_parse!( | |
add651ee | 241 | le_i64.parse_peek(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), |
49aad941 FG |
242 | Ok((&b""[..], 0)) |
243 | ); | |
244 | assert_parse!( | |
add651ee | 245 | le_i64.parse_peek(&[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f][..]), |
49aad941 FG |
246 | Ok((&b""[..], 9_223_372_036_854_775_807_i64)) |
247 | ); | |
248 | assert_parse!( | |
add651ee | 249 | le_i64.parse_peek(&[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff][..]), |
49aad941 FG |
250 | Ok((&b""[..], -1)) |
251 | ); | |
252 | assert_parse!( | |
add651ee | 253 | le_i64.parse_peek(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80][..]), |
49aad941 FG |
254 | Ok((&b""[..], -9_223_372_036_854_775_808_i64)) |
255 | ); | |
256 | } | |
257 | ||
258 | #[test] | |
259 | fn le_i128_tests() { | |
260 | assert_parse!( | |
add651ee | 261 | le_i128.parse_peek( |
49aad941 FG |
262 | &[ |
263 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
264 | 0x00, 0x00, 0x00 | |
265 | ][..] | |
266 | ), | |
267 | Ok((&b""[..], 0)) | |
268 | ); | |
269 | assert_parse!( | |
add651ee | 270 | le_i128.parse_peek( |
49aad941 FG |
271 | &[ |
272 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
273 | 0xff, 0xff, 0x7f | |
274 | ][..] | |
275 | ), | |
276 | Ok(( | |
277 | &b""[..], | |
278 | 170_141_183_460_469_231_731_687_303_715_884_105_727_i128 | |
279 | )) | |
280 | ); | |
281 | assert_parse!( | |
add651ee | 282 | le_i128.parse_peek( |
49aad941 FG |
283 | &[ |
284 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
285 | 0xff, 0xff, 0xff | |
286 | ][..] | |
287 | ), | |
288 | Ok((&b""[..], -1)) | |
289 | ); | |
290 | assert_parse!( | |
add651ee | 291 | le_i128.parse_peek( |
49aad941 FG |
292 | &[ |
293 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
294 | 0x00, 0x00, 0x80 | |
295 | ][..] | |
296 | ), | |
297 | Ok(( | |
298 | &b""[..], | |
299 | -170_141_183_460_469_231_731_687_303_715_884_105_728_i128 | |
300 | )) | |
301 | ); | |
302 | } | |
303 | ||
304 | #[test] | |
305 | fn be_f32_tests() { | |
49aad941 | 306 | assert_parse!( |
add651ee FG |
307 | be_f32.parse_peek(&[0x00, 0x00, 0x00, 0x00][..]), |
308 | Ok((&b""[..], 0_f32)) | |
309 | ); | |
310 | assert_parse!( | |
311 | be_f32.parse_peek(&[0x4d, 0x31, 0x1f, 0xd8][..]), | |
49aad941 FG |
312 | Ok((&b""[..], 185_728_380_f32)) |
313 | ); | |
314 | } | |
315 | ||
316 | #[test] | |
317 | fn be_f64_tests() { | |
318 | assert_parse!( | |
add651ee | 319 | be_f64.parse_peek(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), |
49aad941 FG |
320 | Ok((&b""[..], 0_f64)) |
321 | ); | |
322 | assert_parse!( | |
add651ee | 323 | be_f64.parse_peek(&[0x41, 0xa6, 0x23, 0xfb, 0x10, 0x00, 0x00, 0x00][..]), |
49aad941 FG |
324 | Ok((&b""[..], 185_728_392_f64)) |
325 | ); | |
326 | } | |
327 | ||
328 | #[test] | |
329 | fn le_f32_tests() { | |
49aad941 | 330 | assert_parse!( |
add651ee FG |
331 | le_f32.parse_peek(&[0x00, 0x00, 0x00, 0x00][..]), |
332 | Ok((&b""[..], 0_f32)) | |
333 | ); | |
334 | assert_parse!( | |
335 | le_f32.parse_peek(&[0xd8, 0x1f, 0x31, 0x4d][..]), | |
49aad941 FG |
336 | Ok((&b""[..], 185_728_380_f32)) |
337 | ); | |
338 | } | |
339 | ||
340 | #[test] | |
341 | fn le_f64_tests() { | |
342 | assert_parse!( | |
add651ee | 343 | le_f64.parse_peek(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..]), |
49aad941 FG |
344 | Ok((&b""[..], 0_f64)) |
345 | ); | |
346 | assert_parse!( | |
add651ee | 347 | le_f64.parse_peek(&[0x00, 0x00, 0x00, 0x10, 0xfb, 0x23, 0xa6, 0x41][..]), |
49aad941 FG |
348 | Ok((&b""[..], 185_728_392_f64)) |
349 | ); | |
350 | } | |
351 | ||
352 | #[test] | |
353 | fn configurable_endianness() { | |
fe692bf9 | 354 | use crate::binary::Endianness; |
49aad941 FG |
355 | |
356 | fn be_tst16(i: &[u8]) -> IResult<&[u8], u16> { | |
add651ee | 357 | u16(Endianness::Big).parse_peek(i) |
49aad941 FG |
358 | } |
359 | fn le_tst16(i: &[u8]) -> IResult<&[u8], u16> { | |
add651ee | 360 | u16(Endianness::Little).parse_peek(i) |
49aad941 FG |
361 | } |
362 | assert_eq!(be_tst16(&[0x80, 0x00]), Ok((&b""[..], 32_768_u16))); | |
363 | assert_eq!(le_tst16(&[0x80, 0x00]), Ok((&b""[..], 128_u16))); | |
364 | ||
365 | fn be_tst32(i: &[u8]) -> IResult<&[u8], u32> { | |
add651ee | 366 | u32(Endianness::Big).parse_peek(i) |
49aad941 FG |
367 | } |
368 | fn le_tst32(i: &[u8]) -> IResult<&[u8], u32> { | |
add651ee | 369 | u32(Endianness::Little).parse_peek(i) |
49aad941 FG |
370 | } |
371 | assert_eq!( | |
372 | be_tst32(&[0x12, 0x00, 0x60, 0x00]), | |
373 | Ok((&b""[..], 302_014_464_u32)) | |
374 | ); | |
375 | assert_eq!( | |
376 | le_tst32(&[0x12, 0x00, 0x60, 0x00]), | |
377 | Ok((&b""[..], 6_291_474_u32)) | |
378 | ); | |
379 | ||
380 | fn be_tst64(i: &[u8]) -> IResult<&[u8], u64> { | |
add651ee | 381 | u64(Endianness::Big).parse_peek(i) |
49aad941 FG |
382 | } |
383 | fn le_tst64(i: &[u8]) -> IResult<&[u8], u64> { | |
add651ee | 384 | u64(Endianness::Little).parse_peek(i) |
49aad941 FG |
385 | } |
386 | assert_eq!( | |
387 | be_tst64(&[0x12, 0x00, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00]), | |
388 | Ok((&b""[..], 1_297_142_246_100_992_000_u64)) | |
389 | ); | |
390 | assert_eq!( | |
391 | le_tst64(&[0x12, 0x00, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00]), | |
392 | Ok((&b""[..], 36_028_874_334_666_770_u64)) | |
393 | ); | |
394 | ||
395 | fn be_tsti16(i: &[u8]) -> IResult<&[u8], i16> { | |
add651ee | 396 | i16(Endianness::Big).parse_peek(i) |
49aad941 FG |
397 | } |
398 | fn le_tsti16(i: &[u8]) -> IResult<&[u8], i16> { | |
add651ee | 399 | i16(Endianness::Little).parse_peek(i) |
49aad941 FG |
400 | } |
401 | assert_eq!(be_tsti16(&[0x00, 0x80]), Ok((&b""[..], 128_i16))); | |
402 | assert_eq!(le_tsti16(&[0x00, 0x80]), Ok((&b""[..], -32_768_i16))); | |
403 | ||
404 | fn be_tsti32(i: &[u8]) -> IResult<&[u8], i32> { | |
add651ee | 405 | i32(Endianness::Big).parse_peek(i) |
49aad941 FG |
406 | } |
407 | fn le_tsti32(i: &[u8]) -> IResult<&[u8], i32> { | |
add651ee | 408 | i32(Endianness::Little).parse_peek(i) |
49aad941 FG |
409 | } |
410 | assert_eq!( | |
411 | be_tsti32(&[0x00, 0x12, 0x60, 0x00]), | |
412 | Ok((&b""[..], 1_204_224_i32)) | |
413 | ); | |
414 | assert_eq!( | |
415 | le_tsti32(&[0x00, 0x12, 0x60, 0x00]), | |
416 | Ok((&b""[..], 6_296_064_i32)) | |
417 | ); | |
418 | ||
419 | fn be_tsti64(i: &[u8]) -> IResult<&[u8], i64> { | |
add651ee | 420 | i64(Endianness::Big).parse_peek(i) |
49aad941 FG |
421 | } |
422 | fn le_tsti64(i: &[u8]) -> IResult<&[u8], i64> { | |
add651ee | 423 | i64(Endianness::Little).parse_peek(i) |
49aad941 FG |
424 | } |
425 | assert_eq!( | |
426 | be_tsti64(&[0x00, 0xFF, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00]), | |
427 | Ok((&b""[..], 71_881_672_479_506_432_i64)) | |
428 | ); | |
429 | assert_eq!( | |
430 | le_tsti64(&[0x00, 0xFF, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00]), | |
431 | Ok((&b""[..], 36_028_874_334_732_032_i64)) | |
432 | ); | |
433 | } | |
434 | } | |
435 | ||
436 | mod partial { | |
437 | use super::*; | |
438 | use crate::error::ErrMode; | |
add651ee | 439 | use crate::error::InputError; |
49aad941 | 440 | use crate::error::Needed; |
fe692bf9 FG |
441 | #[cfg(feature = "alloc")] |
442 | use crate::lib::std::vec::Vec; | |
49aad941 | 443 | use crate::Partial; |
fe692bf9 FG |
444 | use crate::{ |
445 | ascii::digit1 as digit, | |
446 | binary::{be_u16, be_u8}, | |
447 | error::ErrorKind, | |
448 | lib::std::str::{self, FromStr}, | |
449 | IResult, | |
450 | }; | |
49aad941 FG |
451 | |
452 | macro_rules! assert_parse( | |
453 | ($left: expr, $right: expr) => { | |
add651ee | 454 | let res: $crate::IResult<_, _, InputError<_>> = $left; |
49aad941 FG |
455 | assert_eq!(res, $right); |
456 | }; | |
457 | ); | |
458 | ||
459 | #[test] | |
460 | fn i8_tests() { | |
461 | assert_parse!( | |
add651ee | 462 | be_i8.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
463 | Ok((Partial::new(&b""[..]), 0)) |
464 | ); | |
465 | assert_parse!( | |
add651ee | 466 | be_i8.parse_peek(Partial::new(&[0x7f][..])), |
49aad941 FG |
467 | Ok((Partial::new(&b""[..]), 127)) |
468 | ); | |
469 | assert_parse!( | |
add651ee | 470 | be_i8.parse_peek(Partial::new(&[0xff][..])), |
49aad941 FG |
471 | Ok((Partial::new(&b""[..]), -1)) |
472 | ); | |
473 | assert_parse!( | |
add651ee | 474 | be_i8.parse_peek(Partial::new(&[0x80][..])), |
49aad941 FG |
475 | Ok((Partial::new(&b""[..]), -128)) |
476 | ); | |
477 | assert_parse!( | |
add651ee | 478 | be_i8.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
479 | Err(ErrMode::Incomplete(Needed::new(1))) |
480 | ); | |
481 | } | |
482 | ||
483 | #[test] | |
484 | fn i16_tests() { | |
485 | assert_parse!( | |
add651ee | 486 | be_i16.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
487 | Ok((Partial::new(&b""[..]), 0)) |
488 | ); | |
489 | assert_parse!( | |
add651ee | 490 | be_i16.parse_peek(Partial::new(&[0x7f, 0xff][..])), |
49aad941 FG |
491 | Ok((Partial::new(&b""[..]), 32_767_i16)) |
492 | ); | |
493 | assert_parse!( | |
add651ee | 494 | be_i16.parse_peek(Partial::new(&[0xff, 0xff][..])), |
49aad941 FG |
495 | Ok((Partial::new(&b""[..]), -1)) |
496 | ); | |
497 | assert_parse!( | |
add651ee | 498 | be_i16.parse_peek(Partial::new(&[0x80, 0x00][..])), |
49aad941 FG |
499 | Ok((Partial::new(&b""[..]), -32_768_i16)) |
500 | ); | |
501 | assert_parse!( | |
add651ee | 502 | be_i16.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
503 | Err(ErrMode::Incomplete(Needed::new(2))) |
504 | ); | |
505 | assert_parse!( | |
add651ee | 506 | be_i16.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
507 | Err(ErrMode::Incomplete(Needed::new(1))) |
508 | ); | |
509 | } | |
510 | ||
511 | #[test] | |
512 | fn u24_tests() { | |
513 | assert_parse!( | |
add651ee | 514 | be_u24.parse_peek(Partial::new(&[0x00, 0x00, 0x00][..])), |
49aad941 FG |
515 | Ok((Partial::new(&b""[..]), 0)) |
516 | ); | |
517 | assert_parse!( | |
add651ee | 518 | be_u24.parse_peek(Partial::new(&[0x00, 0xFF, 0xFF][..])), |
49aad941 FG |
519 | Ok((Partial::new(&b""[..]), 65_535_u32)) |
520 | ); | |
521 | assert_parse!( | |
add651ee | 522 | be_u24.parse_peek(Partial::new(&[0x12, 0x34, 0x56][..])), |
49aad941 FG |
523 | Ok((Partial::new(&b""[..]), 1_193_046_u32)) |
524 | ); | |
525 | assert_parse!( | |
add651ee | 526 | be_u24.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
527 | Err(ErrMode::Incomplete(Needed::new(3))) |
528 | ); | |
529 | assert_parse!( | |
add651ee | 530 | be_u24.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
531 | Err(ErrMode::Incomplete(Needed::new(2))) |
532 | ); | |
533 | assert_parse!( | |
add651ee | 534 | be_u24.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
535 | Err(ErrMode::Incomplete(Needed::new(1))) |
536 | ); | |
537 | } | |
538 | ||
539 | #[test] | |
540 | fn i24_tests() { | |
541 | assert_parse!( | |
add651ee | 542 | be_i24.parse_peek(Partial::new(&[0xFF, 0xFF, 0xFF][..])), |
49aad941 FG |
543 | Ok((Partial::new(&b""[..]), -1_i32)) |
544 | ); | |
545 | assert_parse!( | |
add651ee | 546 | be_i24.parse_peek(Partial::new(&[0xFF, 0x00, 0x00][..])), |
49aad941 FG |
547 | Ok((Partial::new(&b""[..]), -65_536_i32)) |
548 | ); | |
549 | assert_parse!( | |
add651ee | 550 | be_i24.parse_peek(Partial::new(&[0xED, 0xCB, 0xAA][..])), |
49aad941 FG |
551 | Ok((Partial::new(&b""[..]), -1_193_046_i32)) |
552 | ); | |
553 | assert_parse!( | |
add651ee | 554 | be_i24.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
555 | Err(ErrMode::Incomplete(Needed::new(3))) |
556 | ); | |
557 | assert_parse!( | |
add651ee | 558 | be_i24.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
559 | Err(ErrMode::Incomplete(Needed::new(2))) |
560 | ); | |
561 | assert_parse!( | |
add651ee | 562 | be_i24.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
563 | Err(ErrMode::Incomplete(Needed::new(1))) |
564 | ); | |
565 | } | |
566 | ||
567 | #[test] | |
568 | fn i32_tests() { | |
569 | assert_parse!( | |
add651ee | 570 | be_i32.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
571 | Ok((Partial::new(&b""[..]), 0)) |
572 | ); | |
573 | assert_parse!( | |
add651ee | 574 | be_i32.parse_peek(Partial::new(&[0x7f, 0xff, 0xff, 0xff][..])), |
49aad941 FG |
575 | Ok((Partial::new(&b""[..]), 2_147_483_647_i32)) |
576 | ); | |
577 | assert_parse!( | |
add651ee | 578 | be_i32.parse_peek(Partial::new(&[0xff, 0xff, 0xff, 0xff][..])), |
49aad941 FG |
579 | Ok((Partial::new(&b""[..]), -1)) |
580 | ); | |
581 | assert_parse!( | |
add651ee | 582 | be_i32.parse_peek(Partial::new(&[0x80, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
583 | Ok((Partial::new(&b""[..]), -2_147_483_648_i32)) |
584 | ); | |
585 | assert_parse!( | |
add651ee | 586 | be_i32.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
587 | Err(ErrMode::Incomplete(Needed::new(4))) |
588 | ); | |
589 | assert_parse!( | |
add651ee | 590 | be_i32.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
591 | Err(ErrMode::Incomplete(Needed::new(3))) |
592 | ); | |
593 | assert_parse!( | |
add651ee | 594 | be_i32.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
595 | Err(ErrMode::Incomplete(Needed::new(2))) |
596 | ); | |
597 | assert_parse!( | |
add651ee | 598 | be_i32.parse_peek(Partial::new(&[0x00, 0x00, 0x00][..])), |
49aad941 FG |
599 | Err(ErrMode::Incomplete(Needed::new(1))) |
600 | ); | |
601 | } | |
602 | ||
603 | #[test] | |
604 | fn i64_tests() { | |
605 | assert_parse!( | |
add651ee | 606 | be_i64.parse_peek(Partial::new( |
49aad941 FG |
607 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
608 | )), | |
609 | Ok((Partial::new(&b""[..]), 0)) | |
610 | ); | |
611 | assert_parse!( | |
add651ee | 612 | be_i64.parse_peek(Partial::new( |
49aad941 FG |
613 | &[0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff][..] |
614 | )), | |
615 | Ok((Partial::new(&b""[..]), 9_223_372_036_854_775_807_i64)) | |
616 | ); | |
617 | assert_parse!( | |
add651ee | 618 | be_i64.parse_peek(Partial::new( |
49aad941 FG |
619 | &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff][..] |
620 | )), | |
621 | Ok((Partial::new(&b""[..]), -1)) | |
622 | ); | |
623 | assert_parse!( | |
add651ee | 624 | be_i64.parse_peek(Partial::new( |
49aad941 FG |
625 | &[0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
626 | )), | |
627 | Ok((Partial::new(&b""[..]), -9_223_372_036_854_775_808_i64)) | |
628 | ); | |
629 | assert_parse!( | |
add651ee | 630 | be_i64.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
631 | Err(ErrMode::Incomplete(Needed::new(8))) |
632 | ); | |
633 | assert_parse!( | |
add651ee | 634 | be_i64.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
635 | Err(ErrMode::Incomplete(Needed::new(7))) |
636 | ); | |
637 | assert_parse!( | |
add651ee | 638 | be_i64.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
639 | Err(ErrMode::Incomplete(Needed::new(6))) |
640 | ); | |
641 | assert_parse!( | |
add651ee | 642 | be_i64.parse_peek(Partial::new(&[0x00, 0x00, 0x00][..])), |
49aad941 FG |
643 | Err(ErrMode::Incomplete(Needed::new(5))) |
644 | ); | |
645 | assert_parse!( | |
add651ee | 646 | be_i64.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
647 | Err(ErrMode::Incomplete(Needed::new(4))) |
648 | ); | |
649 | assert_parse!( | |
add651ee | 650 | be_i64.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
651 | Err(ErrMode::Incomplete(Needed::new(3))) |
652 | ); | |
653 | assert_parse!( | |
add651ee | 654 | be_i64.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
655 | Err(ErrMode::Incomplete(Needed::new(2))) |
656 | ); | |
657 | assert_parse!( | |
add651ee | 658 | be_i64.parse_peek(Partial::new( |
49aad941 FG |
659 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
660 | )), | |
661 | Err(ErrMode::Incomplete(Needed::new(1))) | |
662 | ); | |
663 | } | |
664 | ||
665 | #[test] | |
666 | fn i128_tests() { | |
667 | assert_parse!( | |
add651ee | 668 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
669 | &[ |
670 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
671 | 0x00, 0x00, 0x00 | |
672 | ][..] | |
673 | )), | |
674 | Ok((Partial::new(&b""[..]), 0)) | |
675 | ); | |
676 | assert_parse!( | |
add651ee | 677 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
678 | &[ |
679 | 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
680 | 0xff, 0xff, 0xff | |
681 | ][..] | |
682 | )), | |
683 | Ok(( | |
684 | Partial::new(&b""[..]), | |
685 | 170_141_183_460_469_231_731_687_303_715_884_105_727_i128 | |
686 | )) | |
687 | ); | |
688 | assert_parse!( | |
add651ee | 689 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
690 | &[ |
691 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
692 | 0xff, 0xff, 0xff | |
693 | ][..] | |
694 | )), | |
695 | Ok((Partial::new(&b""[..]), -1)) | |
696 | ); | |
697 | assert_parse!( | |
add651ee | 698 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
699 | &[ |
700 | 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
701 | 0x00, 0x00, 0x00 | |
702 | ][..] | |
703 | )), | |
704 | Ok(( | |
705 | Partial::new(&b""[..]), | |
706 | -170_141_183_460_469_231_731_687_303_715_884_105_728_i128 | |
707 | )) | |
708 | ); | |
709 | assert_parse!( | |
add651ee | 710 | be_i128.parse_peek(Partial::new(&[][..])), |
49aad941 FG |
711 | Err(ErrMode::Incomplete(Needed::new(16))) |
712 | ); | |
713 | assert_parse!( | |
add651ee | 714 | be_i128.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
715 | Err(ErrMode::Incomplete(Needed::new(15))) |
716 | ); | |
717 | assert_parse!( | |
add651ee | 718 | be_i128.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
719 | Err(ErrMode::Incomplete(Needed::new(14))) |
720 | ); | |
721 | assert_parse!( | |
add651ee | 722 | be_i128.parse_peek(Partial::new(&[0x00, 0x00, 0x00][..])), |
49aad941 FG |
723 | Err(ErrMode::Incomplete(Needed::new(13))) |
724 | ); | |
725 | assert_parse!( | |
add651ee | 726 | be_i128.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
727 | Err(ErrMode::Incomplete(Needed::new(12))) |
728 | ); | |
729 | assert_parse!( | |
add651ee | 730 | be_i128.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
731 | Err(ErrMode::Incomplete(Needed::new(11))) |
732 | ); | |
733 | assert_parse!( | |
add651ee | 734 | be_i128.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
735 | Err(ErrMode::Incomplete(Needed::new(10))) |
736 | ); | |
737 | assert_parse!( | |
add651ee | 738 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
739 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
740 | )), | |
741 | Err(ErrMode::Incomplete(Needed::new(9))) | |
742 | ); | |
743 | assert_parse!( | |
add651ee | 744 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
745 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
746 | )), | |
747 | Err(ErrMode::Incomplete(Needed::new(8))) | |
748 | ); | |
749 | assert_parse!( | |
add651ee | 750 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
751 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
752 | )), | |
753 | Err(ErrMode::Incomplete(Needed::new(7))) | |
754 | ); | |
755 | assert_parse!( | |
add651ee | 756 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
757 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
758 | )), | |
759 | Err(ErrMode::Incomplete(Needed::new(6))) | |
760 | ); | |
761 | assert_parse!( | |
add651ee | 762 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
763 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
764 | )), | |
765 | Err(ErrMode::Incomplete(Needed::new(5))) | |
766 | ); | |
767 | assert_parse!( | |
add651ee | 768 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
769 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
770 | )), | |
771 | Err(ErrMode::Incomplete(Needed::new(4))) | |
772 | ); | |
773 | assert_parse!( | |
add651ee | 774 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
775 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
776 | )), | |
777 | Err(ErrMode::Incomplete(Needed::new(3))) | |
778 | ); | |
779 | assert_parse!( | |
add651ee | 780 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
781 | &[ |
782 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
783 | 0x00 | |
784 | ][..] | |
785 | )), | |
786 | Err(ErrMode::Incomplete(Needed::new(2))) | |
787 | ); | |
788 | assert_parse!( | |
add651ee | 789 | be_i128.parse_peek(Partial::new( |
49aad941 FG |
790 | &[ |
791 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
792 | 0x00, 0x00 | |
793 | ][..] | |
794 | )), | |
795 | Err(ErrMode::Incomplete(Needed::new(1))) | |
796 | ); | |
797 | } | |
798 | ||
799 | #[test] | |
800 | fn le_i8_tests() { | |
801 | assert_parse!( | |
add651ee | 802 | le_i8.parse_peek(Partial::new(&[0x00][..])), |
49aad941 FG |
803 | Ok((Partial::new(&b""[..]), 0)) |
804 | ); | |
805 | assert_parse!( | |
add651ee | 806 | le_i8.parse_peek(Partial::new(&[0x7f][..])), |
49aad941 FG |
807 | Ok((Partial::new(&b""[..]), 127)) |
808 | ); | |
809 | assert_parse!( | |
add651ee | 810 | le_i8.parse_peek(Partial::new(&[0xff][..])), |
49aad941 FG |
811 | Ok((Partial::new(&b""[..]), -1)) |
812 | ); | |
813 | assert_parse!( | |
add651ee | 814 | le_i8.parse_peek(Partial::new(&[0x80][..])), |
49aad941 FG |
815 | Ok((Partial::new(&b""[..]), -128)) |
816 | ); | |
817 | } | |
818 | ||
819 | #[test] | |
820 | fn le_i16_tests() { | |
821 | assert_parse!( | |
add651ee | 822 | le_i16.parse_peek(Partial::new(&[0x00, 0x00][..])), |
49aad941 FG |
823 | Ok((Partial::new(&b""[..]), 0)) |
824 | ); | |
825 | assert_parse!( | |
add651ee | 826 | le_i16.parse_peek(Partial::new(&[0xff, 0x7f][..])), |
49aad941 FG |
827 | Ok((Partial::new(&b""[..]), 32_767_i16)) |
828 | ); | |
829 | assert_parse!( | |
add651ee | 830 | le_i16.parse_peek(Partial::new(&[0xff, 0xff][..])), |
49aad941 FG |
831 | Ok((Partial::new(&b""[..]), -1)) |
832 | ); | |
833 | assert_parse!( | |
add651ee | 834 | le_i16.parse_peek(Partial::new(&[0x00, 0x80][..])), |
49aad941 FG |
835 | Ok((Partial::new(&b""[..]), -32_768_i16)) |
836 | ); | |
837 | } | |
838 | ||
839 | #[test] | |
840 | fn le_u24_tests() { | |
841 | assert_parse!( | |
add651ee | 842 | le_u24.parse_peek(Partial::new(&[0x00, 0x00, 0x00][..])), |
49aad941 FG |
843 | Ok((Partial::new(&b""[..]), 0)) |
844 | ); | |
845 | assert_parse!( | |
add651ee | 846 | le_u24.parse_peek(Partial::new(&[0xFF, 0xFF, 0x00][..])), |
49aad941 FG |
847 | Ok((Partial::new(&b""[..]), 65_535_u32)) |
848 | ); | |
849 | assert_parse!( | |
add651ee | 850 | le_u24.parse_peek(Partial::new(&[0x56, 0x34, 0x12][..])), |
49aad941 FG |
851 | Ok((Partial::new(&b""[..]), 1_193_046_u32)) |
852 | ); | |
853 | } | |
854 | ||
855 | #[test] | |
856 | fn le_i24_tests() { | |
857 | assert_parse!( | |
add651ee | 858 | le_i24.parse_peek(Partial::new(&[0xFF, 0xFF, 0xFF][..])), |
49aad941 FG |
859 | Ok((Partial::new(&b""[..]), -1_i32)) |
860 | ); | |
861 | assert_parse!( | |
add651ee | 862 | le_i24.parse_peek(Partial::new(&[0x00, 0x00, 0xFF][..])), |
49aad941 FG |
863 | Ok((Partial::new(&b""[..]), -65_536_i32)) |
864 | ); | |
865 | assert_parse!( | |
add651ee | 866 | le_i24.parse_peek(Partial::new(&[0xAA, 0xCB, 0xED][..])), |
49aad941 FG |
867 | Ok((Partial::new(&b""[..]), -1_193_046_i32)) |
868 | ); | |
869 | } | |
870 | ||
871 | #[test] | |
872 | fn le_i32_tests() { | |
873 | assert_parse!( | |
add651ee | 874 | le_i32.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
875 | Ok((Partial::new(&b""[..]), 0)) |
876 | ); | |
877 | assert_parse!( | |
add651ee | 878 | le_i32.parse_peek(Partial::new(&[0xff, 0xff, 0xff, 0x7f][..])), |
49aad941 FG |
879 | Ok((Partial::new(&b""[..]), 2_147_483_647_i32)) |
880 | ); | |
881 | assert_parse!( | |
add651ee | 882 | le_i32.parse_peek(Partial::new(&[0xff, 0xff, 0xff, 0xff][..])), |
49aad941 FG |
883 | Ok((Partial::new(&b""[..]), -1)) |
884 | ); | |
885 | assert_parse!( | |
add651ee | 886 | le_i32.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x80][..])), |
49aad941 FG |
887 | Ok((Partial::new(&b""[..]), -2_147_483_648_i32)) |
888 | ); | |
889 | } | |
890 | ||
891 | #[test] | |
892 | fn le_i64_tests() { | |
893 | assert_parse!( | |
add651ee | 894 | le_i64.parse_peek(Partial::new( |
49aad941 FG |
895 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
896 | )), | |
897 | Ok((Partial::new(&b""[..]), 0)) | |
898 | ); | |
899 | assert_parse!( | |
add651ee | 900 | le_i64.parse_peek(Partial::new( |
49aad941 FG |
901 | &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f][..] |
902 | )), | |
903 | Ok((Partial::new(&b""[..]), 9_223_372_036_854_775_807_i64)) | |
904 | ); | |
905 | assert_parse!( | |
add651ee | 906 | le_i64.parse_peek(Partial::new( |
49aad941 FG |
907 | &[0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff][..] |
908 | )), | |
909 | Ok((Partial::new(&b""[..]), -1)) | |
910 | ); | |
911 | assert_parse!( | |
add651ee | 912 | le_i64.parse_peek(Partial::new( |
49aad941 FG |
913 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80][..] |
914 | )), | |
915 | Ok((Partial::new(&b""[..]), -9_223_372_036_854_775_808_i64)) | |
916 | ); | |
917 | } | |
918 | ||
919 | #[test] | |
920 | fn le_i128_tests() { | |
921 | assert_parse!( | |
add651ee | 922 | le_i128.parse_peek(Partial::new( |
49aad941 FG |
923 | &[ |
924 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
925 | 0x00, 0x00, 0x00 | |
926 | ][..] | |
927 | )), | |
928 | Ok((Partial::new(&b""[..]), 0)) | |
929 | ); | |
930 | assert_parse!( | |
add651ee | 931 | le_i128.parse_peek(Partial::new( |
49aad941 FG |
932 | &[ |
933 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
934 | 0xff, 0xff, 0x7f | |
935 | ][..] | |
936 | )), | |
937 | Ok(( | |
938 | Partial::new(&b""[..]), | |
939 | 170_141_183_460_469_231_731_687_303_715_884_105_727_i128 | |
940 | )) | |
941 | ); | |
942 | assert_parse!( | |
add651ee | 943 | le_i128.parse_peek(Partial::new( |
49aad941 FG |
944 | &[ |
945 | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, | |
946 | 0xff, 0xff, 0xff | |
947 | ][..] | |
948 | )), | |
949 | Ok((Partial::new(&b""[..]), -1)) | |
950 | ); | |
951 | assert_parse!( | |
add651ee | 952 | le_i128.parse_peek(Partial::new( |
49aad941 FG |
953 | &[ |
954 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, | |
955 | 0x00, 0x00, 0x80 | |
956 | ][..] | |
957 | )), | |
958 | Ok(( | |
959 | Partial::new(&b""[..]), | |
960 | -170_141_183_460_469_231_731_687_303_715_884_105_728_i128 | |
961 | )) | |
962 | ); | |
963 | } | |
964 | ||
965 | #[test] | |
966 | fn be_f32_tests() { | |
967 | assert_parse!( | |
add651ee | 968 | be_f32.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
969 | Ok((Partial::new(&b""[..]), 0_f32)) |
970 | ); | |
971 | assert_parse!( | |
add651ee | 972 | be_f32.parse_peek(Partial::new(&[0x4d, 0x31, 0x1f, 0xd8][..])), |
49aad941 FG |
973 | Ok((Partial::new(&b""[..]), 185_728_380_f32)) |
974 | ); | |
975 | } | |
976 | ||
977 | #[test] | |
978 | fn be_f64_tests() { | |
979 | assert_parse!( | |
add651ee | 980 | be_f64.parse_peek(Partial::new( |
49aad941 FG |
981 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
982 | )), | |
983 | Ok((Partial::new(&b""[..]), 0_f64)) | |
984 | ); | |
985 | assert_parse!( | |
add651ee | 986 | be_f64.parse_peek(Partial::new( |
49aad941 FG |
987 | &[0x41, 0xa6, 0x23, 0xfb, 0x10, 0x00, 0x00, 0x00][..] |
988 | )), | |
989 | Ok((Partial::new(&b""[..]), 185_728_392_f64)) | |
990 | ); | |
991 | } | |
992 | ||
993 | #[test] | |
994 | fn le_f32_tests() { | |
995 | assert_parse!( | |
add651ee | 996 | le_f32.parse_peek(Partial::new(&[0x00, 0x00, 0x00, 0x00][..])), |
49aad941 FG |
997 | Ok((Partial::new(&b""[..]), 0_f32)) |
998 | ); | |
999 | assert_parse!( | |
add651ee | 1000 | le_f32.parse_peek(Partial::new(&[0xd8, 0x1f, 0x31, 0x4d][..])), |
49aad941 FG |
1001 | Ok((Partial::new(&b""[..]), 185_728_380_f32)) |
1002 | ); | |
1003 | } | |
1004 | ||
1005 | #[test] | |
1006 | fn le_f64_tests() { | |
1007 | assert_parse!( | |
add651ee | 1008 | le_f64.parse_peek(Partial::new( |
49aad941 FG |
1009 | &[0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00][..] |
1010 | )), | |
1011 | Ok((Partial::new(&b""[..]), 0_f64)) | |
1012 | ); | |
1013 | assert_parse!( | |
add651ee | 1014 | le_f64.parse_peek(Partial::new( |
49aad941 FG |
1015 | &[0x00, 0x00, 0x00, 0x10, 0xfb, 0x23, 0xa6, 0x41][..] |
1016 | )), | |
1017 | Ok((Partial::new(&b""[..]), 185_728_392_f64)) | |
1018 | ); | |
1019 | } | |
1020 | ||
1021 | #[test] | |
1022 | fn configurable_endianness() { | |
fe692bf9 | 1023 | use crate::binary::Endianness; |
49aad941 FG |
1024 | |
1025 | fn be_tst16(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u16> { | |
add651ee | 1026 | u16(Endianness::Big).parse_peek(i) |
49aad941 FG |
1027 | } |
1028 | fn le_tst16(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u16> { | |
add651ee | 1029 | u16(Endianness::Little).parse_peek(i) |
49aad941 FG |
1030 | } |
1031 | assert_eq!( | |
1032 | be_tst16(Partial::new(&[0x80, 0x00])), | |
1033 | Ok((Partial::new(&b""[..]), 32_768_u16)) | |
1034 | ); | |
1035 | assert_eq!( | |
1036 | le_tst16(Partial::new(&[0x80, 0x00])), | |
1037 | Ok((Partial::new(&b""[..]), 128_u16)) | |
1038 | ); | |
1039 | ||
1040 | fn be_tst32(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u32> { | |
add651ee | 1041 | u32(Endianness::Big).parse_peek(i) |
49aad941 FG |
1042 | } |
1043 | fn le_tst32(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u32> { | |
add651ee | 1044 | u32(Endianness::Little).parse_peek(i) |
49aad941 FG |
1045 | } |
1046 | assert_eq!( | |
1047 | be_tst32(Partial::new(&[0x12, 0x00, 0x60, 0x00])), | |
1048 | Ok((Partial::new(&b""[..]), 302_014_464_u32)) | |
1049 | ); | |
1050 | assert_eq!( | |
1051 | le_tst32(Partial::new(&[0x12, 0x00, 0x60, 0x00])), | |
1052 | Ok((Partial::new(&b""[..]), 6_291_474_u32)) | |
1053 | ); | |
1054 | ||
1055 | fn be_tst64(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u64> { | |
add651ee | 1056 | u64(Endianness::Big).parse_peek(i) |
49aad941 FG |
1057 | } |
1058 | fn le_tst64(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u64> { | |
add651ee | 1059 | u64(Endianness::Little).parse_peek(i) |
49aad941 FG |
1060 | } |
1061 | assert_eq!( | |
1062 | be_tst64(Partial::new(&[ | |
1063 | 0x12, 0x00, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00 | |
1064 | ])), | |
1065 | Ok((Partial::new(&b""[..]), 1_297_142_246_100_992_000_u64)) | |
1066 | ); | |
1067 | assert_eq!( | |
1068 | le_tst64(Partial::new(&[ | |
1069 | 0x12, 0x00, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00 | |
1070 | ])), | |
1071 | Ok((Partial::new(&b""[..]), 36_028_874_334_666_770_u64)) | |
1072 | ); | |
1073 | ||
1074 | fn be_tsti16(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, i16> { | |
add651ee | 1075 | i16(Endianness::Big).parse_peek(i) |
49aad941 FG |
1076 | } |
1077 | fn le_tsti16(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, i16> { | |
add651ee | 1078 | i16(Endianness::Little).parse_peek(i) |
49aad941 FG |
1079 | } |
1080 | assert_eq!( | |
1081 | be_tsti16(Partial::new(&[0x00, 0x80])), | |
1082 | Ok((Partial::new(&b""[..]), 128_i16)) | |
1083 | ); | |
1084 | assert_eq!( | |
1085 | le_tsti16(Partial::new(&[0x00, 0x80])), | |
1086 | Ok((Partial::new(&b""[..]), -32_768_i16)) | |
1087 | ); | |
1088 | ||
1089 | fn be_tsti32(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, i32> { | |
add651ee | 1090 | i32(Endianness::Big).parse_peek(i) |
49aad941 FG |
1091 | } |
1092 | fn le_tsti32(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, i32> { | |
add651ee | 1093 | i32(Endianness::Little).parse_peek(i) |
49aad941 FG |
1094 | } |
1095 | assert_eq!( | |
1096 | be_tsti32(Partial::new(&[0x00, 0x12, 0x60, 0x00])), | |
1097 | Ok((Partial::new(&b""[..]), 1_204_224_i32)) | |
1098 | ); | |
1099 | assert_eq!( | |
1100 | le_tsti32(Partial::new(&[0x00, 0x12, 0x60, 0x00])), | |
1101 | Ok((Partial::new(&b""[..]), 6_296_064_i32)) | |
1102 | ); | |
1103 | ||
1104 | fn be_tsti64(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, i64> { | |
add651ee | 1105 | i64(Endianness::Big).parse_peek(i) |
49aad941 FG |
1106 | } |
1107 | fn le_tsti64(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, i64> { | |
add651ee | 1108 | i64(Endianness::Little).parse_peek(i) |
49aad941 FG |
1109 | } |
1110 | assert_eq!( | |
1111 | be_tsti64(Partial::new(&[ | |
1112 | 0x00, 0xFF, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00 | |
1113 | ])), | |
1114 | Ok((Partial::new(&b""[..]), 71_881_672_479_506_432_i64)) | |
1115 | ); | |
1116 | assert_eq!( | |
1117 | le_tsti64(Partial::new(&[ | |
1118 | 0x00, 0xFF, 0x60, 0x00, 0x12, 0x00, 0x80, 0x00 | |
1119 | ])), | |
1120 | Ok((Partial::new(&b""[..]), 36_028_874_334_732_032_i64)) | |
1121 | ); | |
1122 | } | |
fe692bf9 FG |
1123 | |
1124 | #[test] | |
1125 | #[cfg(feature = "alloc")] | |
1126 | fn length_count_test() { | |
1127 | fn number(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u32> { | |
1128 | digit | |
1129 | .try_map(str::from_utf8) | |
1130 | .try_map(FromStr::from_str) | |
add651ee | 1131 | .parse_peek(i) |
fe692bf9 FG |
1132 | } |
1133 | ||
1134 | fn cnt(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, Vec<&[u8]>> { | |
add651ee | 1135 | length_count(unpeek(number), "abc").parse_peek(i) |
fe692bf9 FG |
1136 | } |
1137 | ||
1138 | assert_eq!( | |
1139 | cnt(Partial::new(&b"2abcabcabcdef"[..])), | |
1140 | Ok((Partial::new(&b"abcdef"[..]), vec![&b"abc"[..], &b"abc"[..]])) | |
1141 | ); | |
1142 | assert_eq!( | |
1143 | cnt(Partial::new(&b"2ab"[..])), | |
1144 | Err(ErrMode::Incomplete(Needed::new(1))) | |
1145 | ); | |
1146 | assert_eq!( | |
1147 | cnt(Partial::new(&b"3abcab"[..])), | |
1148 | Err(ErrMode::Incomplete(Needed::new(1))) | |
1149 | ); | |
1150 | assert_eq!( | |
1151 | cnt(Partial::new(&b"xxx"[..])), | |
1152 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1153 | &Partial::new(&b"xxx"[..]), |
fe692bf9 FG |
1154 | ErrorKind::Slice |
1155 | ))) | |
1156 | ); | |
1157 | assert_eq!( | |
1158 | cnt(Partial::new(&b"2abcxxx"[..])), | |
1159 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1160 | &Partial::new(&b"xxx"[..]), |
fe692bf9 FG |
1161 | ErrorKind::Tag |
1162 | ))) | |
1163 | ); | |
1164 | } | |
1165 | ||
1166 | #[test] | |
1167 | fn length_data_test() { | |
1168 | fn number(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u32> { | |
1169 | digit | |
1170 | .try_map(str::from_utf8) | |
1171 | .try_map(FromStr::from_str) | |
add651ee | 1172 | .parse_peek(i) |
fe692bf9 FG |
1173 | } |
1174 | ||
1175 | fn take(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, &[u8]> { | |
add651ee | 1176 | length_data(unpeek(number)).parse_peek(i) |
fe692bf9 FG |
1177 | } |
1178 | ||
1179 | assert_eq!( | |
1180 | take(Partial::new(&b"6abcabcabcdef"[..])), | |
1181 | Ok((Partial::new(&b"abcdef"[..]), &b"abcabc"[..])) | |
1182 | ); | |
1183 | assert_eq!( | |
1184 | take(Partial::new(&b"3ab"[..])), | |
1185 | Err(ErrMode::Incomplete(Needed::new(1))) | |
1186 | ); | |
1187 | assert_eq!( | |
1188 | take(Partial::new(&b"xxx"[..])), | |
1189 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1190 | &Partial::new(&b"xxx"[..]), |
fe692bf9 FG |
1191 | ErrorKind::Slice |
1192 | ))) | |
1193 | ); | |
1194 | assert_eq!( | |
1195 | take(Partial::new(&b"2abcxxx"[..])), | |
1196 | Ok((Partial::new(&b"cxxx"[..]), &b"ab"[..])) | |
1197 | ); | |
1198 | } | |
1199 | ||
1200 | #[test] | |
1201 | fn length_value_test() { | |
1202 | use crate::stream::StreamIsPartial; | |
1203 | ||
1204 | fn length_value_1(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, u16> { | |
add651ee | 1205 | length_value(be_u8, be_u16).parse_peek(i) |
fe692bf9 FG |
1206 | } |
1207 | fn length_value_2(i: Partial<&[u8]>) -> IResult<Partial<&[u8]>, (u8, u8)> { | |
add651ee | 1208 | length_value(be_u8, (be_u8, be_u8)).parse_peek(i) |
fe692bf9 FG |
1209 | } |
1210 | ||
1211 | let mut empty_complete = Partial::new(&b""[..]); | |
1212 | let _ = empty_complete.complete(); | |
1213 | ||
1214 | let i1 = [0, 5, 6]; | |
1215 | assert_eq!( | |
1216 | length_value_1(Partial::new(&i1)), | |
1217 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1218 | &empty_complete, |
fe692bf9 FG |
1219 | ErrorKind::Slice |
1220 | ))) | |
1221 | ); | |
1222 | assert_eq!( | |
1223 | length_value_2(Partial::new(&i1)), | |
1224 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1225 | &empty_complete, |
fe692bf9 FG |
1226 | ErrorKind::Token |
1227 | ))) | |
1228 | ); | |
1229 | ||
1230 | let i2 = [1, 5, 6, 3]; | |
1231 | { | |
1232 | let mut middle_complete = Partial::new(&i2[1..2]); | |
1233 | let _ = middle_complete.complete(); | |
1234 | assert_eq!( | |
1235 | length_value_1(Partial::new(&i2)), | |
1236 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1237 | &middle_complete, |
fe692bf9 FG |
1238 | ErrorKind::Slice |
1239 | ))) | |
1240 | ); | |
1241 | assert_eq!( | |
1242 | length_value_2(Partial::new(&i2)), | |
1243 | Err(ErrMode::Backtrack(error_position!( | |
add651ee | 1244 | &empty_complete, |
fe692bf9 FG |
1245 | ErrorKind::Token |
1246 | ))) | |
1247 | ); | |
1248 | } | |
1249 | ||
1250 | let i3 = [2, 5, 6, 3, 4, 5, 7]; | |
1251 | assert_eq!( | |
1252 | length_value_1(Partial::new(&i3)), | |
1253 | Ok((Partial::new(&i3[3..]), 1286)) | |
1254 | ); | |
1255 | assert_eq!( | |
1256 | length_value_2(Partial::new(&i3)), | |
1257 | Ok((Partial::new(&i3[3..]), (5, 6))) | |
1258 | ); | |
1259 | ||
1260 | let i4 = [3, 5, 6, 3, 4, 5]; | |
1261 | assert_eq!( | |
1262 | length_value_1(Partial::new(&i4)), | |
1263 | Ok((Partial::new(&i4[4..]), 1286)) | |
1264 | ); | |
1265 | assert_eq!( | |
1266 | length_value_2(Partial::new(&i4)), | |
1267 | Ok((Partial::new(&i4[4..]), (5, 6))) | |
1268 | ); | |
1269 | } | |
49aad941 | 1270 | } |