blob: a771d8e569862d9150dcc7499837cac380069139 [file] [log] [blame] [edit]
#![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<u32, u32> {
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<u32, u32> = bincode::deserialize(&data).unwrap();
graph2
});
}
}