daggy 0.4.1

A directed acyclic graph data structure library. It is Implemented on top of petgraph's Graph data structure and attempts to follow similar conventions where suitable.
Documentation

extern crate daggy;

use daggy::{Dag, WouldCycle};
use std::iter::once;

struct Weight;

#[test]
fn add_edges_ok() {

    let mut dag = Dag::<Weight, u32, u32>::new();
    let root = dag.add_node(Weight);
    let a = dag.add_node(Weight);
    let b = dag.add_node(Weight);
    let c = dag.add_node(Weight);

    let mut new_edges = dag.add_edges(once((root, a, 0))
        .chain(once((root, b, 1)))
        .chain(once((root, c, 2))))
        .unwrap();

    assert_eq!(new_edges.next(), dag.find_edge(root, a));
    assert_eq!(new_edges.next(), dag.find_edge(root, b));
    assert_eq!(new_edges.next(), dag.find_edge(root, c));

}


#[test]
fn add_edges_err() {

    let mut dag = Dag::<Weight, u32, u32>::new();
    let root = dag.add_node(Weight);
    let a = dag.add_node(Weight);
    let b = dag.add_node(Weight);
    let c = dag.add_node(Weight);

    let add_edges_result = dag.add_edges(once((root, a, 0))
        .chain(once((root, b, 1)))
        .chain(once((root, c, 2)))
        .chain(once((c, root, 3))));

    match add_edges_result {
        Err(WouldCycle(returned_weights)) => assert_eq!(returned_weights, vec![3, 2, 1, 0]),
        Ok(_) => panic!("Should have been an error"),
    }
}