BitVecFindAllPattern
BitVecFindAllPattern
Description
Find all occurrences of a bit pattern in the bitvector. Results array must be pre-allocated with sufficient space.
Parameters
| Name | Direction | Description |
|---|---|---|
bv |
in | Bitvector to search in |
pattern |
in | Pattern to search for |
results |
out | Array to store found indices |
max_results |
in | Maximum number of results to store |
Usage example (from documentation)
u64 indices[10];
u64 count = BitVecFindAllPattern(&flags, &pattern, indices, 10);Returns
Number of occurrences found
Usage example (Cross-references)
Usage examples (Cross-references)
- In
BitVec.c:1088:
}
u64 BitVecFindAllPattern(BitVec *bv, BitVec *pattern, size *results, u64 max_results) {
ValidateBitVec(bv);
ValidateBitVec(pattern); // Deadend test 5: BitVecFindAllPattern with NULL source
bool test_bitvec_find_all_pattern_null_source(void) {
WriteFmt("Testing BitVecFindAllPattern(NULL, pattern, results, 10) - should fatal\n");
size results[10];
// Don't create pattern BitVec since we're testing NULL source validation
BitVecFindAllPattern(NULL, (BitVec *)0x1, results, 10); // Should cause LOG_FATAL
return true; // Deadend test 6: BitVecFindAllPattern with NULL pattern
bool test_bitvec_find_all_pattern_null_pattern(void) {
WriteFmt("Testing BitVecFindAllPattern(source, NULL, results, 10) - should fatal\n");
BitVec source = BitVecInit(); BitVecPush(&source, false);
BitVecFindAllPattern(&source, NULL, results, 10); // Should cause LOG_FATAL
BitVecDeinit(&source); // Deadend test 7: BitVecFindAllPattern with NULL results
bool test_bitvec_find_all_pattern_null_results(void) {
WriteFmt("Testing BitVecFindAllPattern(source, pattern, NULL, 10) - should fatal\n");
BitVec source = BitVecInit(); BitVecPush(&pattern, true);
BitVecFindAllPattern(&source, &pattern, NULL, 10); // Should cause LOG_FATAL
BitVecDeinit(&source); // Deadend test 8: BitVecFindAllPattern with zero max_results
bool test_bitvec_find_all_pattern_zero_max_results(void) {
WriteFmt("Testing BitVecFindAllPattern(source, pattern, results, 0) - should fatal\n");
BitVec source = BitVecInit(); BitVecPush(&pattern, true);
BitVecFindAllPattern(&source, &pattern, results, 0); // Should cause LOG_FATAL
BitVecDeinit(&source); // Test BitVecFindAllPattern function
bool test_bitvec_find_all_pattern(void) {
WriteFmt("Testing BitVecFindAllPattern function\n");
BitVec source = BitVecInit();
size results[10];
u64 count = BitVecFindAllPattern(&source, &pattern, results, 10);
// Should find pattern at indices 0, 2, 4, 6, 8
// Test with limited results array
u64 count_limited = BitVecFindAllPattern(&source, &pattern, results, 3);
result = result && (count_limited == 3); // Should only return first 3 matches
BitVecPush(&pattern, false);
count = BitVecFindAllPattern(&source, &pattern, results, 10);
result = result && (count == 3); // Should find at 0, 3, 6
BitVecPush(&pattern, true);
u64 count = BitVecFindAllPattern(&source, &pattern, results, 1);
result = result && (count == 1);
result = result && (results[0] == 0); // Test finding all occurrences in large data
size results[200];
u64 count = BitVecFindAllPattern(&source, &pattern, results, 200);
result = result && (count > 0); // Should find at least some patterns
// Deadend test 5: BitVecFindAllPattern with NULL source
bool test_bitvec_find_all_pattern_null_source(void) {
WriteFmt("Testing BitVecFindAllPattern(NULL, pattern, results, 10) - should fatal\n");
size results[10];
// Don't create pattern BitVec since we're testing NULL source validation
BitVecFindAllPattern(NULL, (BitVec *)0x1, results, 10); // Should cause LOG_FATAL
return true; // Deadend test 6: BitVecFindAllPattern with NULL pattern
bool test_bitvec_find_all_pattern_null_pattern(void) {
WriteFmt("Testing BitVecFindAllPattern(source, NULL, results, 10) - should fatal\n");
BitVec source = BitVecInit(); BitVecPush(&source, false);
BitVecFindAllPattern(&source, NULL, results, 10); // Should cause LOG_FATAL
BitVecDeinit(&source); // Deadend test 7: BitVecFindAllPattern with NULL results
bool test_bitvec_find_all_pattern_null_results(void) {
WriteFmt("Testing BitVecFindAllPattern(source, pattern, NULL, 10) - should fatal\n");
BitVec source = BitVecInit(); BitVecPush(&pattern, true);
BitVecFindAllPattern(&source, &pattern, NULL, 10); // Should cause LOG_FATAL
BitVecDeinit(&source); // Deadend test 8: BitVecFindAllPattern with zero max_results
bool test_bitvec_find_all_pattern_zero_max_results(void) {
WriteFmt("Testing BitVecFindAllPattern(source, pattern, results, 0) - should fatal\n");
BitVec source = BitVecInit(); BitVecPush(&pattern, true);
BitVecFindAllPattern(&source, &pattern, results, 0); // Should cause LOG_FATAL
BitVecDeinit(&source); // Test BitVecFindAllPattern function
bool test_bitvec_find_all_pattern(void) {
WriteFmt("Testing BitVecFindAllPattern function\n");
BitVec source = BitVecInit();
size results[10];
u64 count = BitVecFindAllPattern(&source, &pattern, results, 10);
// Should find pattern at indices 0, 2, 4, 6, 8
// Test with limited results array
u64 count_limited = BitVecFindAllPattern(&source, &pattern, results, 3);
result = result && (count_limited == 3); // Should only return first 3 matches
BitVecPush(&pattern, false);
count = BitVecFindAllPattern(&source, &pattern, results, 10);
result = result && (count == 3); // Should find at 0, 3, 6
BitVecPush(&pattern, true);
u64 count = BitVecFindAllPattern(&source, &pattern, results, 1);
result = result && (count == 1);
result = result && (results[0] == 0); // Test finding all occurrences in large data
size results[200];
u64 count = BitVecFindAllPattern(&source, &pattern, results, 200);
result = result && (count > 0); // Should find at least some patterns
Last updated on