mod helpers;
use helpers::*;
const REF: &str = "CACACACACACACACACACA";
fn ot_r1() -> u16 {
FLAG_PAIRED | FLAG_PROPER_PAIR | FLAG_FIRST_SEGMENT | FLAG_MATE_REVERSE
}
fn ot_r2() -> u16 {
FLAG_PAIRED | FLAG_PROPER_PAIR | FLAG_LAST_SEGMENT | FLAG_REVERSE
}
#[test]
fn aggregates_r1_r2_and_supplementary_then_tags_all() {
let env = TestEnv::new();
let reference = RefBuilder::new().contig("chr1", REF);
let sam = SamBuilder::new()
.sq("chr1", REF.len())
.record("t", ot_r1(), "chr1", 1, "10M", "CATATATATA", &q40(10)) .record("t", ot_r2(), "chr1", 11, "10M", "CACATATATA", &q40(10)) .record(
"t",
FLAG_PAIRED | FLAG_FIRST_SEGMENT | FLAG_SUPPLEMENTARY,
"chr1",
1,
"10M",
"TATATATATA",
&q40(10),
);
let recs = run_ok(&sam, &reference, &env, &[]);
assert_eq!(recs.len(), 3);
for rec in &recs {
assert!(has_tag(rec, [b'X', b'X']), "tag must propagate to every record");
}
}
#[test]
fn secondary_alignments_do_not_contribute_evidence() {
let env = TestEnv::new();
let reference = RefBuilder::new().contig("chr1", REF);
let sam = SamBuilder::new()
.sq("chr1", REF.len())
.record("t", ot_r1(), "chr1", 1, "10M", "CATATATATA", &q40(10)) .record("t", ot_r2(), "chr1", 11, "10M", "CATATATATA", &q40(10)) .record(
"t",
FLAG_PAIRED | FLAG_FIRST_SEGMENT | FLAG_SECONDARY,
"chr1",
1,
"10M",
"CACACACACA",
&q40(10),
);
let recs = run_ok(&sam, &reference, &env, &[]);
assert_eq!(recs.len(), 3);
for rec in &recs {
assert!(!has_tag(rec, [b'X', b'X']), "secondary evidence must not trigger a tag");
}
}