use seqair_types::SmallVec;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Genotype {
pub alleles: SmallVec<Option<u16>, 2>,
pub phased: SmallVec<bool, 2>,
}
impl Genotype {
pub fn unphased(allele0: u16, allele1: u16) -> Self {
use seqair_types::smallvec::smallvec;
Self { alleles: smallvec![Some(allele0), Some(allele1)], phased: smallvec![false] }
}
pub fn phased_diploid(allele0: u16, allele1: u16) -> Self {
use seqair_types::smallvec::smallvec;
Self { alleles: smallvec![Some(allele0), Some(allele1)], phased: smallvec![true] }
}
pub fn haploid(allele: u16) -> Self {
use seqair_types::smallvec::smallvec;
Self { alleles: smallvec![Some(allele)], phased: smallvec![] }
}
pub fn missing_diploid() -> Self {
use seqair_types::smallvec::smallvec;
Self { alleles: smallvec![None, None], phased: smallvec![false] }
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn genotype_construction() {
let gt = Genotype::unphased(0, 1);
assert_eq!(>.alleles, &[Some(0), Some(1)]);
assert_eq!(>.phased, &[false]);
let gt_phased = Genotype::phased_diploid(0, 1);
assert_eq!(>_phased.phased, &[true]);
let gt_haploid = Genotype::haploid(0);
assert_eq!(gt_haploid.alleles.len(), 1);
assert!(gt_haploid.phased.is_empty());
let gt_missing = Genotype::missing_diploid();
assert_eq!(>_missing.alleles, &[None, None]);
}
}