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