use super::super::tests::TestGraph;
use super::*;

#[test]
fn diamond_post_order() {
    let graph = TestGraph::new(0, &[(0, 1), (0, 2), (1, 3), (2, 3)]);

    let result = post_order_from(&graph, 0);
    assert_eq!(result, vec![3, 1, 2, 0]);
}

#[test]
fn is_cyclic() {
    use super::super::is_cyclic;

    let diamond_acyclic = TestGraph::new(0, &[(0, 1), (0, 2), (1, 3), (2, 3)]);
    let diamond_cyclic = TestGraph::new(0, &[(0, 1), (1, 2), (2, 3), (3, 0)]);

    assert!(!is_cyclic(&diamond_acyclic));
    assert!(is_cyclic(&diamond_cyclic));
}

#[test]
fn dfs() {
    let graph = TestGraph::new(0, &[(0, 1), (0, 2), (1, 3), (2, 3), (3, 0)]);

    let result: Vec<usize> = DepthFirstSearch::new(&graph).with_start_node(0).collect();
    assert_eq!(result, vec![0, 2, 3, 1]);
}

#[test]
fn dfs_debug() {
    let graph = TestGraph::new(0, &[(0, 1), (0, 2), (1, 3), (2, 3), (3, 0)]);
    let mut dfs = DepthFirstSearch::new(&graph).with_start_node(0);
    dfs.complete_search();
    assert_eq!(format!("{{0, 1, 2, 3}}"), format!("{:?}", dfs));
}
