Skip to content

Commit d95ee5d

Browse files
committed
Define BitArray.Count and add test coverage
1 parent 9eab2df commit d95ee5d

File tree

3 files changed

+46
-0
lines changed

3 files changed

+46
-0
lines changed

bitarray/bitarray_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,28 @@ func TestIsEmpty(t *testing.T) {
143143
assert.False(t, ba.IsEmpty())
144144
}
145145

146+
func TestCount(t *testing.T) {
147+
ba := newBitArray(500)
148+
assert.Equal(t, uint64(0), ba.Count())
149+
150+
require.NoError(t, ba.SetBit(0))
151+
assert.Equal(t, uint64(1), ba.Count())
152+
153+
require.NoError(t, ba.SetBit(40))
154+
require.NoError(t, ba.SetBit(64))
155+
require.NoError(t, ba.SetBit(100))
156+
require.NoError(t, ba.SetBit(200))
157+
require.NoError(t, ba.SetBit(469))
158+
require.NoError(t, ba.SetBit(500))
159+
assert.Equal(t, uint64(7), ba.Count())
160+
161+
require.NoError(t, ba.ClearBit(200))
162+
assert.Equal(t, uint64(6), ba.Count())
163+
164+
ba.Reset()
165+
assert.Equal(t, uint64(0), ba.Count())
166+
}
167+
146168
func TestClear(t *testing.T) {
147169
ba := newBitArray(10)
148170

bitarray/interface.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ type BitArray interface {
5959
// in the case of a dense bit array or the highest possible
6060
// seen capacity of the sparse array.
6161
Capacity() uint64
62+
// Count returns the number of set bits in this array.
63+
Count() uint64
6264
// Or will bitwise or the two bitarrays and return a new bitarray
6365
// representing the result.
6466
Or(other BitArray) BitArray

bitarray/sparse_bitarray_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,28 @@ func BenchmarkGetSetCompressedBits(b *testing.B) {
119119
}
120120
}
121121

122+
func TestCompressedCount(t *testing.T) {
123+
ba := newSparseBitArray()
124+
assert.Equal(t, uint64(0), ba.Count())
125+
126+
require.NoError(t, ba.SetBit(0))
127+
assert.Equal(t, uint64(1), ba.Count())
128+
129+
require.NoError(t, ba.SetBit(40))
130+
require.NoError(t, ba.SetBit(64))
131+
require.NoError(t, ba.SetBit(100))
132+
require.NoError(t, ba.SetBit(200))
133+
require.NoError(t, ba.SetBit(469))
134+
require.NoError(t, ba.SetBit(500))
135+
assert.Equal(t, uint64(7), ba.Count())
136+
137+
require.NoError(t, ba.ClearBit(200))
138+
assert.Equal(t, uint64(6), ba.Count())
139+
140+
ba.Reset()
141+
assert.Equal(t, uint64(0), ba.Count())
142+
}
143+
122144
func TestClearCompressedBit(t *testing.T) {
123145
ba := newSparseBitArray()
124146
ba.SetBit(5)

0 commit comments

Comments
 (0)