use talus;
use std::f64;
use std::path::PathBuf;
use std::collections::HashMap;
#[test]
fn continental_divide_test() {
let mut d = PathBuf::from(env!("CARGO_MANIFEST_DIR"));
d.push("tests");
d.push("resources");
d.push("grays.txt");
let points = talus::LabeledPoint::points_from_file(d).ok().unwrap();
let mut expected = HashMap::with_capacity(3);
expected.insert(0, f64::INFINITY);
expected.insert(1, 560.);
expected.insert(2, 827.);
let graph = talus::graph::build_knn(&points, 5).unwrap();
let complex = talus::morse::MorseSmaleComplex::from_graph(&graph).unwrap();
let lifetimes = complex.descending_complex.get_persistence();
lifetimes.iter()
.map(|(node, lifetime)| (graph.node_weight(*node).unwrap().id, lifetime))
.filter(|(id, _)| expected.contains_key(id))
.for_each(|(id, lifetime)| {
let expected_lifetime = expected.get(&id).unwrap();
println!("{}, {}, {}", id, lifetime, expected_lifetime);
if lifetime.is_infinite() {
assert!(expected_lifetime.is_infinite());
} else {
assert!((lifetime - expected_lifetime).abs() < 150.);
}
});
}