Skip to content

Commit 318366d

Browse files
committed
fix: nth where n > u16::MAX is now correct
1 parent 6555872 commit 318366d

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

roaring/src/bitmap/store/interval_store.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -808,6 +808,13 @@ impl<I: SliceIterator<Interval>> Iterator for RunIter<I> {
808808
}
809809

810810
fn nth(&mut self, n: usize) -> Option<Self::Item> {
811+
if n > usize::from(u16::MAX) {
812+
// Consume the whole iterator
813+
self.intervals.nth(self.intervals.as_slice().len());
814+
self.forward_offset = 0;
815+
self.backward_offset = 0;
816+
return None;
817+
}
811818
if let Some(skip) = n.checked_sub(1) {
812819
let mut to_skip = skip as u64;
813820
loop {

roaring/tests/iter_advance_to.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,3 +246,12 @@ fn advance_run_front_and_back_past_each_other() {
246246
iter.advance_to(300);
247247
assert_eq!(iter.next(), None);
248248
}
249+
250+
#[test]
251+
fn advance_run_with_nth() {
252+
let mut bitmap = RoaringBitmap::new();
253+
bitmap.insert_range(36141..=224407);
254+
let mut iter = bitmap.iter();
255+
iter.advance_back_to(101779);
256+
assert_eq!(iter.nth(100563), None);
257+
}

0 commit comments

Comments
 (0)