@@ -289,3 +289,144 @@ impl fmt::Display for ShortInput {
289
289
#[ cfg( feature = "std" ) ]
290
290
impl std:: error:: Error for ShortInput { }
291
291
292
+
293
+ //============ Testing =======================================================
294
+
295
+ #[ cfg( test) ]
296
+ mod test {
297
+ use super :: * ;
298
+
299
+ #[ test]
300
+ fn pos_seek_remaining ( ) {
301
+ let mut parser = Parser :: from_static ( b"0123456789" ) ;
302
+ assert_eq ! ( parser. peek( 1 ) . unwrap( ) , b"0" ) ;
303
+ assert_eq ! ( parser. pos( ) , 0 ) ;
304
+ assert_eq ! ( parser. remaining( ) , 10 ) ;
305
+ assert_eq ! ( parser. seek( 2 ) , Ok ( ( ) ) ) ;
306
+ assert_eq ! ( parser. pos( ) , 2 ) ;
307
+ assert_eq ! ( parser. remaining( ) , 8 ) ;
308
+ assert_eq ! ( parser. peek( 1 ) . unwrap( ) , b"2" ) ;
309
+ assert_eq ! ( parser. seek( 10 ) , Ok ( ( ) ) ) ;
310
+ assert_eq ! ( parser. pos( ) , 10 ) ;
311
+ assert_eq ! ( parser. remaining( ) , 0 ) ;
312
+ assert_eq ! ( parser. peek_all( ) , b"" ) ;
313
+ assert ! ( parser. seek( 11 ) . is_err( ) ) ;
314
+ assert_eq ! ( parser. pos( ) , 10 ) ;
315
+ assert_eq ! ( parser. remaining( ) , 0 ) ;
316
+ }
317
+
318
+ #[ test]
319
+ fn peek_check_len ( ) {
320
+ let mut parser = Parser :: from_static ( b"0123456789" ) ;
321
+ assert_eq ! ( parser. peek( 2 ) , Ok ( b"01" . as_ref( ) ) ) ;
322
+ assert_eq ! ( parser. check_len( 2 ) , Ok ( ( ) ) ) ;
323
+ assert_eq ! ( parser. peek( 10 ) , Ok ( b"0123456789" . as_ref( ) ) ) ;
324
+ assert_eq ! ( parser. check_len( 10 ) , Ok ( ( ) ) ) ;
325
+ assert ! ( parser. peek( 11 ) . is_err( ) ) ;
326
+ assert ! ( parser. check_len( 11 ) . is_err( ) ) ;
327
+ parser. advance ( 2 ) . unwrap ( ) ;
328
+ assert_eq ! ( parser. peek( 2 ) , Ok ( b"23" . as_ref( ) ) ) ;
329
+ assert_eq ! ( parser. check_len( 2 ) , Ok ( ( ) ) ) ;
330
+ assert_eq ! ( parser. peek( 8 ) , Ok ( b"23456789" . as_ref( ) ) ) ;
331
+ assert_eq ! ( parser. check_len( 8 ) , Ok ( ( ) ) ) ;
332
+ assert ! ( parser. peek( 9 ) . is_err( ) ) ;
333
+ assert ! ( parser. check_len( 9 ) . is_err( ) ) ;
334
+ }
335
+
336
+ #[ test]
337
+ fn peek_all ( ) {
338
+ let mut parser = Parser :: from_static ( b"0123456789" ) ;
339
+ assert_eq ! ( parser. peek_all( ) , b"0123456789" ) ;
340
+ parser. advance ( 2 ) . unwrap ( ) ;
341
+ assert_eq ! ( parser. peek_all( ) , b"23456789" ) ;
342
+ }
343
+
344
+ #[ test]
345
+ fn advance ( ) {
346
+ let mut parser = Parser :: from_static ( b"0123456789" ) ;
347
+ assert_eq ! ( parser. pos( ) , 0 ) ;
348
+ assert_eq ! ( parser. peek( 1 ) . unwrap( ) , b"0" ) ;
349
+ assert_eq ! ( parser. advance( 2 ) , Ok ( ( ) ) ) ;
350
+ assert_eq ! ( parser. pos( ) , 2 ) ;
351
+ assert_eq ! ( parser. peek( 1 ) . unwrap( ) , b"2" ) ;
352
+ assert ! ( parser. advance( 9 ) . is_err( ) ) ;
353
+ assert_eq ! ( parser. advance( 8 ) , Ok ( ( ) ) ) ;
354
+ assert_eq ! ( parser. pos( ) , 10 ) ;
355
+ assert_eq ! ( parser. peek_all( ) , b"" ) ;
356
+ }
357
+
358
+ #[ test]
359
+ fn parse_octets ( ) {
360
+ let mut parser = Parser :: from_static ( b"0123456789" ) ;
361
+ assert_eq ! ( parser. parse_octets( 2 ) . unwrap( ) , b"01" ) ;
362
+ assert_eq ! ( parser. parse_octets( 2 ) . unwrap( ) , b"23" ) ;
363
+ assert ! ( parser. parse_octets( 7 ) . is_err( ) ) ;
364
+ assert_eq ! ( parser. parse_octets( 6 ) . unwrap( ) , b"456789" ) ;
365
+ }
366
+
367
+ #[ test]
368
+ fn parse_buf ( ) {
369
+ let mut parser = Parser :: from_static ( b"0123456789" ) ;
370
+ let mut buf = [ 0u8 ; 2 ] ;
371
+ assert_eq ! ( parser. parse_buf( & mut buf) , Ok ( ( ) ) ) ;
372
+ assert_eq ! ( & buf, b"01" ) ;
373
+ assert_eq ! ( parser. parse_buf( & mut buf) , Ok ( ( ) ) ) ;
374
+ assert_eq ! ( & buf, b"23" ) ;
375
+ let mut buf = [ 0u8 ; 7 ] ;
376
+ assert ! ( parser. parse_buf( & mut buf) . is_err( ) ) ;
377
+ let mut buf = [ 0u8 ; 6 ] ;
378
+ assert_eq ! ( parser. parse_buf( & mut buf) , Ok ( ( ) ) ) ;
379
+ assert_eq ! ( & buf, b"456789" ) ;
380
+ }
381
+
382
+ #[ test]
383
+ fn parse_i8 ( ) {
384
+ let mut parser = Parser :: from_static ( b"\x12 \xd6 " ) ;
385
+ assert_eq ! ( parser. parse_i8( ) , Ok ( 0x12 ) ) ;
386
+ assert_eq ! ( parser. parse_i8( ) , Ok ( -42 ) ) ;
387
+ assert ! ( parser. parse_i8( ) . is_err( ) ) ;
388
+ }
389
+
390
+ #[ test]
391
+ fn parse_u8 ( ) {
392
+ let mut parser = Parser :: from_static ( b"\x12 \xd6 " ) ;
393
+ assert_eq ! ( parser. parse_u8( ) , Ok ( 0x12 ) ) ;
394
+ assert_eq ! ( parser. parse_u8( ) , Ok ( 0xd6 ) ) ;
395
+ assert ! ( parser. parse_u8( ) . is_err( ) ) ;
396
+ }
397
+
398
+ #[ test]
399
+ fn parse_i16 ( ) {
400
+ let mut parser = Parser :: from_static ( b"\x12 \x34 \xef \x6e \0 " ) ;
401
+ assert_eq ! ( parser. parse_i16( ) , Ok ( 0x1234 ) ) ;
402
+ assert_eq ! ( parser. parse_i16( ) , Ok ( -4242 ) ) ;
403
+ assert ! ( parser. parse_i16( ) . is_err( ) ) ;
404
+ }
405
+
406
+ #[ test]
407
+ fn parse_u16 ( ) {
408
+ let mut parser = Parser :: from_static ( b"\x12 \x34 \xef \x6e \0 " ) ;
409
+ assert_eq ! ( parser. parse_u16( ) , Ok ( 0x1234 ) ) ;
410
+ assert_eq ! ( parser. parse_u16( ) , Ok ( 0xef6e ) ) ;
411
+ assert ! ( parser. parse_u16( ) . is_err( ) ) ;
412
+ }
413
+
414
+ #[ test]
415
+ fn parse_i32 ( ) {
416
+ let mut parser =
417
+ Parser :: from_static ( b"\x12 \x34 \x56 \x78 \xfd \x78 \xa8 \x4e \0 \0 \0 " ) ;
418
+ assert_eq ! ( parser. parse_i32( ) , Ok ( 0x12345678 ) ) ;
419
+ assert_eq ! ( parser. parse_i32( ) , Ok ( -42424242 ) ) ;
420
+ assert ! ( parser. parse_i32( ) . is_err( ) ) ;
421
+ }
422
+
423
+ #[ test]
424
+ fn parse_u32 ( ) {
425
+ let mut parser =
426
+ Parser :: from_static ( b"\x12 \x34 \x56 \x78 \xfd \x78 \xa8 \x4e \0 \0 \0 " ) ;
427
+ assert_eq ! ( parser. parse_u32( ) , Ok ( 0x12345678 ) ) ;
428
+ assert_eq ! ( parser. parse_u32( ) , Ok ( 0xfd78a84e ) ) ;
429
+ assert ! ( parser. parse_u32( ) . is_err( ) ) ;
430
+ }
431
+ }
432
+
0 commit comments