@@ -526,6 +526,43 @@ mod tests {
526526 assert_eq ! ( r. write( & [ 3 ] ) . unwrap( ) , 0 ) ;
527527 }
528528
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+
529566 #[ test]
530567 fn seek_before_0 ( ) {
531568 let buf = [ 0xff ] ;
0 commit comments