From dbc9754a36c72c440032cd219112f72510a72c03 Mon Sep 17 00:00:00 2001 From: Mike <45243121+tankf33der@users.noreply.github.com> Date: Mon, 5 Jan 2026 08:03:30 +0200 Subject: [PATCH] bitfield: fix pop_count(), add test (#26262) --- vlib/bitfield/bitfield.v | 8 +------- vlib/bitfield/bitfield_test.v | 5 +++++ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/vlib/bitfield/bitfield.v b/vlib/bitfield/bitfield.v index fef9a3a54..f2c93f19c 100644 --- a/vlib/bitfield/bitfield.v +++ b/vlib/bitfield/bitfield.v @@ -428,20 +428,14 @@ pub fn (a BitField) == (b BitField) bool { pub fn (instance BitField) pop_count() int { size := instance.size bitnslots := zbitnslots(size) - tail := size % slot_size mut count := 0 - for i in 0 .. bitnslots - 1 { + for i in 0 .. bitnslots { for j in 0 .. slot_size { if u32(instance.field[i] >> u32(j)) & u32(1) == u32(1) { count++ } } } - for j in 0 .. tail { - if u32(instance.field[bitnslots - 1] >> u32(j)) & u32(1) == u32(1) { - count++ - } - } return count } diff --git a/vlib/bitfield/bitfield_test.v b/vlib/bitfield/bitfield_test.v index 0f8f18f91..c7eb1f1cc 100644 --- a/vlib/bitfield/bitfield_test.v +++ b/vlib/bitfield/bitfield_test.v @@ -134,6 +134,11 @@ fn test_pop_count() { assert count0 == count1 } +fn test_pop_count2() { + b := bitfield.from_str('011000110110110000010001000011010011011111011110101001010011011010001100001001101111111011010011') + assert b.pop_count() == 50 +} + fn test_hamming() { len := 80 mut count := 0 -- 2.39.5