#![feature(test)]

extern crate petgraph;
extern crate test;

use petgraph::graph::Graph;

#[bench]
fn bench_inser(b: &mut test::Bencher) {
    let mut og = Graph::new();
    let fst = og.add_node(0i32);
    for x in 1..125 {
        let n = og.add_node(x);
        og.add_edge(fst, n, ());
    }
    b.iter(|| {
        og.add_node(1)
    })
}

#[bench]
fn bench_add_edge(b: &mut test::Bencher) {
    let mut og = Graph::new();
    for _ in 0..100 {
        og.add_node(());
    }

    b.iter(|| {
        for (a, b) in og.node_indices().zip(og.node_indices().skip(1)) {
            og.add_edge(a, b, ());
        }
        og.clear_edges();
    })
}

#[bench]
fn bench_remove(b: &mut test::Bencher) {
    // removal is very slow in a big graph.
    // and this one doesn't even have many nodes.
    let mut og = Graph::new();
    let fst = og.add_node(0i32);
    let mut prev = fst;
    for x in 1..1250 {
        let n = og.add_node(x);
        og.add_edge(prev, n, ());
        prev = n;
    }
    //println!("{}", og);
    b.iter(|| {
        for _ in 0 .. 100 {
            og.remove_node(fst);
        }
    })
}
