BitVecCountOnes
Description
Count number of bits set to 1 in bitvector.
Parameters
| Name | Direction | Description |
|---|---|---|
bv |
in | Bitvector to count ones in |
Usage example (from documentation)
u64 ones = BitVecCountOnes(&flags);Success
Returns the number of bits set to 1. The bitvector is not modified. Returns 0 for an empty bitvector.
Failure
Function cannot fail.
Usage example (Cross-references)
Usage examples (Cross-references)
- In
BitVec.c:513:
}
u64 BitVecCountOnes(const BitVec *bitvec) {
ValidateBitVec(bitvec);
if (!bitvec->data)- In
BitVec.c:528:
u64 BitVecCountZeros(const BitVec *bitvec) {
ValidateBitVec(bitvec);
return bitvec->length - BitVecCountOnes(bitvec);
}- In
BitVec.c:729:
ValidateBitVec(bv2);
u64 weight1 = BitVecCountOnes(bv1);
u64 weight2 = BitVecCountOnes(bv2);- In
BitVec.c:730:
u64 weight1 = BitVecCountOnes(bv1);
u64 weight2 = BitVecCountOnes(bv2);
if (weight1 < weight2) {- In
BitVec.c:1455:
u64 dot_product = BitVecDotProduct(bv1, bv2);
u64 ones1 = BitVecCountOnes(bv1);
u64 ones2 = BitVecCountOnes(bv2);- In
BitVec.c:1456:
u64 dot_product = BitVecDotProduct(bv1, bv2);
u64 ones1 = BitVecCountOnes(bv1);
u64 ones2 = BitVecCountOnes(bv2);
if (ones1 == 0 || ones2 == 0) {- In
BitVec.c:1597:
return 0.0;
u64 ones = BitVecCountOnes(bv);
u64 zeros = bv->length - ones;
// Test NULL bitvec pointer - should abort
BitVecCountOnes(NULL);
return false;
// Count true and false bits
bool result = (BitVecCountOnes(&bv) == 3) && (BitVecCountZeros(&bv) == 2);
BitVecDeinit(&bv);
// Test empty bitvector
result = result && (BitVecCountOnes(&bv) == 0);
result = result && (BitVecCountZeros(&bv) == 0); // Test single bit
BitVecPush(&bv, true);
result = result && (BitVecCountOnes(&bv) == 1);
result = result && (BitVecCountZeros(&bv) == 0); BitVecPush(&bv, true);
}
result = result && (BitVecCountOnes(&bv) == 100);
result = result && (BitVecCountZeros(&bv) == 0);
// Count and verify
result = result && (BitVecCountOnes(&bv) == 3);
result = result && (BitVecCountZeros(&bv) == 2); BitVecFlip(&bv, 3); // F -> T
result = result && (BitVecCountOnes(&bv) == 5);
result = result && (BitVecCountZeros(&bv) == 0);
// Verify counts
result = result && (BitVecCountOnes(&bv) == 500);
result = result && (BitVecCountZeros(&bv) == 500); BitVecFlip(&bv, 999); // F -> T
result = result && (BitVecCountOnes(&bv) == 500);
result = result && (BitVecCountZeros(&bv) == 500);
// Test count operations
result = result && (BitVecCountOnes(&bv) == 1);
result = result && (BitVecCountZeros(&bv) == 1); }
result = result && (BitVecCountOnes(&bv) == expected_true_count);
result = result && (BitVecCountZeros(&bv) == (size - expected_true_count)); }
result = result && (BitVecCountZeros(&bv) == 64);
result = result && (BitVecCountOnes(&bv) == 0);
// Test all ones
BitVecPush(&bv, true);
}
result = result && (BitVecCountOnes(&bv) == 64);
result = result && (BitVecCountZeros(&bv) == 0); BitVecPush(&bv, i % 2 == 0);
}
result = result && (BitVecCountOnes(&bv) == 32);
result = result && (BitVecCountZeros(&bv) == 32); BitVecPush(&bv, i % 8 == 0);
}
result = result && (BitVecCountOnes(&bv) == 8);
result = result && (BitVecCountZeros(&bv) == 56);
// Test counting
bool result = (BitVecCountOnes(&bv) == 3);
result = result && (BitVecCountZeros(&bv) == 4); BitVecPush(&bv, true);
result = result && (BitVecCountOnes(&bv) == 3);
result = result && (BitVecCountZeros(&bv) == 0);
// Test count on empty bitvec
result = result && (BitVecCountOnes(&bv) == 0);
result = result && (BitVecCountZeros(&bv) == 0); // Test count with single bit
BitVecPush(&bv, true);
result = result && (BitVecCountOnes(&bv) == 1);
result = result && (BitVecCountZeros(&bv) == 0); BitVecClear(&bv);
BitVecPush(&bv, false);
result = result && (BitVecCountOnes(&bv) == 0);
result = result && (BitVecCountZeros(&bv) == 1); BitVecPush(&bv, true);
}
result = result && (BitVecCountOnes(&bv) == 1000);
result = result && (BitVecCountZeros(&bv) == 0); }
result = result && (BitVecCountOnes(&bv) == 0);
result = result && (BitVecCountZeros(&bv) == 100); }
result = result && (BitVecCountOnes(&bv) == 100);
result = result && (BitVecCountZeros(&bv) == 0); }
result = result && (BitVecCountOnes(&bv) == 50);
result = result && (BitVecCountZeros(&bv) == 50);
// Test NULL bitvec pointer - should abort
BitVecCountOnes(NULL);
return false;
Last updated on