BitVecFindPattern
- Function
- August 22, 2025
Table of Contents
BitVecFindPattern
BitVecFindPattern
Description
Find first occurrence of a bit pattern in the bitvector.
Parameters
Name | Direction | Description |
---|---|---|
bv | in | Bitvector to search in |
pattern | in | Pattern to search for |
Usage example (from documentation)
u64 index = BitVecFindPattern(&flags, &pattern);
if (index != SIZE_MAX) { /* found at index */ }
Usage example (Cross-references)
- In
BitVec.c:1054
:
// Pattern search functions
u64 BitVecFindPattern(BitVec *bv, BitVec *pattern) {
ValidateBitVec(bv);
ValidateBitVec(pattern);
- In
BitVec.c:1484
:
ValidateBitVec(new_pattern);
u64 pos = BitVecFindPattern(bv, old_pattern);
if (pos == SIZE_MAX) {
return false;
// Deadend test 1: BitVecFindPattern with NULL source
bool test_bitvec_find_pattern_null_source(void) {
printf("Testing BitVecFindPattern(NULL, pattern) - should fatal\n");
BitVec pattern = BitVecInit();
BitVecPush(&pattern, true);
BitVecFindPattern(NULL, &pattern); // Should cause LOG_FATAL
BitVecDeinit(&pattern);
// Deadend test 2: BitVecFindPattern with NULL pattern
bool test_bitvec_find_pattern_null_pattern(void) {
printf("Testing BitVecFindPattern(source, NULL) - should fatal\n");
BitVec source = BitVecInit();
BitVecPush(&source, false);
BitVecFindPattern(&source, NULL); // Should cause LOG_FATAL
BitVecDeinit(&source);
// Test basic pattern finding
u64 index = BitVecFindPattern(&source, &pattern);
result = result && (index == 1); // Should find pattern at index 1 (101...)
// Test BitVecFindPattern function comprehensively
bool test_bitvec_find_pattern(void) {
printf("Testing BitVecFindPattern function\n");
BitVec source = BitVecInit();
BitVecPush(&pattern, true);
u64 index = BitVecFindPattern(&source, &pattern);
result = result && (index == 1); // First occurrence at index 1
BitVecClear(&pattern);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0); // First true bit at index 0
BitVecPush(&pattern, false);
BitVecPush(&pattern, false);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == SIZE_MAX); // Should not find three consecutive falses
BitVecPush(&source, true);
BitVecPush(&source, false);
u64 index = BitVecFindPattern(&source, &pattern); // Empty pattern
result = result && (index == SIZE_MAX);
BitVecPush(&pattern, true);
}
index = BitVecFindPattern(&source, &pattern); // Pattern length 5, source length 2
result = result && (index == SIZE_MAX);
BitVecClear(&pattern);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == SIZE_MAX);
BitVecPush(&pattern, false);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0);
BitVecPush(&source, true);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0);
BitVecPush(&pattern, false); // Now pattern is longer than source
index = BitVecFindPattern(&source, &pattern);
result = result && (index == SIZE_MAX);
BitVecPush(&pattern, false);
u64 index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0); // Should find first pattern at beginning
// BitVecFindPattern tests (replacing BitVecContains)
bool test_bitvec_contains_basic(void) {
printf("Testing BitVecFindPattern basic functionality\n");
BitVec source = BitVecInit();
BitVecPush(&pattern, true);
result = result && (BitVecFindPattern(&source, &pattern) != SIZE_MAX);
// Test non-existing pattern: 000
BitVecPush(&pattern, false);
result = result && (BitVecFindPattern(&source, &pattern) == SIZE_MAX);
BitVecDeinit(&source);
// Test basic pattern finding
u64 index = BitVecFindPattern(&source, &pattern);
result = result && (index == 1); // Should find pattern at index 1 (101...)
// Test BitVecFindPattern function comprehensively
bool test_bitvec_find_pattern(void) {
printf("Testing BitVecFindPattern function\n");
BitVec source = BitVecInit();
BitVecPush(&pattern, true);
u64 index = BitVecFindPattern(&source, &pattern);
result = result && (index == 1); // First occurrence at index 1
BitVecClear(&pattern);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0); // First true bit at index 0
BitVecPush(&pattern, false);
BitVecPush(&pattern, false);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == SIZE_MAX); // Should not find three consecutive falses
BitVecPush(&source, true);
BitVecPush(&source, false);
u64 index = BitVecFindPattern(&source, &pattern); // Empty pattern
result = result && (index == SIZE_MAX);
BitVecPush(&pattern, true);
}
index = BitVecFindPattern(&source, &pattern); // Pattern length 5, source length 2
result = result && (index == SIZE_MAX);
BitVecClear(&pattern);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == SIZE_MAX);
BitVecPush(&pattern, false);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0);
BitVecPush(&source, true);
BitVecPush(&pattern, true);
index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0);
BitVecPush(&pattern, false); // Now pattern is longer than source
index = BitVecFindPattern(&source, &pattern);
result = result && (index == SIZE_MAX);
BitVecPush(&pattern, false);
u64 index = BitVecFindPattern(&source, &pattern);
result = result && (index == 0); // Should find first pattern at beginning
// Deadend test 1: BitVecFindPattern with NULL source
bool test_bitvec_find_pattern_null_source(void) {
printf("Testing BitVecFindPattern(NULL, pattern) - should fatal\n");
BitVec pattern = BitVecInit();
BitVecPush(&pattern, true);
BitVecFindPattern(NULL, &pattern); // Should cause LOG_FATAL
BitVecDeinit(&pattern);
// Deadend test 2: BitVecFindPattern with NULL pattern
bool test_bitvec_find_pattern_null_pattern(void) {
printf("Testing BitVecFindPattern(source, NULL) - should fatal\n");
BitVec source = BitVecInit();
BitVecPush(&source, false);
BitVecFindPattern(&source, NULL); // Should cause LOG_FATAL
BitVecDeinit(&source);