Add a benchmark test for sccc finding

While a bit primitive, it should get us at least a better number than
nothing.
This commit is contained in:
Andreas Molzer 2019-05-23 01:00:07 +02:00
parent ffe52882ed
commit 4fdf8a5630

View File

@ -1,3 +1,5 @@
extern crate test;
use super::*;
use crate::graph::tests::TestGraph;
@ -139,3 +141,47 @@ fn test_find_state_3() {
assert_eq!(sccs.successors(0), &[]);
assert_eq!(sccs.successors(1), &[0]);
}
#[bench]
fn bench_sccc(b: &mut test::Bencher) {
// Like `test_three_sccs` but each state is replaced by a group of
// three or four to have some amount of test data.
/*
0-3
|
v
+->4-6 11-14
| | |
| v |
+--7-10<-+
*/
fn make_3_clique(slice: &mut [(usize, usize)], base: usize) {
slice[0] = (base + 0, base + 1);
slice[1] = (base + 1, base + 2);
slice[2] = (base + 2, base + 0);
}
// Not actually a clique but strongly connected.
fn make_4_clique(slice: &mut [(usize, usize)], base: usize) {
slice[0] = (base + 0, base + 1);
slice[1] = (base + 1, base + 2);
slice[2] = (base + 2, base + 3);
slice[3] = (base + 3, base + 0);
slice[4] = (base + 1, base + 3);
slice[5] = (base + 2, base + 1);
}
let mut graph = [(0, 0); 6 + 3 + 6 + 3 + 4];
make_4_clique(&mut graph[0..6], 0);
make_3_clique(&mut graph[6..9], 4);
make_4_clique(&mut graph[9..15], 7);
make_3_clique(&mut graph[15..18], 11);
graph[18] = (0, 4);
graph[19] = (5, 7);
graph[20] = (11, 10);
graph[21] = (7, 4);
let graph = TestGraph::new(0, &graph[..]);
b.iter(|| {
let sccs: Sccs<_, usize> = Sccs::new(&graph);
assert_eq!(sccs.num_sccs(), 3);
});
}