use std::path::{Path, PathBuf};
use vareffect::{FastaReader, VarEffectError};
fn open_reader() -> FastaReader {
let path = std::env::var("FASTA_PATH").expect(
"FASTA_PATH env var must point to a GRCh38 genome binary (.bin) \
with its .bin.idx sidecar. Run `vareffect-cli setup` first, then \
set FASTA_PATH=data/vareffect/GRCh38.bin.",
);
let path_buf = PathBuf::from(path);
FastaReader::open(Path::new(&path_buf)).expect("opening the reference genome binary")
}
#[test]
#[ignore]
fn fetch_tp53_codon_248_first_base() {
let reader = open_reader();
let base = reader.fetch_base("chr17", 7674220).unwrap();
assert_eq!(
base, b'G',
"expected plus-strand reference base G at chr17:7674220 (TP53 c.742C>T)",
);
}
#[test]
#[ignore]
fn fetch_brca2_sequence() {
let reader = open_reader();
let seq = reader
.fetch_sequence("chr13", 32_340_300, 32_340_310)
.unwrap();
assert_eq!(seq.len(), 10, "expected 10 bp window");
assert!(
seq.iter()
.all(|&b| matches!(b, b'A' | b'C' | b'G' | b'T' | b'N')),
"expected only IUPAC DNA bases, got {:?}",
String::from_utf8_lossy(&seq),
);
}
#[test]
#[ignore]
fn verify_ref_allele() {
let reader = open_reader();
assert!(reader.verify_ref("chr17", 7674220, b"G").unwrap());
assert!(!reader.verify_ref("chr17", 7674220, b"T").unwrap());
assert!(reader.verify_ref("chr17", 7674220, b"g").unwrap());
}
#[test]
#[ignore]
fn chrom_length_chr1() {
let reader = open_reader();
assert_eq!(reader.chrom_length("chr1"), Some(248_956_422));
}
#[test]
#[ignore]
fn chrom_length_chrm() {
let reader = open_reader();
assert_eq!(reader.chrom_length("chrM"), Some(16_569));
}
#[test]
#[ignore]
fn unknown_chrom_returns_error() {
let reader = open_reader();
let err = reader.fetch_base("chrZZ", 0).unwrap_err();
assert!(
matches!(err, VarEffectError::ChromNotFound { .. }),
"expected ChromNotFound, got {err:?}",
);
}