Skip to content

Commit 42ddd6d

Browse files
committed
Add test coverage for GetSetBits
1 parent 4a54802 commit 42ddd6d

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

bitarray/bitarray_test.go

+45
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"testing"
2121

2222
"github.com/stretchr/testify/assert"
23+
"github.com/stretchr/testify/require"
2324
)
2425

2526
func TestBitOperations(t *testing.T) {
@@ -195,6 +196,50 @@ func BenchmarkGetBit(b *testing.B) {
195196
}
196197
}
197198

199+
func TestGetSetBits(t *testing.T) {
200+
ba := newBitArray(1000)
201+
buf := make([]uint64, 0, 5)
202+
203+
require.NoError(t, ba.SetBit(1))
204+
require.NoError(t, ba.SetBit(4))
205+
require.NoError(t, ba.SetBit(8))
206+
require.NoError(t, ba.SetBit(63))
207+
require.NoError(t, ba.SetBit(64))
208+
require.NoError(t, ba.SetBit(200))
209+
require.NoError(t, ba.SetBit(1000))
210+
211+
assert.Equal(t, []uint64{1, 4, 8, 63, 64}, ba.GetSetBits(0, buf))
212+
assert.Equal(t, []uint64{63, 64, 200, 1000}, ba.GetSetBits(10, buf))
213+
assert.Equal(t, []uint64{63, 64, 200, 1000}, ba.GetSetBits(63, buf))
214+
assert.Equal(t, []uint64{200, 1000}, ba.GetSetBits(128, buf))
215+
216+
require.NoError(t, ba.ClearBit(4))
217+
require.NoError(t, ba.ClearBit(64))
218+
assert.Equal(t, []uint64{1, 8, 63, 200, 1000}, ba.GetSetBits(0, buf))
219+
assert.Empty(t, ba.GetSetBits(1001, buf))
220+
221+
ba.Reset()
222+
assert.Empty(t, ba.GetSetBits(0, buf))
223+
}
224+
225+
func BenchmarkGetSetBits(b *testing.B) {
226+
numItems := uint64(168000)
227+
228+
ba := newBitArray(numItems)
229+
for i := uint64(0); i < numItems; i++ {
230+
if i%13 == 0 || i%5 == 0 {
231+
require.NoError(b, ba.SetBit(i))
232+
}
233+
}
234+
235+
buf := make([]uint64, 0, ba.Capacity())
236+
237+
b.ResetTimer()
238+
for i := 0; i < b.N; i++ {
239+
ba.GetSetBits(0, buf)
240+
}
241+
}
242+
198243
func TestEquality(t *testing.T) {
199244
ba := newBitArray(s + 1)
200245
other := newBitArray(s + 1)

bitarray/sparse_bitarray_test.go

+43
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"testing"
2121

2222
"github.com/stretchr/testify/assert"
23+
"github.com/stretchr/testify/require"
2324
)
2425

2526
func TestGetCompressedBit(t *testing.T) {
@@ -76,6 +77,48 @@ func BenchmarkSetCompressedBit(b *testing.B) {
7677
}
7778
}
7879

80+
func TestGetSetCompressedBits(t *testing.T) {
81+
ba := newSparseBitArray()
82+
buf := make([]uint64, 0, 5)
83+
84+
require.NoError(t, ba.SetBit(1))
85+
require.NoError(t, ba.SetBit(4))
86+
require.NoError(t, ba.SetBit(8))
87+
require.NoError(t, ba.SetBit(63))
88+
require.NoError(t, ba.SetBit(64))
89+
require.NoError(t, ba.SetBit(200))
90+
require.NoError(t, ba.SetBit(1000))
91+
92+
assert.Equal(t, []uint64{1, 4, 8, 63, 64}, ba.GetSetBits(0, buf))
93+
assert.Equal(t, []uint64{63, 64, 200, 1000}, ba.GetSetBits(10, buf))
94+
assert.Equal(t, []uint64{63, 64, 200, 1000}, ba.GetSetBits(63, buf))
95+
assert.Equal(t, []uint64{200, 1000}, ba.GetSetBits(128, buf))
96+
97+
require.NoError(t, ba.ClearBit(4))
98+
require.NoError(t, ba.ClearBit(64))
99+
assert.Equal(t, []uint64{1, 8, 63, 200, 1000}, ba.GetSetBits(0, buf))
100+
assert.Empty(t, ba.GetSetBits(1001, buf))
101+
102+
ba.Reset()
103+
assert.Empty(t, ba.GetSetBits(0, buf))
104+
}
105+
106+
func BenchmarkGetSetCompressedBits(b *testing.B) {
107+
ba := newSparseBitArray()
108+
for i := uint64(0); i < 168000; i++ {
109+
if i%13 == 0 || i%5 == 0 {
110+
require.NoError(b, ba.SetBit(i))
111+
}
112+
}
113+
114+
buf := make([]uint64, 0, ba.Capacity())
115+
116+
b.ResetTimer()
117+
for i := 0; i < b.N; i++ {
118+
ba.GetSetBits(0, buf)
119+
}
120+
}
121+
79122
func TestClearCompressedBit(t *testing.T) {
80123
ba := newSparseBitArray()
81124
ba.SetBit(5)

0 commit comments

Comments
 (0)