@@ -526,6 +526,43 @@ mod tests {
526
526
assert_eq ! ( r. write( & [ 3 ] ) . unwrap( ) , 0 ) ;
527
527
}
528
528
529
+ #[ test]
530
+ fn seek_past_i64 ( ) {
531
+ let buf = [ 0xff ] ;
532
+ let mut r = Cursor :: new ( & buf[ ..] ) ;
533
+ assert_eq ! ( r. seek( SeekFrom :: Start ( 6 ) ) . unwrap( ) , 6 ) ;
534
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffff0 ) ) . unwrap( ) , 0x7ffffffffffffff6 ) ;
535
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x10 ) ) . unwrap( ) , 0x8000000000000006 ) ;
536
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0 ) ) . unwrap( ) , 0x8000000000000006 ) ;
537
+ assert ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffffd ) ) . is_err( ) ) ;
538
+ assert_eq ! ( r. seek( SeekFrom :: Current ( -0x8000000000000000 ) ) . unwrap( ) , 6 ) ;
539
+
540
+ let mut r = Cursor :: new ( vec ! [ 10 ] ) ;
541
+ assert_eq ! ( r. seek( SeekFrom :: Start ( 6 ) ) . unwrap( ) , 6 ) ;
542
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffff0 ) ) . unwrap( ) , 0x7ffffffffffffff6 ) ;
543
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x10 ) ) . unwrap( ) , 0x8000000000000006 ) ;
544
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0 ) ) . unwrap( ) , 0x8000000000000006 ) ;
545
+ assert ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffffd ) ) . is_err( ) ) ;
546
+ assert_eq ! ( r. seek( SeekFrom :: Current ( -0x8000000000000000 ) ) . unwrap( ) , 6 ) ;
547
+
548
+ let mut buf = [ 0 ] ;
549
+ let mut r = Cursor :: new ( & mut buf[ ..] ) ;
550
+ assert_eq ! ( r. seek( SeekFrom :: Start ( 6 ) ) . unwrap( ) , 6 ) ;
551
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffff0 ) ) . unwrap( ) , 0x7ffffffffffffff6 ) ;
552
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x10 ) ) . unwrap( ) , 0x8000000000000006 ) ;
553
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0 ) ) . unwrap( ) , 0x8000000000000006 ) ;
554
+ assert ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffffd ) ) . is_err( ) ) ;
555
+ assert_eq ! ( r. seek( SeekFrom :: Current ( -0x8000000000000000 ) ) . unwrap( ) , 6 ) ;
556
+
557
+ let mut r = Cursor :: new ( vec ! [ 10 ] . into_boxed_slice ( ) ) ;
558
+ assert_eq ! ( r. seek( SeekFrom :: Start ( 6 ) ) . unwrap( ) , 6 ) ;
559
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffff0 ) ) . unwrap( ) , 0x7ffffffffffffff6 ) ;
560
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0x10 ) ) . unwrap( ) , 0x8000000000000006 ) ;
561
+ assert_eq ! ( r. seek( SeekFrom :: Current ( 0 ) ) . unwrap( ) , 0x8000000000000006 ) ;
562
+ assert ! ( r. seek( SeekFrom :: Current ( 0x7ffffffffffffffd ) ) . is_err( ) ) ;
563
+ assert_eq ! ( r. seek( SeekFrom :: Current ( -0x8000000000000000 ) ) . unwrap( ) , 6 ) ;
564
+ }
565
+
529
566
#[ test]
530
567
fn seek_before_0 ( ) {
531
568
let buf = [ 0xff ] ;
0 commit comments