#![feature(test)] #[cfg(feature = "serde-1")] mod serialize { extern crate petgraph; extern crate test; use petgraph::prelude::*; use rand::Rng; use test::Bencher; const NUM_NODES: usize = 1_000_000; const NUM_EDGES: usize = 100_000; const NUM_HOLES: usize = 1_000_000; fn make_stable_graph() -> StableGraph { let mut g = StableGraph::with_capacity(NUM_NODES + NUM_HOLES, NUM_EDGES); let indices: Vec<_> = (0..NUM_NODES + NUM_HOLES) .map(|i| g.add_node(i as u32)) .collect(); let mut rng = rand::thread_rng(); g.extend_with_edges((0..NUM_EDGES).map(|_| { let first = rng.gen_range(0, NUM_NODES + NUM_HOLES); let second = rng.gen_range(0, NUM_NODES + NUM_HOLES - 1); let second = second + (second >= first) as usize; let weight: u32 = rng.gen(); (indices[first], indices[second], weight) })); // Remove nodes to make the structure a bit more interesting while g.node_count() > NUM_NODES { let idx = rng.gen_range(0, indices.len()); g.remove_node(indices[idx]); } g } #[bench] fn serialize_stable_graph(bench: &mut Bencher) { let graph = make_stable_graph(); bench.iter(|| bincode::serialize(&graph).unwrap()); } #[bench] fn deserialize_stable_graph(bench: &mut Bencher) { let graph = make_stable_graph(); let data = bincode::serialize(&graph).unwrap(); bench.iter(|| { let graph2: StableGraph = bincode::deserialize(&data).unwrap(); graph2 }); } }