Skip to content
BitVecBestAlignment

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);

Returns

Best alignment offset, or SIZE_MAX if no good alignment

Usage example (Cross-references)

Usage examples (Cross-references)
    }
    
    u64 BitVecBestAlignment(BitVec *bv1, BitVec *bv2) {
        ValidateBitVec(bv1);
        ValidateBitVec(bv2);
    // Test BitVecBestAlignment basic functionality
    bool test_bitvec_best_alignment_basic(void) {
        WriteFmt("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) {
        WriteFmt("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) {
        WriteFmt("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) {
        WriteFmt("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;
Last updated on