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)
- In
BitVec.c:1243:
}
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