use nafcodec::Decoder; use nafcodec::DecoderBuilder; use nafcodec::SequenceType; const GENOME: &[u8] = include_bytes!("../../../data/NZ_AAEN01000029.naf"); const MASKED: &[u8] = include_bytes!("../../../data/masked.naf"); #[test] fn decode() { let c = std::io::Cursor::new(GENOME); let mut decoder = Decoder::new(c).unwrap(); assert_eq!(decoder.header().name_separator(), ' '); assert_eq!(decoder.header().number_of_sequences(), 30); assert_eq!(decoder.header().line_length(), 80); assert_eq!(decoder.header().sequence_type(), SequenceType::Dna); let r1 = decoder.next().unwrap().unwrap(); assert_eq!(r1.id.unwrap(), "NZ_AAEN01000029.1"); assert_eq!(r1.comment.unwrap(), "Bacillus anthracis str. CNEVA-9066 map unlocalized plasmid pXO1 cont2250, whole genome shotgun sequence"); let seq = r1.sequence.unwrap(); assert_eq!(seq.len(), 182777); assert_eq!(seq.chars().filter(|&x| x == 'A').count(), 62115); assert_eq!(seq.chars().filter(|&x| x == 'C').count(), 28747); assert_eq!(seq.chars().filter(|&x| x == 'G').count(), 30763); assert_eq!(seq.chars().filter(|&x| x == 'T').count(), 61152); let r2 = decoder.next().unwrap().unwrap(); assert_eq!(r2.id.unwrap(), "NZ_AAEN01000030.3"); assert_eq!(r2.comment.unwrap(), "Bacillus anthracis str. CNEVA-9066 map unlocalized plasmid pXO2 cont2251, whole genome shotgun sequence"); let records = decoder.collect::, _>>().unwrap(); assert_eq!(records.len(), 28); } #[test] fn mask() { let c = std::io::Cursor::new(MASKED); let mut decoder = Decoder::new(c).unwrap(); assert_eq!(decoder.header().name_separator(), ' '); assert_eq!(decoder.header().number_of_sequences(), 2); assert_eq!(decoder.header().line_length(), 50); assert_eq!(decoder.header().sequence_type(), SequenceType::Dna); let r1 = decoder.next().unwrap().unwrap(); assert_eq!(r1.id.unwrap(), "test1"); let seq = r1.sequence.unwrap(); assert!(seq[..657].chars().all(|x| x.is_uppercase())); assert!(seq[657..676].chars().all(|x| x.is_lowercase())); assert!(seq[676..1311].chars().all(|x| x.is_uppercase())); assert!(seq[1311..1350].chars().all(|x| x.is_lowercase())); let r2 = decoder.next().unwrap().unwrap(); assert_eq!(r2.id.unwrap(), "test2"); let seq = r2.sequence.unwrap(); assert!(seq[..525].chars().all(|x| x.is_uppercase())); assert!(seq[525..621].chars().all(|x| x.is_lowercase())); assert!(seq[621..720].chars().all(|x| x.is_uppercase())); assert!(seq[720..733].chars().all(|x| x.is_lowercase())); assert!(decoder.next().is_none()); } #[test] fn force_nomask() { let mut decoder = DecoderBuilder::new() .mask(false) .with_bytes(MASKED) .unwrap(); assert_eq!(decoder.header().name_separator(), ' '); assert_eq!(decoder.header().number_of_sequences(), 2); assert_eq!(decoder.header().line_length(), 50); assert_eq!(decoder.header().sequence_type(), SequenceType::Dna); let r1 = decoder.next().unwrap().unwrap(); assert_eq!(r1.id.unwrap(), "test1"); let seq = r1.sequence.unwrap(); assert!(seq[..].chars().all(|x| x.is_uppercase())); let r2 = decoder.next().unwrap().unwrap(); assert_eq!(r2.id.unwrap(), "test2"); let seq = r2.sequence.unwrap(); assert!(seq[..].chars().all(|x| x.is_uppercase())); assert!(decoder.next().is_none()); }