Skip to content

Commit bbff6e9

Browse files
authored
Merge pull request #441 from RoaringBitmap/issue440
fix: make RunOptimize idempotent
2 parents e4aecda + 07eef0b commit bbff6e9

File tree

3 files changed

+14
-2
lines changed

3 files changed

+14
-2
lines changed

arraycontainer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1233,7 +1233,7 @@ func (ac *arrayContainer) toEfficientContainer() container {
12331233
card := ac.getCardinality()
12341234
sizeAsArrayContainer := arrayContainerSizeInBytes(card)
12351235

1236-
if sizeAsRunContainer <= minOfInt(sizeAsBitmapContainer, sizeAsArrayContainer) {
1236+
if sizeAsRunContainer < minOfInt(sizeAsBitmapContainer, sizeAsArrayContainer) {
12371237
return newRunContainer16FromArray(ac)
12381238
}
12391239
if card <= arrayDefaultMaxSize {

bitmapcontainer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1187,7 +1187,7 @@ func (bc *bitmapContainer) toEfficientContainer() container {
11871187
card := bc.getCardinality()
11881188
sizeAsArrayContainer := arrayContainerSizeInBytes(card)
11891189

1190-
if sizeAsRunContainer <= minOfInt(sizeAsBitmapContainer, sizeAsArrayContainer) {
1190+
if sizeAsRunContainer < minOfInt(sizeAsBitmapContainer, sizeAsArrayContainer) {
11911191
return newRunContainer16FromBitmapContainer(bc)
11921192
}
11931193
if card <= arrayDefaultMaxSize {

roaring_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,18 @@ import (
1313
"github.com/stretchr/testify/require"
1414
)
1515

16+
func TestIssue440(t *testing.T) {
17+
a := NewBitmap()
18+
a.AddMany([]uint32{1, 2, 3})
19+
a.RunOptimize()
20+
b1, err := a.MarshalBinary()
21+
require.NoError(t, err)
22+
a.RunOptimize()
23+
b2, err := a.MarshalBinary()
24+
require.NoError(t, err)
25+
require.Equal(t, b1, b2)
26+
}
27+
1628
func checkValidity(t *testing.T, rb *Bitmap) {
1729
t.Helper()
1830

0 commit comments

Comments
 (0)