@@ -712,7 +712,18 @@ impl<I: SliceIterator<Interval>> RunIter<I> {
712712 if let Some ( value) = index. checked_sub ( 1 ) {
713713 self . intervals . nth ( value) ;
714714 }
715- self . forward_offset = n - self . intervals . as_slice ( ) . first ( ) . unwrap ( ) . start ;
715+ let first_interval = self . intervals . as_slice ( ) . first ( ) . unwrap ( ) ;
716+ self . forward_offset = n - first_interval. start ;
717+ if self . intervals . as_slice ( ) . len ( ) == 1
718+ && u64:: from ( self . forward_offset ) + u64:: from ( self . backward_offset )
719+ >= first_interval. run_len ( )
720+ {
721+ // If we are now the only interval, and we've now met the forward offset,
722+ // consume the final interval
723+ _ = self . intervals . next ( ) ;
724+ self . forward_offset = 0 ;
725+ self . backward_offset = 0 ;
726+ }
716727 }
717728 Err ( index) => {
718729 if index == self . intervals . as_slice ( ) . len ( ) {
@@ -749,7 +760,18 @@ impl<I: SliceIterator<Interval>> RunIter<I> {
749760 if let Some ( value) = backward_index. checked_sub ( 1 ) {
750761 self . intervals . nth_back ( value) ;
751762 }
752- self . backward_offset = self . intervals . as_slice ( ) . last ( ) . unwrap ( ) . end - n;
763+ let last_interval = self . intervals . as_slice ( ) . last ( ) . unwrap ( ) ;
764+ self . backward_offset = last_interval. end - n;
765+ if self . intervals . as_slice ( ) . len ( ) == 1
766+ && u64:: from ( self . forward_offset ) + u64:: from ( self . backward_offset )
767+ >= last_interval. run_len ( )
768+ {
769+ // If we are now the only interval, and we've now met the forward offset,
770+ // consume the final interval
771+ _ = self . intervals . next_back ( ) ;
772+ self . forward_offset = 0 ;
773+ self . backward_offset = 0 ;
774+ }
753775 }
754776 Err ( index) => {
755777 if index == 0 {
0 commit comments