Skip to content
BitVecEditDistance

BitVecEditDistance

BitVecEditDistance

Description

Calculate edit distance between two bitvectors. Edit distance is minimum number of single-bit operations to transform one into the other.

Parameters

Name Direction Description
bv1 in First bitvector
bv2 in Second bitvector

Usage example (from documentation)

  u64 distance = BitVecEditDistance(&bv1, &bv2);

Returns

Minimum edit distance

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    u64 BitVecEditDistance(BitVec *bv1, BitVec *bv2) {
        ValidateBitVec(bv1);
        ValidateBitVec(bv2);
    // Test BitVecEditDistance basic functionality
    bool test_bitvec_edit_distance_basic(void) {
        WriteFmt("Testing BitVecEditDistance basic functionality\n");
    
        BitVec bv1    = BitVecInit();
        BitVecPush(&bv2, true);
    
        u64 distance = BitVecEditDistance(&bv1, &bv2);
        result       = result && (distance == 0);
        BitVecPush(&bv2, true);
    
        distance = BitVecEditDistance(&bv1, &bv2);
        result   = result && (distance == 1);
        BitVecPush(&bv2, false); // Extra bit
    
        distance = BitVecEditDistance(&bv1, &bv2);
        result   = result && (distance == 1);
    // Test BitVecEditDistance edge cases
    bool test_bitvec_edit_distance_edge_cases(void) {
        WriteFmt("Testing BitVecEditDistance edge cases\n");
    
        BitVec bv1    = BitVecInit();
    
        // Test empty to empty
        u64 distance = BitVecEditDistance(&bv1, &bv2);
        result       = result && (distance == 0);
        BitVecPush(&bv2, false);
    
        distance = BitVecEditDistance(&bv1, &bv2);
        result   = result && (distance == 2);
    
        // Test non-empty to empty
        distance = BitVecEditDistance(&bv2, &bv1);
        result   = result && (distance == 2);
            BitVecPush(&small2, i % 3 == 0);
        }
        u64 edit_dist = BitVecEditDistance(&small1, &small2);
    
        result = result && (hamming < 1000);
    
    bool test_bitvec_edit_distance_null_bv1(void) {
        WriteFmt("Testing BitVecEditDistance(NULL, bv2) - should fatal\n");
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVec bv2 = BitVecInit();
        BitVecPush(&bv2, true);
        BitVecEditDistance(NULL, &bv2);
        BitVecDeinit(&bv2);
        return true;
    
    bool test_bitvec_edit_distance_null_bv2(void) {
        WriteFmt("Testing BitVecEditDistance(bv1, NULL) - should fatal\n");
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVec bv1 = BitVecInit();
        BitVecPush(&bv1, true);
        BitVecEditDistance(&bv1, NULL);
        BitVecDeinit(&bv1);
        return true;
Last updated on