spoa_rs 0.1.0

Rust bindings for SPOA (SIMD POA)
Documentation
use spoa_rs::*;

#[test]
fn alignment_tests() {
    let mut graph = Graph::new();
    let mut engine = AlignmentEngine::new_affine(AlignmentType::kNW, 0, -4, -8, -2);

    let seq1 = "AATGGTTGTCACGTCAGT";
    let (score1, aln1) = engine.align(seq1, &graph);
    graph.add_alignment(aln1, seq1);
    eprintln!("Score 1: {}", score1);

    let seq2 = "ATTGTAAAGTCTCGTCGGT";
    let (score2, aln2) = engine.align(seq2, &graph);
    graph.add_alignment(aln2, seq2);
    eprintln!("Score 2: {}", score2);

    let seq3 = "TTGTCAACATCAGTA";
    let (score3, aln3) = engine.align(seq3, &graph);
    graph.add_alignment(aln3, seq3);
    eprintln!("Score 3: {}", score3);

    let truth = vec![
        "AATG-GTTGTC-ACGTCAGT-",
        "ATTGTAAAGTC-TCGTCGGT-",
        "------TTGTCAACATCAGTA",
    ];

    for (i, aln) in graph.generate_msa().into_iter().enumerate() {
        eprintln!("{i:>10} {aln}");
        assert_eq!(&aln, truth[i]);
    }
}