1 #![feature(test)]
2 
3 #[cfg(feature = "serde-1")]
4 mod serialize {
5     extern crate petgraph;
6     extern crate test;
7 
8     use petgraph::prelude::*;
9     use rand::Rng;
10     use test::Bencher;
11 
12     const NUM_NODES: usize = 1_000_000;
13     const NUM_EDGES: usize = 100_000;
14     const NUM_HOLES: usize = 1_000_000;
15 
make_stable_graph() -> StableGraph<u32, u32>16     fn make_stable_graph() -> StableGraph<u32, u32> {
17         let mut g = StableGraph::with_capacity(NUM_NODES + NUM_HOLES, NUM_EDGES);
18         let indices: Vec<_> = (0..NUM_NODES + NUM_HOLES)
19             .map(|i| g.add_node(i as u32))
20             .collect();
21 
22         let mut rng = rand::thread_rng();
23         g.extend_with_edges((0..NUM_EDGES).map(|_| {
24             let first = rng.gen_range(0, NUM_NODES + NUM_HOLES);
25             let second = rng.gen_range(0, NUM_NODES + NUM_HOLES - 1);
26             let second = second + (second >= first) as usize;
27             let weight: u32 = rng.gen();
28             (indices[first], indices[second], weight)
29         }));
30 
31         // Remove nodes to make the structure a bit more interesting
32         while g.node_count() > NUM_NODES {
33             let idx = rng.gen_range(0, indices.len());
34             g.remove_node(indices[idx]);
35         }
36 
37         g
38     }
39 
40     #[bench]
serialize_stable_graph(bench: &mut Bencher)41     fn serialize_stable_graph(bench: &mut Bencher) {
42         let graph = make_stable_graph();
43         bench.iter(|| bincode::serialize(&graph).unwrap());
44     }
45 
46     #[bench]
deserialize_stable_graph(bench: &mut Bencher)47     fn deserialize_stable_graph(bench: &mut Bencher) {
48         let graph = make_stable_graph();
49         let data = bincode::serialize(&graph).unwrap();
50         bench.iter(|| {
51             let graph2: StableGraph<u32, u32> = bincode::deserialize(&data).unwrap();
52             graph2
53         });
54     }
55 }
56