#[cfg(test)]
mod tests {
use rand::{thread_rng, Rng};
use std::fs::remove_file;
use rustynetics::granges::GRanges;
use rustynetics::meta::{Meta, MetaData};
use rustynetics::range::Range;
#[test]
fn test_meta() {
let mut rng = thread_rng();
let n = 20;
let names = vec!["name", "score", "float", "range", "matrix"];
let data = vec![
MetaData::StringArray((0..n).map(|i: i32| format!("Entry_{}", i)).collect()),
MetaData::IntArray((0..n).map(|_| rng.gen_range(-100..100)).collect()),
MetaData::FloatArray((0..n).map(|_| rng.gen_range(-100.0..100.0)).collect()),
MetaData::RangeArray(
(0..n)
.map(|_| rng.gen_range(0..10000))
.map(|x| Range::new(x, x + 500))
.collect(),
),
MetaData::FloatMatrix(
(0..n)
.map(|_| (0..5).map(|_| rng.gen_range(0.0..1000.0)).collect())
.collect(),
),
];
let mut granges1 = GRanges::default();
assert!(granges1.import_bed("tests/test_meta.bed", 3, false).is_ok());
granges1.meta = Meta::new(names, data).unwrap();
let granges2 = granges1.clone();
assert!(granges1 == granges2);
match granges1.meta.get_column_str_mut("name") {
Some(v) => v[1] = String::from("Test"),
_ => (),
};
assert!(granges1 != granges2);
}
#[test]
fn test_meta_bed6() {
let mut granges1 = GRanges::default();
let mut granges2 = GRanges::default();
assert!(granges1.import_bed("tests/test_meta.bed", 6, false).is_ok());
assert!(granges1
.export_bed6("tests/test_meta.bed.tmp", false)
.is_ok());
assert!(granges2
.import_bed6("tests/test_meta.bed.tmp", false)
.is_ok());
assert!(granges1 == granges2);
assert!(remove_file("tests/test_meta.bed.tmp").is_ok());
}
}