mod align_type;
mod alignment;
#[cfg(test)]
mod bad_alignments;
mod diagonal_array;
mod mass_alignment;
mod multi_alignment;
mod piece;
mod scoring;
#[cfg(test)]
mod test_alignments;
#[cfg(feature = "imgt")]
mod consecutive;
#[cfg(feature = "imgt")]
pub use consecutive::*;
pub use align_type::{AlignType, Side};
pub use alignment::{Alignment, Score, Stats};
pub use mass_alignment::align;
pub use piece::Piece;
pub use scoring::{AlignScoring, MatchType};
pub mod matrix {
use super::scoring;
pub use scoring::matrices::*;
}
#[cfg(test)]
#[expect(clippy::missing_panics_doc)]
mod tests {
use crate::{peptidoform::SimpleLinear, Peptidoform};
use super::{scoring::AlignScoring, AlignType, Alignment};
fn align<'a, const STEPS: u16>(
a: &'a Peptidoform<SimpleLinear>,
b: &'a Peptidoform<SimpleLinear>,
) -> Alignment<'a, SimpleLinear, SimpleLinear> {
super::align::<STEPS, SimpleLinear, SimpleLinear>(
a,
b,
AlignScoring::default(),
AlignType::GLOBAL,
)
}
fn linear(aa: &str) -> Peptidoform<SimpleLinear> {
Peptidoform::pro_forma(aa, None)
.unwrap()
.into_simple_linear()
.unwrap()
}
#[test]
fn simple_1() {
let a = linear("ANGARS");
let b = linear("AGGQRS");
let c = dbg!(align::<1>(&a, &b));
assert_eq!(c.short(), "1=1X1=1X2=");
assert_eq!(
Alignment::create_from_path(
&a,
&b,
0,
0,
&c.short(),
AlignScoring::default(),
AlignType::GLOBAL,
1
)
.unwrap(),
c
);
}
#[test]
fn simple_4() {
let a = linear("ANGARS");
let b = linear("AGGQRS");
let c = dbg!(align::<4>(&a, &b));
assert_eq!(c.short(), "1=1:2i2:1i2=");
assert_eq!(
Alignment::create_from_path(
&a,
&b,
0,
0,
&c.short(),
AlignScoring::default(),
AlignType::GLOBAL,
4
)
.unwrap(),
c
);
}
#[test]
fn simple_unbounded() {
let a = linear("ANGARS");
let b = linear("AGGQRS");
let c = dbg!(align::<{ u16::MAX }>(&a, &b));
assert_eq!(c.short(), "1=1:2i2:1i2=");
assert_eq!(
Alignment::create_from_path(
&a,
&b,
0,
0,
&c.short(),
AlignScoring::default(),
AlignType::GLOBAL,
u16::MAX
)
.unwrap(),
c
);
}
}