File tree Expand file tree Collapse file tree 2 files changed +21
-6
lines changed
Expand file tree Collapse file tree 2 files changed +21
-6
lines changed Original file line number Diff line number Diff line change @@ -660,15 +660,15 @@ impl<I: SliceIterator<Interval>> RunIter<I> {
660660 self . forward_offset = 0 ;
661661 return ;
662662 }
663+ let only_interval = self . intervals . as_slice ( ) . len ( ) == 1 ;
663664 let total_offset = u64:: from ( self . forward_offset )
664- + if self . intervals . as_slice ( ) . len ( ) == 1 {
665- u64:: from ( self . backward_offset )
666- } else {
667- 0
668- } ;
665+ + if only_interval { u64:: from ( self . backward_offset ) } else { 0 } ;
669666 if Some ( total_offset) >= self . intervals . as_slice ( ) . first ( ) . map ( |f| f. run_len ( ) ) {
670667 self . intervals . next ( ) ;
671668 self . forward_offset = 0 ;
669+ if only_interval {
670+ self . backward_offset = 0 ;
671+ }
672672 }
673673 }
674674
@@ -680,11 +680,15 @@ impl<I: SliceIterator<Interval>> RunIter<I> {
680680 self . backward_offset = 0 ;
681681 return ;
682682 }
683+ let only_interval = self . intervals . as_slice ( ) . len ( ) == 1 ;
683684 let total_offset = u64:: from ( self . backward_offset )
684- + if self . intervals . as_slice ( ) . len ( ) == 1 { u64:: from ( self . forward_offset ) } else { 0 } ;
685+ + if only_interval { u64:: from ( self . forward_offset ) } else { 0 } ;
685686 if Some ( total_offset) >= self . intervals . as_slice ( ) . last ( ) . map ( |f| f. run_len ( ) ) {
686687 self . intervals . next_back ( ) ;
687688 self . backward_offset = 0 ;
689+ if only_interval {
690+ self . forward_offset = 0 ;
691+ }
688692 }
689693 }
690694
Original file line number Diff line number Diff line change @@ -267,6 +267,17 @@ fn advance_run_with_nth() {
267267 assert_eq ! ( iter. nth( 100563 ) , None ) ;
268268}
269269
270+ #[ test]
271+ fn advance_to_with_next_len ( ) {
272+ let mut bitmap = RoaringBitmap :: new ( ) ;
273+ bitmap. insert_range ( 100 ..0x4000 ) ;
274+ let mut iter = bitmap. iter ( ) ;
275+ iter. advance_back_to ( 100 ) ;
276+ assert_eq ! ( iter. next( ) , Some ( 100 ) ) ;
277+ assert_eq ! ( iter. len( ) , 0 ) ;
278+ assert_eq ! ( iter. nth_back( 0 ) , None ) ;
279+ }
280+
270281#[ test]
271282fn advance_bitset_front_and_back_past_each_other ( ) {
272283 let mut bitmap = RoaringBitmap :: new ( ) ;
You can’t perform that action at this time.
0 commit comments