use rustygraph::*;
fn main() {
println!("Testing which version is correct...");
println!();
let size = 10;
let data: Vec<f64> = (0..size).map(|i| (i as f64 * 0.2).sin()).collect();
println!("Test data (size {}):", size);
for (i, &v) in data.iter().enumerate() {
println!(" {}: {:.4}", i, v);
}
println!();
let series = TimeSeries::from_raw(data.clone()).unwrap();
let graph = VisibilityGraph::from_series(&series)
.natural_visibility()
.unwrap();
let edges = graph.edges();
println!("Found {} edges", edges.len());
println!();
let mut edge_list: Vec<_> = edges.iter().map(|(k, v)| (*k, *v)).collect();
edge_list.sort_by_key(|(k, _)| *k);
println!("Verifying some edges manually:");
println!();
let has_0_2 = edges.contains_key(&(0, 2));
if has_0_2 {
println!("Edge 0->2 exists. Checking if it should...");
println!(" y0={:.4}, y1={:.4}, y2={:.4}", data[0], data[1], data[2]);
let expected_at_1 = data[0] + (data[2] - data[0]) * 0.5;
println!(" Expected height at 1: {:.4}", expected_at_1);
println!(" Actual height at 1: {:.4}", data[1]);
println!(" Is actual < expected? {}", data[1] < expected_at_1);
if data[1] < expected_at_1 {
println!(" ✅ Edge should exist (1 is below line)");
} else {
println!(" ❌ Edge should NOT exist (1 blocks the view)");
}
}
println!();
println!("All edges:");
for ((src, dst), _) in edge_list.iter().take(20) {
println!(" {} -> {}", src, dst);
}
if edge_list.len() > 20 {
println!(" ... and {} more", edge_list.len() - 20);
}
}