graphrepresentations 0.0.1-alpha.1

A crate providing efficient abstract implementations of different graph representations
Documentation
use graphrepresentations::simplegraph::SimpleGraph;
use graphrepresentations::graph::{MutableGraph, Node, Edge, ForwardNavigableGraph, Graph, EdgeRef};
use graphrepresentations::adjacencyarray::AdjacencyArray;

#[test]
fn test_adjacency_array_navigation_simple_example() {
    let mut simple_graph = SimpleGraph::new();
    let n0 = simple_graph.add_node(Node::new('a'));
    let n1 = simple_graph.add_node(Node::new('b'));
    let n2 = simple_graph.add_node(Node::new('c'));
    let n3 = simple_graph.add_node(Node::new('d'));
    let n4 = simple_graph.add_node(Node::new('e'));
    simple_graph.add_edge(Edge::new(n0, n1, 1)).unwrap();
    simple_graph.add_edge(Edge::new(n1, n0, 2)).unwrap();
    simple_graph.add_edge(Edge::new(n2, n3, 5)).unwrap();
    simple_graph.add_edge(Edge::new(n1, n4, 3)).unwrap();
    simple_graph.add_edge(Edge::new(n1, n2, 4)).unwrap();
    simple_graph.add_edge(Edge::new(n3, n3, 6)).unwrap();
    let adjacency_array = AdjacencyArray::from(&simple_graph);

    let n1_out_edges: Vec<_> = adjacency_array.out_edges(n1).map(|id| adjacency_array.edge(id)).collect();
    assert_eq!(n1_out_edges, vec![EdgeRef::new(n1, n0, &2), EdgeRef::new(n1, n4, &3), EdgeRef::new(n1, n2, &4)]);
}