Skip to content

Commit e2c9e47

Browse files
authored
Merge pull request #496 from rogpeppe-contrib/fix-unset-iterator
fix AdvanceIfNeeded on UnsetIterator
2 parents 2e9b4b9 + afabc24 commit e2c9e47

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

iter_test.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,24 @@ func TestUnsetIteratorPeekable(t *testing.T) {
417417
assert.False(t, it.HasNext())
418418
})
419419

420+
t.Run("advance if needed on current value", func(t *testing.T) {
421+
b := New()
422+
b.AddRange(0, 0x10000)
423+
iter := b.UnsetIterator(0, 0x10002)
424+
var got []uint32
425+
prev := uint32(0)
426+
for len(got) < 10 {
427+
iter.AdvanceIfNeeded(prev)
428+
if !iter.HasNext() {
429+
break
430+
}
431+
x := iter.Next()
432+
got = append(got, x)
433+
prev = x
434+
}
435+
assert.Equal(t, []uint32{0x10000, 0x10001, 0x10002}, got)
436+
})
437+
420438
t.Run("peek next on empty iterator", func(t *testing.T) {
421439
b := New()
422440
b.AddInt(5) // Set bit in middle of range

roaring.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -814,8 +814,8 @@ func (ui *unsetIterator) PeekNext() uint32 {
814814

815815
// AdvanceIfNeeded advances the iterator so that the next value is at least minval
816816
func (ui *unsetIterator) AdvanceIfNeeded(minval uint32) {
817-
if minval <= ui.min {
818-
return // Already at or before the start of our range
817+
if uint64(minval) <= ui.current {
818+
return // Already at or past minval
819819
}
820820

821821
if minval > ui.max {

0 commit comments

Comments
 (0)