BitVecDeinit

Table of Contents

BitVecDeinit

Description

Deinitialize bitvector and free all allocated memory. After calling this, the bitvector should not be used unless re-initialized.

Parameters

NameDirectionDescription
bvinPointer to bitvector to deinitialize

Usage example (from documentation)

  BitVecDeinit(&flags);

Usage example (Cross-references)

    #define BYTES_FOR_BITS(bits) (((bits) + BITS_PER_BYTE - 1) / BITS_PER_BYTE)
    
    void BitVecDeinit(BitVec *bitvec) {
    ValidateBitVec(bitvec);
    if (bitvec->data) {
    }
    
    BitVecDeinit(&temp);
    }
    }
    
    BitVecDeinit(&temp);
    }
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    result = result && (count == 1000);
    
    BitVecDeinit(&bv);
    return result;
    }
    });
    
    BitVecDeinit(&bv);
    return result;
    }
    });
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (count == 2); // Should iterate over indices 8,9
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (count4 == sz);
    
    BitVecDeinit(&bv);
    }
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    u64    count = BitVecRunLengths(&empty_bv, runs, values, 5);
    result       = result && (count == 0);
    BitVecDeinit(&empty_bv);
    
    // Test 2: Single bit (true)
    result = result && (count == 1);
    result = result && (runs[0] == 1 && values[0] == true);
    BitVecDeinit(&single_bv);
    
    // Test 3: Single bit (false)
    result = result && (count == 1);
    result = result && (runs[0] == 1 && values[0] == false);
    BitVecDeinit(&single_false_bv);
    
    // Test 4: All same bits (all true)
    result = result && (count == 1);
    result = result && (runs[0] == 10 && values[0] == true);
    BitVecDeinit(&all_true_bv);
    
    // Test 5: Alternating bits (0101010)
    result = result && (alt_values[i] == (i % 2 == 0));
    }
    BitVecDeinit(&alternating_bv);
    
    return result;
    result = result && (count == 8);
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&large_bv);
    return result;
    }
    BitVecRunLengths(&bv, NULL, values, 5);
    
    BitVecDeinit(&bv);
    return true; // Should never reach here
    }
    BitVecRunLengths(&bv, runs, NULL, 5);
    
    BitVecDeinit(&bv);
    return true; // Should never reach here
    }
    BitVecRunLengths(&bv, runs, values, 0);
    
    BitVecDeinit(&bv);
    return true; // Should never reach here
    }
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    // Test BitVecDeinit function
    bool test_bitvec_deinit(void) {
    printf("Testing BitVecDeinit\n");
    
    BitVec bv = BitVecInit();
    
    // Deinitialize
    BitVecDeinit(&bv);
    
    // After deinitialization, the bitvector should be in a safe state
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up all
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    // Clean up all
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    
    return result;
    result = result && (bv.capacity == cap_before);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv.length == 10);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv.length == 0);
    
    BitVecDeinit(&bv);
    return result;
    }
    
    result = result && (bv.length == (size)(cycle % 10));
    BitVecDeinit(&bv);
    }
    
    // Test NULL bitvec pointer - should abort
    BitVecDeinit(NULL);
    
    // If we reach here, validation didn't work as expected
    
    // If we reach here, validation didn't work as expected
    BitVecDeinit(&bv);
    return false;
    }
    
    // If we reach here, validation didn't work as expected
    BitVecDeinit(&bv);
    return false;
    }
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&original);
    BitVecDeinit(&clone);
    // Clean up
    BitVecDeinit(&original);
    BitVecDeinit(&clone);
    
    return result;
    result = result && (bv.length == 0);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv.capacity >= 10000);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv1.length == 2);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    BitVec clone1 = BitVecClone(&bv);
    result        = result && (clone1.length == 0);
    BitVecDeinit(&clone1);
    
    // Test clone single element
    result        = result && (clone2.length == 1);
    result        = result && (BitVecGet(&clone2, 0) == true);
    BitVecDeinit(&clone2);
    
    // Test clone large data
    result = result && (BitVecGet(&clone3, 0) != BitVecGet(&bv, 0));
    
    BitVecDeinit(&clone3);
    BitVecDeinit(&bv);
    return result;
    
    BitVecDeinit(&clone3);
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&clone);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&clone);
    }
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&clone);
    }
    BitVecSwap(NULL, &bv);
    
    BitVecDeinit(&bv);
    return false;
    }
    (BitVecGet(&bv, 3) == false);
    
    BitVecDeinit(&bv);
    return result;
    }
    (BitVecGet(&bv, 3) == false);
    
    BitVecDeinit(&bv);
    return result;
    }
    (BitVecGet(&bv, 3) == false);   // unchanged
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecCapacity(&bv) >= 100);
    
    BitVecDeinit(&bv);
    return result;
    }
    bool result = (BitVecCountOnes(&bv) == 3) && (BitVecCountZeros(&bv) == 2);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 63) == false); // 63 % 2 == 1, so i%2==0 is false for i=63
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 0) == false);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 0) == false);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecCountZeros(&bv) == 0);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecCountZeros(&bv) == 0);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecCountZeros(&bv) == 500);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecCountZeros(&bv) == 1);
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecFindLast(&bv, false) == SIZE_MAX);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && !BitVecNone(&bv, false);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecLongestRun(&bv, false) == 1);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecFindLast(&bv, true) == 999);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && BitVecAny(&bv, false);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecLongestRun(&bv, false) == 1);
    
    BitVecDeinit(&bv);
    return result;
    }
    BitVecGet(&bv, 0);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecSet(&bv, 0, true);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecFlip(&bv, 0);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecGet(&bv, 1000);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecSet(&bv, 500, true);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecFlip(&bv, 10);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecGet(&bv, SIZE_MAX);
    
    BitVecDeinit(&bv);
    return false;
    }
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&source);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&source);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    
    return result;
    result = result && (BitVecGet(&bv, 999) == true);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 500) == false);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&empty);
    BitVecDeinit(&source);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&empty);
    BitVecDeinit(&source);
    return result;
    BitVecDeinit(&bv);
    BitVecDeinit(&empty);
    BitVecDeinit(&source);
    return result;
    }
    result = result && (BitVecGet(&bv, 1) == true);  // Second bit
    
    BitVecDeinit(&bv);
    return result;
    }
    BitVecInsertRange(&bv, SIZE_MAX, 1, true);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecFindPattern(NULL, &pattern); // Should cause LOG_FATAL
    
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecFindPattern(&source, NULL); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    return true;
    }
    BitVecFindLastPattern(NULL, &pattern); // Should cause LOG_FATAL
    
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecFindLastPattern(&source, NULL); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    return true;
    }
    BitVecFindAllPattern(&source, NULL, results, 10); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    return true;
    }
    BitVecFindAllPattern(&source, &pattern, NULL, 10); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecFindAllPattern(&source, &pattern, results, 0); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecPush(&prefix, true);
    BitVecStartsWith(NULL, &prefix);
    BitVecDeinit(&prefix);
    return true;
    }
    BitVecPush(&source, true);
    BitVecStartsWith(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&suffix, true);
    BitVecEndsWith(NULL, &suffix);
    BitVecDeinit(&suffix);
    return true;
    }
    BitVecPush(&source, true);
    BitVecEndsWith(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&pattern, true);
    BitVecContainsAt(NULL, &pattern, 0);
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecPush(&source, true);
    BitVecContainsAt(&source, NULL, 0);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&wildcard, false);
    BitVecMatches(NULL, &pattern, &wildcard);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return true;
    BitVecMatches(NULL, &pattern, &wildcard);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return true;
    }
    BitVecPush(&source, true);
    BitVecRegexMatch(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    bool test_bitvec_prefix_match_null_source(void) {
    printf("Testing BitVecPrefixMatch(NULL, patterns, 1) - should fatal\n");
    BitVecs vp = VecInitWithDeepCopy(NULL, BitVecDeinit);
    BitVecPush(VecPtrAt(&vp, 0), true);
    BitVecPrefixMatch(NULL, &vp);
    BitVecPush(&source, true);
    BitVecPrefixMatch(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    bool test_bitvec_suffix_match_null_source(void) {
    printf("Testing BitVecSuffixMatch(NULL, patterns, 1) - should fatal\n");
    BitVecs vp = VecInitWithDeepCopy(NULL, BitVecDeinit);
    BitVecPush(VecPtrAt(&vp, 0), true);
    BitVecSuffixMatch(NULL, &vp);
    BitVecPush(&source, true);
    BitVecSuffixMatch(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    result  = result && (bv.length == 999);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv.length == 5); // Should have 5 elements left
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (found == true) && (bv.length == 999);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (count == 500) && (bv.length == 500);
    
    BitVecDeinit(&bv);
    return result;
    }
    BitVecRemoveRange(&bv, SIZE_MAX, 1);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecPop(&bv);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecRemove(&bv, 0);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecRemoveRange(&bv, 0, 1);
    
    BitVecDeinit(&bv);
    return false;
    }
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    result = result && (bv.length == 1000);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv.length == 2);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&result_bv, 0) == false);
    
    BitVecDeinit(&result_bv);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&result_bv);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result = result && (BitVecGet(&bv, 1) == false);
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    }
    result = result && (BitVecGet(&bv, 2) == true);  // original bit 0
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    }
    result = result && (BitVecGet(&bv, 4) == false);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    }
    test_result = test_result && or_ones;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    }
    test_result = test_result && xor_commutative;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    BitVecDeinit(&result2);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    BitVecDeinit(&result2);
    return test_result;
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    BitVecDeinit(&result2);
    return test_result;
    }
    }
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    }
    BitVecAnd(NULL, &bv, &bv2);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    return false;
    
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    return false;
    }
    BitVecAnd(NULL, &bv1, &bv2);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return false;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return false;
    }
    BitVecOr(&result, &bv1, NULL);
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    }
    BitVecXor(&result, NULL, &bv1);
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    }
    BitVecNot(&result, NULL);
    
    BitVecDeinit(&result);
    return false;
    }
    
    // Cleanup
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv_empty);
    BitVecDeinit(&bv2);
    // Cleanup
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv_empty);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv_empty);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv_zero);
    BitVecDeinit(&bv_empty);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv_zero);
    StrDeinit(&output);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv_zero);
    StrDeinit(&output);
    return success;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&result);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&result);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return test_result;
    result = result && (bv.length == 1000);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (bv.length == 2);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&result_bv, 0) == false);
    
    BitVecDeinit(&result_bv);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&result_bv);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result = result && (BitVecGet(&bv, 1) == false);
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    }
    result = result && (BitVecGet(&bv, 2) == true);  // original bit 0
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    }
    result = result && (BitVecGet(&bv, 4) == false);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    
    BitVecDeinit(&bv);
    BitVecDeinit(&original);
    return result;
    }
    test_result = test_result && or_ones;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    }
    test_result = test_result && xor_commutative;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    BitVecDeinit(&result2);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    BitVecDeinit(&result2);
    return test_result;
    BitVecDeinit(&bv2);
    BitVecDeinit(&result1);
    BitVecDeinit(&result2);
    return test_result;
    }
    }
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&result);
    return test_result;
    }
    // Clean up
    StrDeinit(&str);
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&empty_bv);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&empty_bv);
    
    return result;
    result = result && (bytes[0] == 0xCD || bytes[0] == 0xB3);
    }
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&zero_bv);
    // Clean up
    BitVecDeinit(&bv);
    BitVecDeinit(&zero_bv);
    
    return result;
    StrDeinit(&str_obj);
    
    BitVecDeinit(&bv);
    return result;
    }
    BitVec bv1 = BitVecFromStr("");
    result     = result && (bv1.length == 0);
    BitVecDeinit(&bv1);
    
    // Test single character
    result     = result && (bv2.length == 1);
    result     = result && (BitVecGet(&bv2, 0) == true);
    BitVecDeinit(&bv2);
    
    // Test long string
    result     = result && (BitVecGet(&bv3, 0) == true);
    result     = result && (BitVecGet(&bv3, 1) == false);
    BitVecDeinit(&bv3);
    
    return result;
    BitVec bv2            = BitVecFromBytes(empty_bytes, 0); // 0 bits
    result                = result && (bv2.length == 0);
    BitVecDeinit(&bv2);
    
    // Test single byte
    BitVec bv3            = BitVecFromBytes(single_byte, 8); // 8 bits from 1 byte
    result                = result && (bv3.length == 8);
    BitVecDeinit(&bv3);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&bv3);
    
    BitVecDeinit(&bv);
    return result;
    }
    BitVec bv2 = BitVecFromInteger(0, 8);     // 8 bits for zero
    result     = result && (bv2.length == 8); // Should be 8 bits
    BitVecDeinit(&bv2);
    
    // Test large integer
    BitVec bv3 = BitVecFromInteger(UINT64_MAX, 64); // 64 bits for max value
    result     = result && (bv3.length == 64);
    BitVecDeinit(&bv3);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&bv3);
    
    BitVecDeinit(&bv);
    return result;
    }
    
    StrDeinit(&str);
    BitVecDeinit(&bv);
    }
    result = result && (recovered == value);
    
    BitVecDeinit(&bv);
    }
    }
    result = result && (recovered_byte == test_bytes[i]);
    
    BitVecDeinit(&bv);
    }
    u64 large_value = BitVecToInteger(&large_bv);
    result          = result && (large_value == 0xFFFFFFFFFFFFFFFF);
    BitVecDeinit(&large_bv);
    
    // Test oversized bitvec to integer (should handle gracefully)
    // Should return some value or 0, but not crash
    result = result && (oversized_value >= 0); // Always true for u64, but documents intent
    BitVecDeinit(&oversized);
    
    // Test zero-length conversions
    result             = result && (empty_bytes[0] == 0xFF); // Should be unchanged
    
    BitVecDeinit(&empty);
    
    return result;
    result       = result && (written == test_cases[i].byte_count);
    
    BitVecDeinit(&bv);
    }
    StrDeinit(&str2);
    StrDeinit(&str3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    StrDeinit(&str3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    
    return result;
    result = result && recovered_pattern_correct;
    
    BitVecDeinit(&large_bv);
    BitVecDeinit(&recovered_bv);
    
    BitVecDeinit(&large_bv);
    BitVecDeinit(&recovered_bv);
    
    // Test string to bitvec with large patterns
    result = result && large_pattern_correct;
    
    BitVecDeinit(&large_from_str);
    
    return result;
    
    // Should handle gracefully
    BitVecDeinit(&bv);
    
    // Test fromBytes with 0 bit length - should return empty bitvec
    BitVec empty_bv       = BitVecFromBytes(dummy_bytes, 0);
    bool   result         = (empty_bv.length == 0);
    BitVecDeinit(&empty_bv);
    
    return result;
    );
    StrDeinit(&result1);
    BitVecDeinit(&bv1);
    
    // Test 2: Reading hex format
    success    = success && (value2 == 0xDEAD);
    printf("Test 2 - Hex: 0x%llx, Success: %s\n", value2, (value2 == 0xDEAD) ? "true" : "false");
    BitVecDeinit(&bv2);
    
    // Test 3: Reading octal format
    success    = success && (value3 == 0755);
    printf("Test 3 - Octal: %llo, Success: %s\n", value3, (value3 == 0755) ? "true" : "false");
    BitVecDeinit(&bv3);
    
    // Test 4: Reading with whitespace
    );
    StrDeinit(&result4);
    BitVecDeinit(&bv4);
    
    // Test 5: Reading zero values
    );
    StrDeinit(&result5);
    BitVecDeinit(&bv5);
    
    printf("Overall BitVec reading success: %s\n", success ? "true" : "false");
    
    // Clean up
    BitVecDeinit(&bitvec);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bitvec);
    
    // Note: We can't easily test the negative case (invalid bitvector)
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    result = result && (count == 1000);
    
    BitVecDeinit(&bv);
    return result;
    }
    });
    
    BitVecDeinit(&bv);
    return result;
    }
    });
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (count == 2); // Should iterate over indices 8,9
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (count4 == sz);
    
    BitVecDeinit(&bv);
    }
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    u64    count = BitVecRunLengths(&empty_bv, runs, values, 5);
    result       = result && (count == 0);
    BitVecDeinit(&empty_bv);
    
    // Test 2: Single bit (true)
    result = result && (count == 1);
    result = result && (runs[0] == 1 && values[0] == true);
    BitVecDeinit(&single_bv);
    
    // Test 3: Single bit (false)
    result = result && (count == 1);
    result = result && (runs[0] == 1 && values[0] == false);
    BitVecDeinit(&single_false_bv);
    
    // Test 4: All same bits (all true)
    result = result && (count == 1);
    result = result && (runs[0] == 10 && values[0] == true);
    BitVecDeinit(&all_true_bv);
    
    // Test 5: Alternating bits (0101010)
    result = result && (alt_values[i] == (i % 2 == 0));
    }
    BitVecDeinit(&alternating_bv);
    
    return result;
    result = result && (count == 8);
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&large_bv);
    return result;
    }
    result    = result && (index == 1); // Should find pattern at index 1 (101...)
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    // Depending on the exact source pattern, adjust this test
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (index == 2); // Only occurrence at index 2
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (count == 3); // Should find at 0, 3, 6
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result    = result && (results[0] == 0);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result     = result && (count > 0); // Should find at least some patterns
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && !BitVecStartsWith(&source, &prefix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    }
    result = result && BitVecStartsWith(&source, &prefix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    }
    result = result && !BitVecEndsWith(&source, &suffix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    }
    result = result && !BitVecEndsWith(&source, &suffix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    }
    result = result && (BitVecFindPattern(&source, &pattern) == SIZE_MAX);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Pattern too long
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (count == 3);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (pos == 3); // Should find at position 3
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (BitVecGet(&source, 2) == true);
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    }
    result = result && (BitVecLen(&source) == 6); // 3 * 2 = 6
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    }
    result = result && BitVecMatches(&source, &pattern, &wildcard);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return result;
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return result;
    }
    result = result && (pos == 0); // Should match 110 with 1 error
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && !BitVecRegexMatch(&source, "111");
    
    BitVecDeinit(&source);
    return result;
    }
    
    BitVec  source   = BitVecInit();
    BitVecs patterns = VecInitWithDeepCopy(NULL, BitVecDeinit);
    bool    result   = true;
    
    VecDeinit(&patterns);
    BitVecDeinit(&source);
    return result;
    }
    
    BitVec  source   = BitVecInit();
    BitVecs patterns = VecInitWithDeepCopy(NULL, BitVecDeinit);
    bool    result   = true;
    
    VecDeinit(&patterns);
    BitVecDeinit(&source);
    return result;
    }
    result   = result && (distance == 1);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result   = result && (distance == 2); // Length of bv1
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result     = result && (fabs(similarity - 0.5) < 0.001);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result     = result && (fabs(similarity - 1.0) < 0.001);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result     = result && (fabs(similarity - 0.0) < 0.001);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result     = result && (similarity == 0.0);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result  = result && (product == 0);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result  = result && (product == 1); // Only first position counts
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result   = result && (distance == 1);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result   = result && (distance == 2);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result      = result && (fabs(correlation + 1.0) < 0.001);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result      = result && (correlation == 0.0); // No variance
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result  = result && (entropy == 0.0);
    
    BitVecDeinit(&bv);
    return result;
    }
    result  = result && (entropy == 0.0);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (score == -3); // 3 mismatches * -1
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result = result && (score == 2); // 2 matches
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result       = result && (best_pos == 0 || best_pos == 4);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result   = result && (best_pos == 0);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result = result && (edit_dist < 100);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&small1);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&small1);
    BitVecDeinit(&small2);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&small1);
    BitVecDeinit(&small2);
    return result;
    BitVecDeinit(&bv2);
    BitVecDeinit(&small1);
    BitVecDeinit(&small2);
    return result;
    }
    BitVecPush(&bv2, true);
    BitVecHammingDistance(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecHammingDistance(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecJaccardSimilarity(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecJaccardSimilarity(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecCosineSimilarity(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecCosineSimilarity(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecDotProduct(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecDotProduct(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecEditDistance(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecEditDistance(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecCorrelation(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecCorrelation(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecAlignmentScore(NULL, &bv2, 1, -1);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecAlignmentScore(&bv1, NULL, 1, -1);
    BitVecDeinit(&bv1);
    return true;
    }
    BitVecPush(&bv2, true);
    BitVecBestAlignment(NULL, &bv2);
    BitVecDeinit(&bv2);
    return true;
    }
    BitVecPush(&bv1, true);
    BitVecBestAlignment(&bv1, NULL);
    BitVecDeinit(&bv1);
    return true;
    }
    result    = result && (index == 1); // Should find pattern at index 1 (101...)
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    // Depending on the exact source pattern, adjust this test
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (index == 2); // Only occurrence at index 2
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (count == 3); // Should find at 0, 3, 6
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result    = result && (results[0] == 0);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result     = result && (count > 0); // Should find at least some patterns
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    BitVecFindPattern(NULL, &pattern); // Should cause LOG_FATAL
    
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecFindPattern(&source, NULL); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    return true;
    }
    BitVecFindLastPattern(NULL, &pattern); // Should cause LOG_FATAL
    
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecFindLastPattern(&source, NULL); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    return true;
    }
    BitVecFindAllPattern(&source, NULL, results, 10); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    return true;
    }
    BitVecFindAllPattern(&source, &pattern, NULL, 10); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecFindAllPattern(&source, &pattern, results, 0); // Should cause LOG_FATAL
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return true;
    }
    result = result && !BitVecStartsWith(&source, &prefix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    }
    result = result && BitVecStartsWith(&source, &prefix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&prefix);
    return result;
    }
    result = result && !BitVecEndsWith(&source, &suffix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    }
    result = result && !BitVecEndsWith(&source, &suffix);
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&suffix);
    return result;
    }
    result = result && !BitVecContains(&source, &pattern);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && BitVecContainsAt(&source, &pattern, 3);  // Should match
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && !BitVecContainsAt(&source, &pattern, 0); // Pattern too long
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (count == 3);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (pos == 3); // Should find at position 3
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && (BitVecGet(&source, 2) == true);
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    }
    result = result && (BitVecLen(&source) == 6); // 3 * 2 = 6
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    BitVecDeinit(&source);
    BitVecDeinit(&old_pattern);
    BitVecDeinit(&new_pattern);
    return result;
    }
    result = result && BitVecMatches(&source, &pattern, &wildcard);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return result;
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return result;
    }
    result = result && (pos == 0); // Should match 110 with 1 error
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    
    BitVecDeinit(&source);
    BitVecDeinit(&pattern);
    return result;
    }
    result = result && !BitVecRegexMatch(&source, "111");
    
    BitVecDeinit(&source);
    return result;
    }
    
    for (int i = 0; i < 3; i++) {
    BitVecDeinit(&patterns[i]);
    }
    BitVecDeinit(&source);
    BitVecDeinit(&patterns[i]);
    }
    BitVecDeinit(&source);
    return result;
    }
    
    for (int i = 0; i < 3; i++) {
    BitVecDeinit(&patterns[i]);
    }
    BitVecDeinit(&source);
    BitVecDeinit(&patterns[i]);
    }
    BitVecDeinit(&source);
    return result;
    }
    BitVecPush(&prefix, true);
    BitVecStartsWith(NULL, &prefix);
    BitVecDeinit(&prefix);
    return true;
    }
    BitVecPush(&source, true);
    BitVecStartsWith(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&suffix, true);
    BitVecEndsWith(NULL, &suffix);
    BitVecDeinit(&suffix);
    return true;
    }
    BitVecPush(&source, true);
    BitVecEndsWith(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&pattern, true);
    BitVecContainsAt(NULL, &pattern, 0);
    BitVecDeinit(&pattern);
    return true;
    }
    BitVecPush(&source, true);
    BitVecContainsAt(&source, NULL, 0);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&wildcard, false);
    BitVecMatches(NULL, &pattern, &wildcard);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return true;
    BitVecMatches(NULL, &pattern, &wildcard);
    BitVecDeinit(&pattern);
    BitVecDeinit(&wildcard);
    return true;
    }
    BitVecPush(&source, true);
    BitVecRegexMatch(&source, NULL);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&patterns[0], true);
    BitVecPrefixMatch(NULL, patterns, 1);
    BitVecDeinit(&patterns[0]);
    return true;
    }
    BitVecPush(&source, true);
    BitVecPrefixMatch(&source, NULL, 1);
    BitVecDeinit(&source);
    return true;
    }
    BitVecPush(&patterns[0], true);
    BitVecSuffixMatch(NULL, patterns, 1);
    BitVecDeinit(&patterns[0]);
    return true;
    }
    BitVecPush(&source, true);
    BitVecSuffixMatch(&source, NULL, 1);
    BitVecDeinit(&source);
    return true;
    }
    BitVecAnd(NULL, &bv, &bv2);
    
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    return false;
    
    BitVecDeinit(&bv);
    BitVecDeinit(&bv2);
    return false;
    }
    BitVecAnd(NULL, &bv1, &bv2);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return false;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return false;
    }
    BitVecOr(&result, &bv1, NULL);
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    }
    BitVecXor(&result, NULL, &bv1);
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    
    BitVecDeinit(&result);
    BitVecDeinit(&bv1);
    return false;
    }
    BitVecNot(&result, NULL);
    
    BitVecDeinit(&result);
    return false;
    }
    BitVecRunLengths(&bv, NULL, values, 5);
    
    BitVecDeinit(&bv);
    return true; // Should never reach here
    }
    BitVecRunLengths(&bv, runs, NULL, 5);
    
    BitVecDeinit(&bv);
    return true; // Should never reach here
    }
    BitVecRunLengths(&bv, runs, values, 0);
    
    BitVecDeinit(&bv);
    return true; // Should never reach here
    }
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    result = result && (BitVecGet(&bv, 999) == (999 % 3 == 0)); // Last
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 0) == true);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 0) == true);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecCountZeros(&bv) == 0);
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, bv.length - 1) == true); // Last bit
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecByteSize(&bv) >= 8); // At least 8 bytes for 64 bits
    
    BitVecDeinit(&bv);
    return result;
    }
    }
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecGet(&bv, 4) == true);  // F(4) = 0 XOR 1 = 1
    
    BitVecDeinit(&bv);
    return result;
    }
    BitVecGet(&bv, 0);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecSet(&bv, 0, true);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecFlip(&bv, 0);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecGet(&bv, 1000);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecSet(&bv, 500, true);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecFlip(&bv, 10);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecGet(&bv, SIZE_MAX);
    
    BitVecDeinit(&bv);
    return false;
    }
    result = result && (BitVecFindLast(&bv, false) == SIZE_MAX);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && !BitVecNone(&bv, false);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecLongestRun(&bv, false) == 1);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecFindLast(&bv, true) == 999);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && BitVecAny(&bv, false);
    
    BitVecDeinit(&bv);
    return result;
    }
    result = result && (BitVecLongestRun(&bv, false) == 1);
    
    BitVecDeinit(&bv);
    return result;
    }
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&subset);
    BitVecDeinit(&superset);
    // Clean up
    BitVecDeinit(&subset);
    BitVecDeinit(&superset);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    
    return result;
    
    // Clean up
    BitVecDeinit(&superset);
    BitVecDeinit(&subset);
    // Clean up
    BitVecDeinit(&superset);
    BitVecDeinit(&subset);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    
    return result;
    
    // Clean up
    BitVecDeinit(&bv);
    
    return result;
    result = result && BitVecIsSubset(&bv1, &bv2); // Empty is subset of empty
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    result = result && BitVecOverlaps(&bv1, &bv2);
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return result;
    }
    
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    // Clean up
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&subset);
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&subset);
    BitVecDeinit(&superset);
    BitVecDeinit(&bv2);
    BitVecDeinit(&bv3);
    BitVecDeinit(&subset);
    BitVecDeinit(&superset);
    BitVecDeinit(&bv3);
    BitVecDeinit(&subset);
    BitVecDeinit(&superset);
    
    return result;
    
    // Clean up
    BitVecDeinit(&large1);
    BitVecDeinit(&large2);
    BitVecDeinit(&pos);
    // Clean up
    BitVecDeinit(&large1);
    BitVecDeinit(&large2);
    BitVecDeinit(&pos);
    BitVecDeinit(&neg);
    BitVecDeinit(&large1);
    BitVecDeinit(&large2);
    BitVecDeinit(&pos);
    BitVecDeinit(&neg);
    BitVecDeinit(&large2);
    BitVecDeinit(&pos);
    BitVecDeinit(&neg);
    
    return result;
    BitVecEquals(NULL, &bv);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecEqualsRange(NULL, 0, &bv, 0, 1);
    
    BitVecDeinit(&bv);
    return false;
    }
    BitVecEqualsRange(&bv1, 0, &bv2, 0, 5); // Range exceeds length
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return false;
    
    BitVecDeinit(&bv1);
    BitVecDeinit(&bv2);
    return false;
    }

Share :

Related Posts

BitVecRegexMatch

BitVecRegexMatch Description Simple regex-style pattern matching for bitvectors. Supports basic patterns: ‘*’ (any sequence), ‘?’ (0 or 1), ‘[01]’ (literal).

Read More

BitVecSuffixMatch

BitVecSuffixMatch Description Match bitvector against an array of suffix patterns. Returns the index of the first matching suffix.

Read More

BitVecMatches

BitVecMatches Description Match bitvector against pattern with wildcards. Wildcards allow flexible pattern matching where some positions can be “any bit”.

Read More