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 */ }Returns
Index of first occurrence, or SIZE_MAX if not found
Usage example (Cross-references)
Usage examples (Cross-references)
- In
BitVec.c:1054:
// Pattern search functions
u64 BitVecFindPattern(BitVec *bv, BitVec *pattern) {
ValidateBitVec(bv);
ValidateBitVec(pattern);- In
BitVec.c:1482:
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) {
WriteFmt("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) {
WriteFmt("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) {
WriteFmt("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) {
WriteFmt("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) {
WriteFmt("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) {
WriteFmt("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) {
WriteFmt("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);
Last updated on