1 #![feature(test)]
2 
3 extern crate petgraph;
4 extern crate test;
5 
6 use petgraph::prelude::*;
7 use test::Bencher;
8 
9 #[allow(dead_code)]
10 mod common;
11 use common::*;
12 
13 use petgraph::stable_graph::node_index;
14 
15 #[bench]
full_edges_default(bench: &mut Bencher)16 fn full_edges_default(bench: &mut Bencher) {
17     let a = stable_digraph().full_a();
18     bench.iter(|| a.edges(node_index(1)).count())
19 }
20 
21 #[bench]
full_edges_out(bench: &mut Bencher)22 fn full_edges_out(bench: &mut Bencher) {
23     let a = stable_digraph().full_a();
24     bench.iter(|| a.edges_directed(node_index(1), Outgoing).count())
25 }
26 
27 #[bench]
full_edges_in(bench: &mut Bencher)28 fn full_edges_in(bench: &mut Bencher) {
29     let a = stable_digraph().full_a();
30     bench.iter(|| a.edges_directed(node_index(1), Incoming).count())
31 }
32 
33 #[bench]
neighbors_default(bench: &mut Bencher)34 fn neighbors_default(bench: &mut Bencher) {
35     let a = stable_digraph().full_a();
36     bench.iter(|| a.neighbors(node_index(1)).count())
37 }
38 
39 #[bench]
neighbors_out(bench: &mut Bencher)40 fn neighbors_out(bench: &mut Bencher) {
41     let a = stable_digraph().full_a();
42     bench.iter(|| a.neighbors_directed(node_index(1), Outgoing).count())
43 }
44 
45 #[bench]
neighbors_in(bench: &mut Bencher)46 fn neighbors_in(bench: &mut Bencher) {
47     let a = stable_digraph().full_a();
48     bench.iter(|| a.neighbors_directed(node_index(1), Incoming).count())
49 }
50 
51 #[bench]
sccs_kosaraju_stable_graph(bench: &mut Bencher)52 fn sccs_kosaraju_stable_graph(bench: &mut Bencher) {
53     let a = stable_digraph().bigger();
54     bench.iter(|| petgraph::algo::kosaraju_scc(&a));
55 }
56 
57 #[bench]
sccs_kosaraju_graph(bench: &mut Bencher)58 fn sccs_kosaraju_graph(bench: &mut Bencher) {
59     let a = digraph().bigger();
60     bench.iter(|| petgraph::algo::kosaraju_scc(&a));
61 }
62 
63 #[bench]
sccs_tarjan_stable_graph(bench: &mut Bencher)64 fn sccs_tarjan_stable_graph(bench: &mut Bencher) {
65     let a = stable_digraph().bigger();
66     bench.iter(|| petgraph::algo::tarjan_scc(&a));
67 }
68 
69 #[bench]
sccs_tarjan_graph(bench: &mut Bencher)70 fn sccs_tarjan_graph(bench: &mut Bencher) {
71     let a = digraph().bigger();
72     bench.iter(|| petgraph::algo::tarjan_scc(&a));
73 }
74 
75 #[bench]
stable_graph_map(bench: &mut Bencher)76 fn stable_graph_map(bench: &mut Bencher) {
77     let a = stable_digraph().bigger();
78     bench.iter(|| a.map(|i, _| i, |i, _| i));
79 }
80 
81 #[bench]
graph_map(bench: &mut Bencher)82 fn graph_map(bench: &mut Bencher) {
83     let a = digraph().bigger();
84     bench.iter(|| a.map(|i, _| i, |i, _| i));
85 }
86 
87 #[bench]
stable_graph_retain_nodes(bench: &mut Bencher)88 fn stable_graph_retain_nodes(bench: &mut Bencher) {
89     let mut a = stable_digraph().bigger();
90     bench.iter(|| a.retain_nodes(|_gr, i| (i.index() + 1) % 3700 != 0));
91 }
92 
93 #[bench]
stable_graph_retain_edges(bench: &mut Bencher)94 fn stable_graph_retain_edges(bench: &mut Bencher) {
95     let mut a = stable_digraph().bigger();
96     bench.iter(|| a.retain_edges(|_gr, i| (i.index() + 1) % 3700 != 0));
97 }
98