diff --git a/roaring/roaring.go b/roaring/roaring.go index 0e039b970..67ca9ebd6 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -104,10 +104,12 @@ func (b *Bitmap) Add(a ...uint64) (changed bool, err error) { } func (b *Bitmap) String() string { var buffer bytes.Buffer - for _, v := range b.Slice() { + for i, v := range b.Slice() { buffer.WriteString(fmt.Sprintf("%d ", v)) + if i > 0 { + buffer.WriteString(" ") + } } - buffer.WriteString("\n") return buffer.String() } @@ -720,10 +722,12 @@ func (b *Bitmap) Flip(start, end uint64) *Bitmap { result := NewBitmap() itr := b.Iterator() v, eof := itr.Next() + //copy over previous bits. for v < start && !eof { result.add(v) v, eof = itr.Next() } + //flip bits in range . for i := start; i <= end; i++ { if eof { result.add(i) @@ -733,6 +737,7 @@ func (b *Bitmap) Flip(start, end uint64) *Bitmap { result.add(i) } } + //add remaining. for !eof { result.add(v) v, eof = itr.Next() diff --git a/roaring/roaring_test.go b/roaring/roaring_test.go index c1d162551..53394d93b 100644 --- a/roaring/roaring_test.go +++ b/roaring/roaring_test.go @@ -226,6 +226,7 @@ func TestBitmap_Flip_Array(t *testing.T) { } +// Ensure Flip works with underlying Bitmap container. func TestBitmap_Flip_Bitmap(t *testing.T) { bm := roaring.NewBitmap() size := uint64(10000) @@ -242,6 +243,7 @@ func TestBitmap_Flip_Bitmap(t *testing.T) { } } +// Verify Flip works correctly with in different regions of bitmap, beginning, middle, and end. func TestBitmap_Flip_After(t *testing.T) { bm := roaring.NewBitmap(0, 2, 4, 8) results := bm.Flip(9, 10)