#![allow(dead_code)]
pub(crate) const DNA_IUPAC: &[u8; 32] = b"acgturyswkmbdhvnACGTURYSWKMBDHVN";
pub(crate) const DNA_IUPAC_UC: &[u8; 16] = b"ACGTURYSWKMBDHVN";
pub(crate) const DNA_ACGTN: &[u8; 10] = b"acgtnACGTN";
pub(crate) const DNA_ACGTN_UC: &[u8; 5] = b"ACGTN";
pub(crate) const AA_IUPAC_UC: &[u8; 20] = b"ACDEFGHIKLMNPQRSTVWY";
pub(crate) const AA_IUPAC_UC_X: &[u8; 21] = b"ACDEFGHIKLMNPQRSTVWYX";
#[cfg(test)]
mod test {
use std::collections::HashSet;
use super::*;
const ALPHABETS: [&[u8]; 6] = [DNA_IUPAC, DNA_IUPAC_UC, DNA_ACGTN, DNA_ACGTN_UC, AA_IUPAC_UC, AA_IUPAC_UC_X];
const CAP_PAIRS: [(&[u8], &[u8]); 2] = [(DNA_IUPAC, DNA_IUPAC_UC), (DNA_ACGTN, DNA_ACGTN_UC)];
const SUBSET_PAIRS: [(&[u8], &[u8]); 3] = [
(DNA_ACGTN_UC, DNA_IUPAC_UC),
(DNA_ACGTN, DNA_IUPAC),
(AA_IUPAC_UC, AA_IUPAC_UC_X),
];
#[test]
fn no_duplicates() {
for alphabet in ALPHABETS {
let mut set = HashSet::new();
for c in alphabet {
assert!(set.insert(c));
}
}
}
#[test]
fn caps() {
for (mixed, upper) in CAP_PAIRS {
let mixed_set = mixed.iter().copied().collect::<HashSet<_>>();
for c in upper {
assert!(mixed_set.contains(c));
if c.is_ascii_alphabetic() {
assert!(c.is_ascii_uppercase());
assert!(mixed_set.contains(&c.to_ascii_lowercase()));
}
}
}
}
#[test]
fn subsets() {
for (smaller, larger) in SUBSET_PAIRS {
let larger_set = larger.iter().copied().collect::<HashSet<_>>();
for c in smaller {
assert!(larger_set.contains(c));
}
}
}
}