File tree Expand file tree Collapse file tree 2 files changed +18
-3
lines changed
Expand file tree Collapse file tree 2 files changed +18
-3
lines changed Original file line number Diff line number Diff line change @@ -829,9 +829,14 @@ impl<I: SliceIterator<Interval>> Iterator for RunIter<I> {
829829 if let Some ( skip) = n. checked_sub ( 1 ) {
830830 let mut to_skip = skip as u64 ;
831831 loop {
832- let to_remove = ( self . intervals . as_slice ( ) . first ( ) ?. run_len ( )
833- - self . forward_offset as u64 )
834- . min ( to_skip) ;
832+ let full_first_interval_len = self . intervals . as_slice ( ) . first ( ) ?. run_len ( ) ;
833+ let consumed_len = u64:: from ( self . forward_offset )
834+ + if self . intervals . as_slice ( ) . len ( ) == 1 {
835+ u64:: from ( self . backward_offset )
836+ } else {
837+ 0
838+ } ;
839+ let to_remove = ( full_first_interval_len - consumed_len) . min ( to_skip) ;
835840 to_skip -= to_remove;
836841 self . forward_offset += to_remove as u16 ;
837842 self . move_next ( ) ;
Original file line number Diff line number Diff line change @@ -278,6 +278,16 @@ fn advance_to_with_next_len() {
278278 assert_eq ! ( iter. nth_back( 0 ) , None ) ;
279279}
280280
281+ #[ test]
282+ fn tmp ( ) {
283+ let mut bitmap = RoaringBitmap :: new ( ) ;
284+ bitmap. insert_range ( 196363 ..=262143 ) ;
285+ let mut iter = bitmap. iter ( ) ;
286+ assert_eq ! ( iter. next_back( ) , Some ( 262143 ) ) ;
287+ iter. advance_to ( 228960 ) ;
288+ assert_eq ! ( iter. nth( 36643 ) , None ) ;
289+ }
290+
281291#[ test]
282292fn advance_bitset_front_and_back_past_each_other ( ) {
283293 let mut bitmap = RoaringBitmap :: new ( ) ;
You can’t perform that action at this time.
0 commit comments