diff --git a/bitmap_amd64.go b/bitmap_amd64.go index aa86910..0980730 100644 --- a/bitmap_amd64.go +++ b/bitmap_amd64.go @@ -156,7 +156,7 @@ func (dst Bitmap) Count() int { } switch hardware { - case isAccelerated: + case isAccelerated, isAVX512: var res uint64 _count(unsafe.Pointer(&dst[0]), uint64(len(dst)), unsafe.Pointer(&res)) return int(res) diff --git a/bitmap_test.go b/bitmap_test.go index 90734ea..3990b2e 100644 --- a/bitmap_test.go +++ b/bitmap_test.go @@ -419,6 +419,20 @@ func TestCount(t *testing.T) { assert.Equal(t, 9, b.CountTo(128)) } +func TestCountWithHardware(t *testing.T) { + defer func(level int) { hardware = level }(hardware) + + var b Bitmap + for i := uint32(0); i < 10000; i += 3 { + b.Set(i) + } + + for _, level := range []int{isUnsupported, isAccelerated, isAVX512} { + hardware = level + assert.Equal(t, 3334, b.Count(), "hardware=%d", level) + } +} + func TestGrow(t *testing.T) { bitmap := make(Bitmap, 1, 5) bitmap[0] = 42