BitVecEditDistance

Table of Contents

BitVecEditDistance

Description

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

Parameters

NameDirectionDescription
bv1inFirst bitvector
bv2inSecond bitvector

Usage example (from documentation)

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

Usage example (Cross-references)

    }
    
    u64 BitVecEditDistance(BitVec *bv1, BitVec *bv2) {
    ValidateBitVec(bv1);
    ValidateBitVec(bv2);
    // Test BitVecEditDistance basic functionality
    bool test_bitvec_edit_distance_basic(void) {
    printf("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) {
    printf("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) {
    printf("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) {
    printf("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;

Share :

Related Posts

BitVecJaccardSimilarity

BitVecJaccardSimilarity Description Calculate Jaccard similarity between two bitvectors. Jaccard similarity = |intersection| / |union|

Read More

BitVecRemoveAll

BitVecRemoveAll Description Remove all occurrences of a specific bit value. Returns the number of bits that were removed.

Read More

BitVecRemoveRange

BitVecRemoveRange Description Remove multiple consecutive bits starting at a specific position. All bits after the removed range are shifted left.

Read More