Documentation
pub static COMPLEMENT_TABLE: [u8; 256] = {
    let mut table = [0u8; 256];
    table[b'A' as usize] = b'T';
    table[b'T' as usize] = b'A';
    table[b'C' as usize] = b'G';
    table[b'G' as usize] = b'C';
    table
};

pub fn reverse_complement(dna: &str) -> String {
    let mut result = dna.as_bytes().to_vec();
    let len = result.len();

    for (i, &base) in dna.as_bytes().iter().enumerate() {
        let complement = COMPLEMENT_TABLE[base as usize];
        result[len - i - 1] = complement;
    }

    unsafe { String::from_utf8_unchecked(result) }
}

#[cfg(test)]
mod test {
    use crate::dna::reverse_complement;

    #[test]
    fn test_reverse_complement() {
        let dna_sequence = "ATCGTAGC";
        let res = reverse_complement(dna_sequence);
        assert_eq!(res, "GCTACGAT");
    }
}