Skip to content

BitVecInit

Description

Initialize bitvector with default values. It is mandatory to initialize bitvectors before use; not doing so is undefined behaviour.

This public macro supports both forms:

  • BitVecInit() - uses DefaultAllocator().
  • BitVecInit(alloc) - binds the supplied allocator.

Parameters

Name Direction Description
alloc in Optional allocator override.

Usage example (from documentation)

  BitVec flags = BitVecInit();

Success

Returns a fresh BitVec with length 0, capacity 0, NULL data pointer, and the chosen allocator bound. No heap allocation is performed until the bitvector is mutated.

Failure

Function cannot fail.

Usage example (Cross-references)

Usage examples (Cross-references)
    
    BitVec BitVecInitWithCapacityAlloc(u64 cap, Allocator alloc) {
        BitVec result = BitVecInit(alloc);
    
        if (cap == 0) {
        }
    
        *out = BitVecInit(bv->allocator);
        if (bv->length == 0) {
            return true;
        if (!BitVecReserve(out, bv->length) || !BitVecResize(out, bv->length)) {
            BitVecDeinit(out);
            *out = BitVecInit(bv->allocator);
            return false;
        }
    
        ValidateBitVec(bv);
        clone = BitVecInit(bv->allocator);
        (void)BitVecTryClone(&clone, bv);
        return clone;
        }
    
        *out = BitVecInit(alloc);
    
        u64 str_len = ZstrLen(str);
                if (!BitVecPush(out, true)) {
                    BitVecDeinit(out);
                    *out = BitVecInit(alloc);
                    return false;
                }
                if (!BitVecPush(out, false)) {
                    BitVecDeinit(out);
                    *out = BitVecInit(alloc);
                    return false;
                }
    
        if (!BitVecTryFromStrAlloc(&result, str, alloc)) {
            result = BitVecInit(alloc);
        }
        }
    
        *out = BitVecInit(alloc);
    
        // Handle empty bitvector case
        if (!BitVecReserve(out, bit_len) || !BitVecResize(out, bit_len)) {
            BitVecDeinit(out);
            *out = BitVecInit(alloc);
            return false;
        }
    
        if (!BitVecTryFromBytesAlloc(&result, bytes, bit_len, alloc)) {
            result = BitVecInit(alloc);
        }
        }
    
        *out = BitVecInit(alloc);
        if (bits == 0) {
            return true;
        if (!BitVecReserve(out, bits) || !BitVecResize(out, bits)) {
            BitVecDeinit(out);
            *out = BitVecInit(alloc);
            return false;
        }
    
        if (!BitVecTryFromIntegerAlloc(&result, value, bits, alloc)) {
            result = BitVecInit(alloc);
        }
        WriteFmt("Testing BitVecFindPattern(NULL, pattern) - should fatal\n");
    
        BitVec pattern = BitVecInit();
        BitVecPush(&pattern, true);
        WriteFmt("Testing BitVecFindPattern(source, NULL) - should fatal\n");
    
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecPush(&source, false);
        WriteFmt("Testing BitVecFindLastPattern(NULL, pattern) - should fatal\n");
    
        BitVec pattern = BitVecInit();
        BitVecPush(&pattern, true);
        WriteFmt("Testing BitVecFindLastPattern(source, NULL) - should fatal\n");
    
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecPush(&source, false);
        WriteFmt("Testing BitVecFindAllPattern(source, NULL, results, 10) - should fatal\n");
    
        BitVec source = BitVecInit();
        size   results[10];
        BitVecPush(&source, true);
        WriteFmt("Testing BitVecFindAllPattern(source, pattern, NULL, 10) - should fatal\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        BitVecPush(&source, true);
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        BitVecPush(&source, true);
        BitVecPush(&source, false);
        WriteFmt("Testing BitVecFindAllPattern(source, pattern, results, 0) - should fatal\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        size   results[10];
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        size   results[10];
        BitVecPush(&source, true);
    bool test_bitvec_starts_with_null_source(void) {
        WriteFmt("Testing BitVecStartsWith(NULL, prefix) - should fatal\n");
        BitVec prefix = BitVecInit();
        BitVecPush(&prefix, true);
        BitVecStartsWith(NULL, &prefix);
    bool test_bitvec_starts_with_null_prefix(void) {
        WriteFmt("Testing BitVecStartsWith(source, NULL) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecStartsWith(&source, NULL);
    bool test_bitvec_ends_with_null_source(void) {
        WriteFmt("Testing BitVecEndsWith(NULL, suffix) - should fatal\n");
        BitVec suffix = BitVecInit();
        BitVecPush(&suffix, true);
        BitVecEndsWith(NULL, &suffix);
    bool test_bitvec_ends_with_null_suffix(void) {
        WriteFmt("Testing BitVecEndsWith(source, NULL) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecEndsWith(&source, NULL);
    bool test_bitvec_contains_at_null_source(void) {
        WriteFmt("Testing BitVecContainsAt(NULL, pattern, 0) - should fatal\n");
        BitVec pattern = BitVecInit();
        BitVecPush(&pattern, true);
        BitVecContainsAt(NULL, &pattern, 0);
    bool test_bitvec_contains_at_null_pattern(void) {
        WriteFmt("Testing BitVecContainsAt(source, NULL, 0) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecContainsAt(&source, NULL, 0);
    bool test_bitvec_matches_null_source(void) {
        WriteFmt("Testing BitVecMatches(NULL, pattern, wildcard) - should fatal\n");
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        BitVecPush(&pattern, true);
        WriteFmt("Testing BitVecMatches(NULL, pattern, wildcard) - should fatal\n");
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        BitVecPush(&pattern, true);
        BitVecPush(&wildcard, false);
    bool test_bitvec_regex_match_null_pattern(void) {
        WriteFmt("Testing BitVecRegexMatch(source, NULL) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecRegexMatch(&source, NULL);
    bool test_bitvec_prefix_match_null_patterns(void) {
        WriteFmt("Testing BitVecPrefixMatch(source, NULL, 1) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecPrefixMatch(&source, NULL);
    bool test_bitvec_suffix_match_null_patterns(void) {
        WriteFmt("Testing BitVecSuffixMatch(source, NULL, 1) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecSuffixMatch(&source, NULL);
    
        // Test 1: Reading binary string
        BitVec bv1 = BitVecInit();
        z          = "10110";
        StrReadFmt(z, "{}", bv1);
    
        // Test 2: Reading hex format
        BitVec bv2 = BitVecInit();
        z          = "0xDEAD";
        StrReadFmt(z, "{}", bv2);
    
        // Test 3: Reading octal format
        BitVec bv3 = BitVecInit();
        z          = "0o755";
        StrReadFmt(z, "{}", bv3);
    
        // Test 4: Reading with whitespace
        BitVec bv4 = BitVecInit();
        z          = "   1101";
        StrReadFmt(z, "{}", bv4);
    
        // Test 5: Reading zero values
        BitVec bv5 = BitVecInit();
        z          = "0";
        StrReadFmt(z, "{}", bv5);
        WriteFmt("Testing BitVecGet\n");
    
        BitVec bv = BitVecInit();
    
        // Push some bits
        WriteFmt("Testing BitVecSet\n");
    
        BitVec bv = BitVecInit();
    
        // Reserve space and set bits
        WriteFmt("Testing BitVecFlip\n");
    
        BitVec bv = BitVecInit();
    
        // Push some bits
        WriteFmt("Testing BitVecLength and BitVecCapacity\n");
    
        BitVec bv = BitVecInit();
    
        // Initially empty
        WriteFmt("Testing BitVecCount operations\n");
    
        BitVec bv = BitVecInit();
    
        // Push a pattern: true, false, true, false, true
        WriteFmt("Testing BitVecGet edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecSet edge cases\n");
    
        BitVec bv = BitVecInit();
    
        // Set first bit
        WriteFmt("Testing BitVecFlip edge cases\n");
    
        BitVec bv = BitVecInit();
    
        // Test flipping single bit
        WriteFmt("Testing BitVecCount edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec multiple access operations\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec access with large patterns\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec macro functions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec access stress test\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec comprehensive bit patterns\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecFind functions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec predicate functions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecLongestRun\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecFind edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec predicate edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecLongestRun edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecForeachIdx macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true, false
        WriteFmt("Testing BitVecForeach macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true
        WriteFmt("Testing BitVecForeachReverseIdx macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true, false
        WriteFmt("Testing BitVecForeachReverse macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true
        WriteFmt("Testing BitVecForeachInRangeIdx macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true, false, true
        WriteFmt("Testing BitVecForeachInRange macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: false, true, true, false, true
        WriteFmt("Testing BitVec foreach edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        int    count  = 0;
        WriteFmt("Testing BitVec foreach idx edge cases\n");
    
        BitVec bv       = BitVecInit();
        bool   result   = true;
        u64    last_idx = SIZE_MAX;
        WriteFmt("Testing BitVec foreach reverse edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec foreach range edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        for (int sz = 0; sz < 100; sz += 10) {
            BitVec bv = BitVecInit();
    
            // Create bitvec of varying sz
        WriteFmt("Testing BitVecRunLengths basic functionality\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        // Test 1: Empty bitvector
        BitVec empty_bv = BitVecInit();
        u64    runs[5];
        bool   values[5];
    
        // Test 2: Single bit (true)
        BitVec single_bv = BitVecInit();
        BitVecPush(&single_bv, true);
        count  = BitVecRunLengths(&single_bv, runs, values, 5);
    
        // Test 3: Single bit (false)
        BitVec single_false_bv = BitVecInit();
        BitVecPush(&single_false_bv, false);
        count  = BitVecRunLengths(&single_false_bv, runs, values, 5);
    
        // Test 4: All same bits (all true)
        BitVec all_true_bv = BitVecInit();
        for (int i = 0; i < 10; i++) {
            BitVecPush(&all_true_bv, true);
    
        // Test 5: Alternating bits (0101010)
        BitVec alternating_bv = BitVecInit();
        for (int i = 0; i < 7; i++) {
            BitVecPush(&alternating_bv, i % 2 == 0);
        WriteFmt("Testing BitVecRunLengths boundary conditions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        // Test with large bitvector
        BitVec large_bv = BitVecInit();
    
        // Create pattern that results in many runs
        WriteFmt("Testing BitVecRunLengths with NULL runs array\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        bool values[5];
        WriteFmt("Testing BitVecRunLengths with NULL values array\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        u64 runs[5];
        WriteFmt("Testing BitVecRunLengths with zero max_runs\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        u64  runs[5];
        WriteFmt("Testing BitVec get bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test get from empty bitvec - should abort
        WriteFmt("Testing BitVec set bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test set on empty bitvec - should abort
        WriteFmt("Testing BitVec flip bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test flip on empty bitvec - should abort
        WriteFmt("Testing BitVec get with large out-of-bounds index\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        BitVecPush(&bv, false);
        WriteFmt("Testing BitVec set with large out-of-bounds index\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        BitVecPush(&bv, false);
        WriteFmt("Testing BitVec flip with edge case out-of-bounds index\n");
    
        BitVec bv = BitVecInit();
        for (int i = 0; i < 10; i++) {
            BitVecPush(&bv, i % 2 == 0);
        WriteFmt("Testing BitVec get with maximum index value\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
    
        // Test 2: Empty BitVec
        BitVec bv_empty = BitVecInit();
        StrWriteFmt(&output, "{}", bv_empty);
        success = success && (output.length == 0);
        WriteFmt("Testing BitVecForeachIdx macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true, false
        WriteFmt("Testing BitVecForeach macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true
        WriteFmt("Testing BitVecForeachReverseIdx macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true, false
        WriteFmt("Testing BitVecForeachReverse macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true
        WriteFmt("Testing BitVecForeachInRangeIdx macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: true, false, true, false, true
        WriteFmt("Testing BitVecForeachInRange macro\n");
    
        BitVec bv = BitVecInit();
    
        // Add test pattern: false, true, true, false, true
        WriteFmt("Testing BitVec foreach edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        int    count  = 0;
        WriteFmt("Testing BitVec foreach idx edge cases\n");
    
        BitVec bv       = BitVecInit();
        bool   result   = true;
        u64    last_idx = SIZE_MAX;
        WriteFmt("Testing BitVec foreach reverse edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec foreach range edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        for (int sz = 0; sz < 100; sz += 10) {
            BitVec bv = BitVecInit();
    
            // Create bitvec of varying sz
        WriteFmt("Testing BitVecRunLengths basic functionality\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        // Test 1: Empty bitvector
        BitVec empty_bv = BitVecInit();
        u64    runs[5];
        bool   values[5];
    
        // Test 2: Single bit (true)
        BitVec single_bv = BitVecInit();
        BitVecPush(&single_bv, true);
        count  = BitVecRunLengths(&single_bv, runs, values, 5);
    
        // Test 3: Single bit (false)
        BitVec single_false_bv = BitVecInit();
        BitVecPush(&single_false_bv, false);
        count  = BitVecRunLengths(&single_false_bv, runs, values, 5);
    
        // Test 4: All same bits (all true)
        BitVec all_true_bv = BitVecInit();
        for (int i = 0; i < 10; i++) {
            BitVecPush(&all_true_bv, true);
    
        // Test 5: Alternating bits (0101010)
        BitVec alternating_bv = BitVecInit();
        for (int i = 0; i < 7; i++) {
            BitVecPush(&alternating_bv, i % 2 == 0);
        WriteFmt("Testing BitVecRunLengths boundary conditions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        // Test with large bitvector
        BitVec large_bv = BitVecInit();
    
        // Create pattern that results in many runs
        WriteFmt("Testing BitVecPop\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits
        WriteFmt("Testing BitVecRemove (single bit)\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits: true, false, true, false, true
        WriteFmt("Testing BitVecRemoveRange\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits: true, false, true, true, false, true
        WriteFmt("Testing BitVecRemoveFirst\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits: true, false, true, false, true
        WriteFmt("Testing BitVecRemoveLast\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits: true, false, true, false, true
        WriteFmt("Testing BitVecRemoveAll\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits: true, false, true, false, true, false
        WriteFmt("Testing BitVecPop edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecRemove edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecRemoveRange edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecRemoveFirst/Last edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecRemoveAll edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec remove invalid range handling\n");
    
        BitVec bv = BitVecInit();
    
        // Test removing beyond capacity limit - should abort
        WriteFmt("Testing BitVec pop bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test pop from empty bitvec - should abort
        WriteFmt("Testing BitVec remove bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test remove from empty bitvec - should abort
        WriteFmt("Testing BitVec remove range bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test remove range from empty bitvec - should abort
        WriteFmt("Testing BitVecHammingDistance basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecHammingDistance edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecJaccardSimilarity basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecJaccardSimilarity edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecCosineSimilarity basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecCosineSimilarity edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecDotProduct basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecDotProduct edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEditDistance basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEditDistance edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecCorrelation basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecCorrelation edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEntropy basic functionality\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEntropy edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecAlignmentScore basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecAlignmentScore edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecBestAlignment basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecBestAlignment edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec Math stress tests\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        // Test edit distance with smaller vectors (expensive operation)
        BitVec small1 = BitVecInit();
        BitVec small2 = BitVecInit();
        for (int i = 0; i < 50; i++) {
        // Test edit distance with smaller vectors (expensive operation)
        BitVec small1 = BitVecInit();
        BitVec small2 = BitVecInit();
        for (int i = 0; i < 50; i++) {
            BitVecPush(&small1, i % 2 == 0);
    bool test_bitvec_hamming_distance_null_bv1(void) {
        WriteFmt("Testing BitVecHammingDistance(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecHammingDistance(NULL, &bv2);
    bool test_bitvec_hamming_distance_null_bv2(void) {
        WriteFmt("Testing BitVecHammingDistance(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecHammingDistance(&bv1, NULL);
    bool test_bitvec_jaccard_similarity_null_bv1(void) {
        WriteFmt("Testing BitVecJaccardSimilarity(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecJaccardSimilarity(NULL, &bv2);
    bool test_bitvec_jaccard_similarity_null_bv2(void) {
        WriteFmt("Testing BitVecJaccardSimilarity(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecJaccardSimilarity(&bv1, NULL);
    bool test_bitvec_cosine_similarity_null_bv1(void) {
        WriteFmt("Testing BitVecCosineSimilarity(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecCosineSimilarity(NULL, &bv2);
    bool test_bitvec_cosine_similarity_null_bv2(void) {
        WriteFmt("Testing BitVecCosineSimilarity(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecCosineSimilarity(&bv1, NULL);
    bool test_bitvec_dot_product_null_bv1(void) {
        WriteFmt("Testing BitVecDotProduct(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecDotProduct(NULL, &bv2);
    bool test_bitvec_dot_product_null_bv2(void) {
        WriteFmt("Testing BitVecDotProduct(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecDotProduct(&bv1, NULL);
    bool test_bitvec_edit_distance_null_bv1(void) {
        WriteFmt("Testing BitVecEditDistance(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecEditDistance(NULL, &bv2);
    bool test_bitvec_edit_distance_null_bv2(void) {
        WriteFmt("Testing BitVecEditDistance(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecEditDistance(&bv1, NULL);
    bool test_bitvec_correlation_null_bv1(void) {
        WriteFmt("Testing BitVecCorrelation(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecCorrelation(NULL, &bv2);
    bool test_bitvec_correlation_null_bv2(void) {
        WriteFmt("Testing BitVecCorrelation(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecCorrelation(&bv1, NULL);
    bool test_bitvec_alignment_score_null_bv1(void) {
        WriteFmt("Testing BitVecAlignmentScore(NULL, bv2, 1, -1) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecAlignmentScore(NULL, &bv2, 1, -1);
    bool test_bitvec_alignment_score_null_bv2(void) {
        WriteFmt("Testing BitVecAlignmentScore(bv1, NULL, 1, -1) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecAlignmentScore(&bv1, NULL, 1, -1);
    bool test_bitvec_best_alignment_null_bv1(void) {
        WriteFmt("Testing BitVecBestAlignment(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecBestAlignment(NULL, &bv2);
    bool test_bitvec_best_alignment_null_bv2(void) {
        WriteFmt("Testing BitVecBestAlignment(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecBestAlignment(&bv1, NULL);
        WriteFmt("Testing BitVecEquals\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVec bv3 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVec bv3 = BitVecInit();
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVec bv3 = BitVecInit();
    
        // Test equal empty bitvectors
        WriteFmt("Testing BitVecCompare\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Test equal bitvectors
        WriteFmt("Testing BitVecLexCompare\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Test lexicographic comparison
        WriteFmt("Testing BitVecNumericalCompare\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Create bitvectors representing different numbers
        WriteFmt("Testing BitVecWeightCompare\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // bv1: 111 (3 ones)
        WriteFmt("Testing BitVecIsSubset\n");
    
        BitVec subset   = BitVecInit();
        BitVec superset = BitVecInit();
    
        BitVec subset   = BitVecInit();
        BitVec superset = BitVecInit();
    
        // Create superset: 1111
        WriteFmt("Testing BitVecSignedCompare\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Test positive vs negative (MSB is sign bit)
        WriteFmt("Testing BitVecIsSuperset\n");
    
        BitVec superset = BitVecInit();
        BitVec subset   = BitVecInit();
    
        BitVec superset = BitVecInit();
        BitVec subset   = BitVecInit();
    
        // Create superset: 1111
        WriteFmt("Testing BitVecOverlaps\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Create overlapping bitvectors
        WriteFmt("Testing BitVecDisjoint and BitVecIntersects\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Create disjoint bitvectors
        WriteFmt("Testing BitVecEqualsRange\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Create test patterns
        WriteFmt("Testing BitVecCompareRange\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Create test patterns
        WriteFmt("Testing BitVecIsLexicographicallyLess and BitVecIsNumericallyLess\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Test lexicographic comparison
        WriteFmt("Testing BitVecIsSorted\n");
    
        BitVec bv = BitVecInit();
    
        // Test empty bitvector (should be sorted)
        WriteFmt("Testing BitVec compare edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec set operations edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec comprehensive comparison operations\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        // Test transitivity: if A < B and B < C, then A < C
        BitVec bv3 = BitVecInit();
        // bv3: larger than bv2
        for (int i = 0; i < 8; i++) {
    
        // Test subset/superset consistency
        BitVec subset   = BitVecInit();
        BitVec superset = BitVecInit();
        // Test subset/superset consistency
        BitVec subset   = BitVecInit();
        BitVec superset = BitVecInit();
    
        // Create actual subset/superset relationship
        WriteFmt("Testing BitVec large-scale comparison operations\n");
    
        BitVec large1 = BitVecInit();
        BitVec large2 = BitVecInit();
        bool   result = true;
    
        BitVec large1 = BitVecInit();
        BitVec large2 = BitVecInit();
        bool   result = true;
    
        // Verify signed vs unsigned comparison differences
        BitVec pos = BitVecInit();
        BitVec neg = BitVecInit();
        // Verify signed vs unsigned comparison differences
        BitVec pos = BitVecInit();
        BitVec neg = BitVecInit();
    
        // Positive number (MSB = 0): 01111111
        WriteFmt("Testing BitVec compare NULL pointer handling\n");
    
        BitVec bv = BitVecInit();
    
        // Test NULL pointer - should abort
        WriteFmt("Testing BitVec range operations NULL handling\n");
    
        BitVec bv = BitVecInit();
    
        // Test NULL pointer in range operations - should abort
        WriteFmt("Testing BitVec range operations bounds checking\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Create small bitvectors
    // Test BitVecInit function
    bool test_bitvec_init(void) {
        WriteFmt("Testing BitVecInit\n");
    
        // Test basic initialization
    
        // Test basic initialization
        BitVec bv = BitVecInit();
    
        // Check initial state
        WriteFmt("Testing BitVecDeinit\n");
    
        BitVec bv = BitVecInit();
    
        // Add some data to make sure deinitialization works with allocated memory
        WriteFmt("Testing BitVecReserve\n");
    
        BitVec bv = BitVecInit();
    
        // Reserve space for 50 bits
        WriteFmt("Testing BitVecClear\n");
    
        BitVec bv = BitVecInit();
    
        // Add some data
        WriteFmt("Testing BitVecResize\n");
    
        BitVec bv = BitVecInit();
    
        // Add some initial data
    // Edge case tests - boundary conditions and unusual but valid inputs
    bool test_bitvec_init_edge_cases(void) {
        WriteFmt("Testing BitVecInit edge cases\n");
    
        // Test multiple initializations
    
        // Test multiple initializations
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVec bv3 = BitVecInit();
        // Test multiple initializations
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVec bv3 = BitVecInit();
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVec bv3 = BitVecInit();
    
        bool result = (bv1.length == 0) && (bv2.length == 0) && (bv3.length == 0);
        WriteFmt("Testing BitVecReserve edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecReu64 edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecClear edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        // Test multiple init/deinit cycles
        for (int cycle = 0; cycle < 100; cycle++) {
            BitVec bv = BitVecInit();
    
            // Add some data
        // failure rather than aborting. The Must variant aborts, so use it here
        // to validate the deadend abort path.
        BitVec bv = BitVecInit();
    
        BitVecMustReserve(&bv, SIZE_MAX);
        // failure rather than aborting. The Must variant aborts, so use it here
        // to validate the deadend abort path.
        BitVec bv = BitVecInit();
    
        BitVecMustResize(&bv, SIZE_MAX);
        WriteFmt("Testing BitVec bitwise operations NULL handling\n");
    
        BitVec bv  = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv  = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Test NULL pointer - should abort
        WriteFmt("Testing BitVec AND with NULL result handling\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv1, true);
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecPush(&bv2, false);
        WriteFmt("Testing BitVec OR with NULL operand handling\n");
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        // Test NULL operand - should abort
        WriteFmt("Testing BitVec XOR with NULL second operand handling\n");
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        // Test NULL second operand - should abort
        WriteFmt("Testing BitVec NOT with NULL handling\n");
    
        BitVec result = BitVecInit();
    
        // Test NULL operand - should abort
        WriteFmt("Testing BitVecAnd\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up first bitvector: 1101
        WriteFmt("Testing BitVecOr\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up first bitvector: 1100
        WriteFmt("Testing BitVecXor\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up first bitvector: 1100
        WriteFmt("Testing BitVecNot\n");
    
        BitVec bv     = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv     = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up bitvector: 1010
        WriteFmt("Testing BitVecShiftLeft\n");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011 (indices 0,1,2,3)
        WriteFmt("Testing BitVecShiftRight\n");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmt("Testing BitVecRotateLeft\n");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmt("Testing BitVecRotateRight\n");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmt("Testing BitVecReverse\n");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmt("Testing BitVec shift edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec rotate edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec bitwise operations edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        // Test operations on empty bitvecs
        BitVec result_bv = BitVecInit();
        BitVecAnd(&result_bv, &bv1, &bv2);
        result = result && (result_bv.length == 0);
        WriteFmt("Testing BitVecReverse edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec comprehensive bitwise operations\n");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        WriteFmt("Testing BitVec comprehensive shift operations\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec comprehensive rotate operations\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec bitwise identity operations\n");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        WriteFmt("Testing BitVec bitwise commutative properties\n");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
        BitVec result2     = BitVecInit();
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
        BitVec result2     = BitVecInit();
        bool   test_result = true;
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
        BitVec result2     = BitVecInit();
        bool   test_result = true;
        WriteFmt("Testing BitVec bitwise operations with large patterns\n");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
    
        // Create a bitvector
        BitVec bitvec = BitVecInit();
    
        // Check initial state
    
        // Create a valid bitvector
        BitVec bitvec = BitVecInit();
    
        // This should not abort
        WriteFmt("Testing BitVecRunLengths with NULL runs array\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        bool values[5];
        WriteFmt("Testing BitVecRunLengths with NULL values array\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        u64 runs[5];
        WriteFmt("Testing BitVecRunLengths with zero max_runs\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        u64  runs[5];
    
        // Test foreach with invalid bitvec (length > 0 but data is NULL)
        BitVec bv   = BitVecInit();
        bv.length   = 5;
        bv.capacity = 10;
        WriteFmt("Testing BitVecShrinkToFit\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits
        WriteFmt("Testing BitVecReserve\n");
    
        BitVec bv = BitVecInit();
    
        // Add some bits
        WriteFmt("Testing BitVecSwap\n");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Set up first bitvector
        WriteFmt("Testing BitVecClone\n");
    
        BitVec original = BitVecInit();
    
        // Set up original bitvector
        alloc.flags = 0x3C3Cu;
    
        BitVec original = BitVecInit(alloc);
        original.allocator.state = (void *)&original;
        WriteFmt("Testing BitVecShrinkToFit edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecReserve edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecSwap edge cases\n");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecClone edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        // Test multiple clone/swap/reu64 cycles
        for (int cycle = 0; cycle < 10; cycle++) {
            BitVec bv1 = BitVecInit();
            BitVec bv2 = BitVecInit();
        for (int cycle = 0; cycle < 10; cycle++) {
            BitVec bv1 = BitVecInit();
            BitVec bv2 = BitVecInit();
    
            // Add random-sized data
        WriteFmt("Testing BitVec swap NULL handling\n");
    
        BitVec bv = BitVecInit();
    
        // Test NULL pointer - should abort
        WriteFmt("Testing BitVecToStr\n");
    
        BitVec bv = BitVecInit();
    
        // Create pattern: 1011
        WriteFmt("Testing BitVecToBytes\n");
    
        BitVec bv = BitVecInit();
    
        // Create pattern: 10110011 (0xB3)
        WriteFmt("Testing BitVecToInteger\n");
    
        BitVec bv = BitVecInit();
    
        // Create pattern: 1011 (decimal 11 if MSB first, 13 if LSB first)
    
        // Test with larger pattern
        BitVec bv2 = BitVecInit();
        for (int i = 0; i < 8; i++) {
            BitVecPush(&bv2, (i % 2 == 0)); // Alternating pattern
        WriteFmt("Testing BitVec convert edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec bytes conversion edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec integer conversion edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
    
        // Test oversized bitvec to integer (should handle gracefully)
        BitVec oversized = BitVecInit();
        for (int i = 0; i < 100; i++) { // 100 bits > 64 bit limit
            BitVecPush(&oversized, i % 2 == 0);
    
        // Test zero-length conversions
        BitVec empty = BitVecInit();
    
        Str empty_str = BitVecToStr(&empty);
    
        // Test with very large bitvectors
        BitVec large_bv = BitVecInit();
    
        // Create a 1000-bit pattern
        WriteFmt("Testing BitVec bytes bounds failures\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        WriteFmtLn("Testing BitVecAnd");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up first bitvector: 1101
        WriteFmtLn("Testing BitVecOr");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up first bitvector: 1100
        WriteFmtLn("Testing BitVecXor");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up first bitvector: 1100
        WriteFmtLn("Testing BitVecNot");
    
        BitVec bv     = BitVecInit();
        BitVec result = BitVecInit();
    
        BitVec bv     = BitVecInit();
        BitVec result = BitVecInit();
    
        // Set up bitvector: 1010
        WriteFmtLn("Testing BitVecShiftLeft");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011 (indices 0,1,2,3)
        WriteFmtLn("Testing BitVecShiftRight");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmtLn("Testing BitVecRotateLeft");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmtLn("Testing BitVecRotateRight");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmtLn("Testing BitVecReverse");
    
        BitVec bv = BitVecInit();
    
        // Set up bitvector: 1011
        WriteFmtLn("Testing BitVec shift edge cases");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmtLn("Testing BitVec rotate edge cases");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmtLn("Testing BitVec bitwise operations edge cases");
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        BitVec bv1    = BitVecInit();
        BitVec bv2    = BitVecInit();
        bool   result = true;
    
        // Test operations on empty bitvecs
        BitVec result_bv = BitVecInit();
        BitVecAnd(&result_bv, &bv1, &bv2);
        result = result && (result_bv.length == 0);
        WriteFmtLn("Testing BitVecReverse edge cases");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmtLn("Testing BitVec comprehensive bitwise operations");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        WriteFmtLn("Testing BitVec comprehensive shift operations");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmtLn("Testing BitVec comprehensive rotate operations");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmtLn("Testing BitVec bitwise identity operations");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        WriteFmtLn("Testing BitVec bitwise commutative properties");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
        BitVec result2     = BitVecInit();
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
        BitVec result2     = BitVecInit();
        bool   test_result = true;
        BitVec bv2         = BitVecInit();
        BitVec result1     = BitVecInit();
        BitVec result2     = BitVecInit();
        bool   test_result = true;
        WriteFmtLn("Testing BitVec bitwise operations with large patterns");
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
    
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        BitVec bv1         = BitVecInit();
        BitVec bv2         = BitVecInit();
        BitVec result      = BitVecInit();
        bool   test_result = true;
        WriteFmtLn("Testing BitVec bitwise operations NULL handling");
    
        BitVec bv  = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        BitVec bv  = BitVecInit();
        BitVec bv2 = BitVecInit();
    
        // Test NULL pointer - should abort
        WriteFmtLn("Testing BitVec AND with NULL result handling");
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv1, true);
    
        BitVec bv1 = BitVecInit();
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecPush(&bv2, false);
        WriteFmtLn("Testing BitVec OR with NULL operand handling");
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        // Test NULL operand - should abort
        WriteFmtLn("Testing BitVec XOR with NULL second operand handling");
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        BitVec result = BitVecInit();
        BitVec bv1    = BitVecInit();
    
        // Test NULL second operand - should abort
        WriteFmtLn("Testing BitVec NOT with NULL handling");
    
        BitVec result = BitVecInit();
    
        // Test NULL operand - should abort
        WriteFmt("Testing BitVecPush\n");
    
        BitVec bv = BitVecInit();
    
        // Push some bits
        WriteFmt("Testing BitVecInsert (single bit)\n");
    
        BitVec bv = BitVecInit();
    
        // Insert at index 0 (empty bitvector)
        WriteFmt("Testing BitVecInsertRange\n");
    
        BitVec bv = BitVecInit();
    
        // Create target bitvector
        WriteFmt("Testing BitVecInsertMultiple\n");
    
        BitVec bv     = BitVecInit();
        BitVec source = BitVecInit();
    
        BitVec bv     = BitVecInit();
        BitVec source = BitVecInit();
    
        // Start with some bits
        WriteFmt("Testing BitVecInsertPattern\n");
    
        BitVec bv = BitVecInit();
    
        // Start with some bits
    
        // Test with different pattern - 0x05 (0101 in binary) using only 3 bits
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        WriteFmt("Testing BitVecInsertRange edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecInsertMultiple edge cases\n");
    
        BitVec bv     = BitVecInit();
        BitVec empty  = BitVecInit();
        BitVec source = BitVecInit();
    
        BitVec bv     = BitVecInit();
        BitVec empty  = BitVecInit();
        BitVec source = BitVecInit();
        bool   result = true;
        BitVec bv     = BitVecInit();
        BitVec empty  = BitVecInit();
        BitVec source = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecInsertPattern edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec insert invalid range handling\n");
    
        BitVec bv = BitVecInit();
    
        // Test inserting beyond capacity limit - should abort
        WriteFmt("Testing BitVecGet\n");
    
        BitVec bv = BitVecInit();
    
        // Add a pattern: 1010
        WriteFmt("Testing BitVecSet\n");
    
        BitVec bv = BitVecInit();
    
        // Initialize with some bits
        WriteFmt("Testing BitVecFlip\n");
    
        BitVec bv = BitVecInit();
    
        // Initialize with pattern: 101
        WriteFmt("Testing BitVec length and capacity operations\n");
    
        BitVec bv = BitVecInit();
    
        // Initially should be empty
        WriteFmt("Testing BitVec count operations\n");
    
        BitVec bv = BitVecInit();
    
        // Create pattern: 1101000
        WriteFmt("Testing BitVecGet edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecSet edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecFlip edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec count edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec multiple access operations\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec large pattern access\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec macro functions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec access stress test\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec comprehensive bit patterns\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec get bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test get from empty bitvec - should abort
        WriteFmt("Testing BitVec set bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test set on empty bitvec - should abort
        WriteFmt("Testing BitVec flip bounds checking\n");
    
        BitVec bv = BitVecInit();
    
        // Test flip on empty bitvec - should abort
        WriteFmt("Testing BitVec get with large out-of-bounds index\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        BitVecPush(&bv, false);
        WriteFmt("Testing BitVec set with large out-of-bounds index\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        BitVecPush(&bv, false);
        WriteFmt("Testing BitVec flip with edge case out-of-bounds index\n");
    
        BitVec bv = BitVecInit();
        for (int i = 0; i < 10; i++) {
            BitVecPush(&bv, i % 2 == 0);
        WriteFmt("Testing BitVec get with maximum index value\n");
    
        BitVec bv = BitVecInit();
        BitVecPush(&bv, true);
        WriteFmt("Testing BitVecFind and BitVecFindLast functions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecAll, BitVecAny, BitVecNone functions\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecLongestRun function\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecFind edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVec predicate edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecLongestRun edge cases\n");
    
        BitVec bv     = BitVecInit();
        bool   result = true;
        WriteFmt("Testing basic BitVec pattern functions\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindPattern function\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindLastPattern function\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindAllPattern function\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVec pattern edge cases\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVec pattern stress tests\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindPattern(NULL, pattern) - should fatal\n");
    
        BitVec pattern = BitVecInit();
        BitVecPush(&pattern, true);
        WriteFmt("Testing BitVecFindPattern(source, NULL) - should fatal\n");
    
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecPush(&source, false);
        WriteFmt("Testing BitVecFindLastPattern(NULL, pattern) - should fatal\n");
    
        BitVec pattern = BitVecInit();
        BitVecPush(&pattern, true);
        WriteFmt("Testing BitVecFindLastPattern(source, NULL) - should fatal\n");
    
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecPush(&source, false);
        WriteFmt("Testing BitVecFindAllPattern(source, NULL, results, 10) - should fatal\n");
    
        BitVec source = BitVecInit();
        size   results[10];
        BitVecPush(&source, true);
        WriteFmt("Testing BitVecFindAllPattern(source, pattern, NULL, 10) - should fatal\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        BitVecPush(&source, true);
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        BitVecPush(&source, true);
        BitVecPush(&source, false);
        WriteFmt("Testing BitVecFindAllPattern(source, pattern, results, 0) - should fatal\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        size   results[10];
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        size   results[10];
        BitVecPush(&source, true);
        WriteFmt("Testing BitVecStartsWith basic functionality\n");
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecStartsWith edge cases\n");
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEndsWith basic functionality\n");
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEndsWith edge cases\n");
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecContains basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecContainsAt basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecContainsAt edge cases\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecCountPattern basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecRFindPattern basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecReplace basic functionality\n");
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        WriteFmt("Testing BitVecReplaceAll basic functionality\n");
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        WriteFmt("Testing BitVecMatches basic functionality\n");
    
        BitVec source   = BitVecInit();
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
    
        BitVec source   = BitVecInit();
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        bool   result   = true;
        BitVec source   = BitVecInit();
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        bool   result   = true;
        WriteFmt("Testing BitVecFuzzyMatch basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecRegexMatch basic functionality\n");
    
        BitVec source = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecPrefixMatch basic functionality\n");
    
        BitVec source = BitVecInit();
        BitVec patterns[3];
        bool   result = true;
        // Initialize patterns
        for (int i = 0; i < 3; i++) {
            patterns[i] = BitVecInit();
        }
        WriteFmt("Testing BitVecSuffixMatch basic functionality\n");
    
        BitVec source = BitVecInit();
        BitVec patterns[3];
        bool   result = true;
        // Initialize patterns
        for (int i = 0; i < 3; i++) {
            patterns[i] = BitVecInit();
        }
    bool test_bitvec_starts_with_null_source(void) {
        WriteFmt("Testing BitVecStartsWith(NULL, prefix) - should fatal\n");
        BitVec prefix = BitVecInit();
        BitVecPush(&prefix, true);
        BitVecStartsWith(NULL, &prefix);
    bool test_bitvec_starts_with_null_prefix(void) {
        WriteFmt("Testing BitVecStartsWith(source, NULL) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecStartsWith(&source, NULL);
    bool test_bitvec_ends_with_null_source(void) {
        WriteFmt("Testing BitVecEndsWith(NULL, suffix) - should fatal\n");
        BitVec suffix = BitVecInit();
        BitVecPush(&suffix, true);
        BitVecEndsWith(NULL, &suffix);
    bool test_bitvec_ends_with_null_suffix(void) {
        WriteFmt("Testing BitVecEndsWith(source, NULL) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecEndsWith(&source, NULL);
    bool test_bitvec_contains_at_null_source(void) {
        WriteFmt("Testing BitVecContainsAt(NULL, pattern, 0) - should fatal\n");
        BitVec pattern = BitVecInit();
        BitVecPush(&pattern, true);
        BitVecContainsAt(NULL, &pattern, 0);
    bool test_bitvec_contains_at_null_pattern(void) {
        WriteFmt("Testing BitVecContainsAt(source, NULL, 0) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecContainsAt(&source, NULL, 0);
    bool test_bitvec_matches_null_source(void) {
        WriteFmt("Testing BitVecMatches(NULL, pattern, wildcard) - should fatal\n");
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        BitVecPush(&pattern, true);
        WriteFmt("Testing BitVecMatches(NULL, pattern, wildcard) - should fatal\n");
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        BitVecPush(&pattern, true);
        BitVecPush(&wildcard, false);
    bool test_bitvec_regex_match_null_pattern(void) {
        WriteFmt("Testing BitVecRegexMatch(source, NULL) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecRegexMatch(&source, NULL);
    bool test_bitvec_prefix_match_null_source(void) {
        WriteFmt("Testing BitVecPrefixMatch(NULL, patterns, 1) - should fatal\n");
        BitVec patterns[1] = {BitVecInit()};
        BitVecPush(&patterns[0], true);
        BitVecPrefixMatch(NULL, patterns, 1);
    bool test_bitvec_prefix_match_null_patterns(void) {
        WriteFmt("Testing BitVecPrefixMatch(source, NULL, 1) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecPrefixMatch(&source, NULL, 1);
    bool test_bitvec_suffix_match_null_source(void) {
        WriteFmt("Testing BitVecSuffixMatch(NULL, patterns, 1) - should fatal\n");
        BitVec patterns[1] = {BitVecInit()};
        BitVecPush(&patterns[0], true);
        BitVecSuffixMatch(NULL, patterns, 1);
    bool test_bitvec_suffix_match_null_patterns(void) {
        WriteFmt("Testing BitVecSuffixMatch(source, NULL, 1) - should fatal\n");
        BitVec source = BitVecInit();
        BitVecPush(&source, true);
        BitVecSuffixMatch(&source, NULL, 1);
        WriteFmt("Testing basic BitVec pattern functions\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindPattern function\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindLastPattern function\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecFindAllPattern function\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVec pattern edge cases\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVec pattern stress tests\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecStartsWith basic functionality\n");
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecStartsWith edge cases\n");
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec prefix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEndsWith basic functionality\n");
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecEndsWith edge cases\n");
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
    
        BitVec source = BitVecInit();
        BitVec suffix = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecFindPattern basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecContainsAt basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecContainsAt edge cases\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecCountPattern basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecRFindPattern basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecReplace basic functionality\n");
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        WriteFmt("Testing BitVecReplaceAll basic functionality\n");
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
    
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        BitVec source      = BitVecInit();
        BitVec old_pattern = BitVecInit();
        BitVec new_pattern = BitVecInit();
        bool   result      = true;
        WriteFmt("Testing BitVecMatches basic functionality\n");
    
        BitVec source   = BitVecInit();
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
    
        BitVec source   = BitVecInit();
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        bool   result   = true;
        BitVec source   = BitVecInit();
        BitVec pattern  = BitVecInit();
        BitVec wildcard = BitVecInit();
        bool   result   = true;
        WriteFmt("Testing BitVecFuzzyMatch basic functionality\n");
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
    
        BitVec source  = BitVecInit();
        BitVec pattern = BitVecInit();
        bool   result  = true;
        WriteFmt("Testing BitVecRegexMatch basic functionality\n");
    
        BitVec source = BitVecInit();
        bool   result = true;
        WriteFmt("Testing BitVecPrefixMatch basic functionality\n");
    
        BitVec  source   = BitVecInit();
        BitVecs patterns = VecInitWithDeepCopy(NULL, BitVecDeinit);
        bool    result   = true;
        BitVec *p2 = VecPtrAt(&patterns, 2);
    
        *p0 = BitVecInit();
        *p1 = BitVecInit();
        *p2 = BitVecInit();
    
        *p0 = BitVecInit();
        *p1 = BitVecInit();
        *p2 = BitVecInit();
        *p0 = BitVecInit();
        *p1 = BitVecInit();
        *p2 = BitVecInit();
    
        // Pattern 0: 111 (should not match)
        WriteFmt("Testing BitVecSuffixMatch basic functionality\n");
    
        BitVec  source   = BitVecInit();
        BitVecs patterns = VecInitWithDeepCopy(NULL, BitVecDeinit);
        bool    result   = true;
        BitVec *p2 = VecPtrAt(&patterns, 2);
    
        *p0 = BitVecInit();
        *p1 = BitVecInit();
        *p2 = BitVecInit();
    
        *p0 = BitVecInit();
        *p1 = BitVecInit();
        *p2 = BitVecInit();
        *p0 = BitVecInit();
        *p1 = BitVecInit();
        *p2 = BitVecInit();
    
        // Pattern 0: 111 (should not match)
            })
    #else
    #    define BitVecInit(...) CONCAT(BitVecInit_, BITVEC_INIT_HAS_ARGS(__VA_ARGS__))(__VA_ARGS__)
    #    define BitVecInit_0()                                                                                             \
            ((BitVec) {.length    = 0,                                                                                     \
        Int value;
    
        value.bits = BitVecInit(alloc);
        return value;
    }
Last updated on