BitVecFindPattern

Table of Contents

BitVecFindPattern

Description

Find first occurrence of a bit pattern in the bitvector.

Parameters

NameDirectionDescription
bvinBitvector to search in
patterninPattern to search for

Usage example (from documentation)

  u64 index = BitVecFindPattern(&flags, &pattern);
  if (index != SIZE_MAX) { /* found at index */ }

Usage example (Cross-references)

    
    // Pattern search functions
    u64 BitVecFindPattern(BitVec *bv, BitVec *pattern) {
    ValidateBitVec(bv);
    ValidateBitVec(pattern);
    ValidateBitVec(new_pattern);
    
    u64 pos = BitVecFindPattern(bv, old_pattern);
    if (pos == SIZE_MAX) {
    return false;
    
    // 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);
    // 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);

Share :

Related Posts

BitVecToInteger

BitVecToInteger Description Convert bitvector to integer (up to 64 bits). Treats the bitvector as an unsigned integer with LSB first.

Read More

BitVecStartsWith

BitVecStartsWith Description Check if bitvector starts with the given bit pattern.

Read More

BitVecFind

BitVecFind Description Find index of first occurrence of a specific bit value.

Read More