BitVecBestAlignment
- Function
- August 22, 2025
Table of Contents
BitVecBestAlignment
BitVecBestAlignment
Description
Find best overlapping alignment between two bitvectors. Returns the offset that gives the best alignment score.
Parameters
Name | Direction | Description |
---|---|---|
bv1 | in | First bitvector (reference) |
bv2 | in | Second bitvector (query) |
Usage example (from documentation)
u64 offset = BitVecBestAlignment(&reference, &query);
Usage example (Cross-references)
- In
BitVec.c:1363
:
}
u64 BitVecBestAlignment(BitVec *bv1, BitVec *bv2) {
ValidateBitVec(bv1);
ValidateBitVec(bv2);
// Test BitVecBestAlignment basic functionality
bool test_bitvec_best_alignment_basic(void) {
printf("Testing BitVecBestAlignment basic functionality\n");
BitVec bv1 = BitVecInit();
BitVecPush(&bv2, false);
u64 best_pos = BitVecBestAlignment(&bv1, &bv2);
result = result && (best_pos == 0 || best_pos == 4);
// Test BitVecBestAlignment edge cases
bool test_bitvec_best_alignment_edge_cases(void) {
printf("Testing BitVecBestAlignment edge cases\n");
BitVec bv1 = BitVecInit();
// Test empty bitvectors
u64 best_pos = BitVecBestAlignment(&bv1, &bv2);
result = result && (best_pos == 0);
BitVecPush(&bv2, false);
best_pos = BitVecBestAlignment(&bv1, &bv2);
result = result && (best_pos == 0);
double entropy1 = BitVecEntropy(&bv1);
int align_score = BitVecAlignmentScore(&bv1, &bv2, 1, -1);
u64 best_align = BitVecBestAlignment(&bv1, &bv2);
// Test edit distance with smaller vectors (expensive operation)
bool test_bitvec_best_alignment_null_bv1(void) {
printf("Testing BitVecBestAlignment(NULL, bv2) - should fatal\n");
BitVec bv2 = BitVecInit();
BitVecPush(&bv2, true);
BitVec bv2 = BitVecInit();
BitVecPush(&bv2, true);
BitVecBestAlignment(NULL, &bv2);
BitVecDeinit(&bv2);
return true;
bool test_bitvec_best_alignment_null_bv2(void) {
printf("Testing BitVecBestAlignment(bv1, NULL) - should fatal\n");
BitVec bv1 = BitVecInit();
BitVecPush(&bv1, true);
BitVec bv1 = BitVecInit();
BitVecPush(&bv1, true);
BitVecBestAlignment(&bv1, NULL);
BitVecDeinit(&bv1);
return true;