luka 0.4.0

Library for working with graphs
Documentation
use luka::algorithms::{find_connected_components, find_strongly_connected_components_search};
use luka::Graph;

#[test]
fn integration_test_find_connected_components(){
    let mut graph = Graph::new(11);

    graph.add_edge(1, 2, 0.0).unwrap();
    graph.add_edge(2, 3, 0.0).unwrap();
    graph.add_edge(3, 4, 0.0).unwrap();

    graph.add_edge(5, 6, 0.0).unwrap();
    graph.add_edge(6, 7, 0.0).unwrap();

    graph.add_edge(8, 9, 0.0).unwrap();
    graph.add_edge(9, 10, 0.0).unwrap();
    graph.add_edge(10, 11, 0.0).unwrap();

    let components = find_connected_components(&graph).unwrap();
    assert_eq!(components[0].iter().map(|elem| elem.id()).collect::<Vec<usize>>(), [1, 2, 3, 4]);
    assert_eq!(components[1].iter().map(|elem| elem.id()).collect::<Vec<usize>>(), [5, 6, 7]);
    assert_eq!(components[2].iter().map(|elem| elem.id()).collect::<Vec<usize>>(), [8, 9, 10, 11]);
    assert_eq!(components.len(), 3);

    let graph = Graph::<i32>::new(100);
    let components = find_connected_components(&graph).unwrap();
    assert_eq!(components.len(), 100);
}

#[cfg(test)]
#[test]
fn integration_test_find_strongly_connected_components() {
    let mut graph = Graph::new(8);

    graph.add_edge(1, 2, 0.0).unwrap();
    graph.add_edge(2, 6, 0.0).unwrap();
    graph.add_edge(5, 1, 0.0).unwrap();
    graph.add_edge(2, 5, 0.0).unwrap();
    graph.add_edge(5, 6, 0.0).unwrap();

    graph.add_edge(2, 3, 0.0).unwrap();
    graph.add_edge(6, 7, 0.0).unwrap();
    graph.add_edge(7, 6, 0.0).unwrap();
    graph.add_edge(3, 7, 0.0).unwrap();

    graph.add_edge(3, 4, 0.0).unwrap();
    graph.add_edge(4, 3, 0.0).unwrap();
    graph.add_edge(4, 8, 0.0).unwrap();
    graph.add_edge(8, 4, 0.0).unwrap();
    graph.add_edge(8, 7, 0.0).unwrap();

    let components = find_strongly_connected_components_search(&graph).unwrap();
    assert_eq!(components[0].iter().map(|vertex| vertex.id()).collect::<Vec<usize>>(), [6, 7]);
    assert_eq!(components[1].iter().map(|vertex| vertex.id()).collect::<Vec<usize>>(), [3, 4, 8]);
    assert_eq!(components[2].iter().map(|vertex| vertex.id()).collect::<Vec<usize>>(), [1, 2, 5]);
}