Skip to content
BitVecFindPattern

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)
    
    // 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;
    // 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