1
Fork 0

Test immediate dominators using public API

This commit is contained in:
Tomasz Miąsko 2023-10-05 00:00:00 +00:00
parent cae0791da4
commit a8ec7ddf0e

View file

@ -6,12 +6,11 @@ use super::super::tests::TestGraph;
fn diamond() { fn diamond() {
let graph = TestGraph::new(0, &[(0, 1), (0, 2), (1, 3), (2, 3)]); let graph = TestGraph::new(0, &[(0, 1), (0, 2), (1, 3), (2, 3)]);
let dominators = dominators(&graph); let d = dominators(&graph);
let immediate_dominators = &dominators.immediate_dominators; assert_eq!(d.immediate_dominator(0), None);
assert_eq!(immediate_dominators[0], None); assert_eq!(d.immediate_dominator(1), Some(0));
assert_eq!(immediate_dominators[1], Some(0)); assert_eq!(d.immediate_dominator(2), Some(0));
assert_eq!(immediate_dominators[2], Some(0)); assert_eq!(d.immediate_dominator(3), Some(0));
assert_eq!(immediate_dominators[3], Some(0));
} }
#[test] #[test]
@ -22,15 +21,14 @@ fn paper() {
&[(6, 5), (6, 4), (5, 1), (4, 2), (4, 3), (1, 2), (2, 3), (3, 2), (2, 1)], &[(6, 5), (6, 4), (5, 1), (4, 2), (4, 3), (1, 2), (2, 3), (3, 2), (2, 1)],
); );
let dominators = dominators(&graph); let d = dominators(&graph);
let immediate_dominators = &dominators.immediate_dominators; assert_eq!(d.immediate_dominator(0), None); // <-- note that 0 is not in graph
assert_eq!(immediate_dominators[0], None); // <-- note that 0 is not in graph assert_eq!(d.immediate_dominator(1), Some(6));
assert_eq!(immediate_dominators[1], Some(6)); assert_eq!(d.immediate_dominator(2), Some(6));
assert_eq!(immediate_dominators[2], Some(6)); assert_eq!(d.immediate_dominator(3), Some(6));
assert_eq!(immediate_dominators[3], Some(6)); assert_eq!(d.immediate_dominator(4), Some(6));
assert_eq!(immediate_dominators[4], Some(6)); assert_eq!(d.immediate_dominator(5), Some(6));
assert_eq!(immediate_dominators[5], Some(6)); assert_eq!(d.immediate_dominator(6), None);
assert_eq!(immediate_dominators[6], None);
} }
#[test] #[test]
@ -47,11 +45,11 @@ fn paper_slt() {
#[test] #[test]
fn immediate_dominator() { fn immediate_dominator() {
let graph = TestGraph::new(1, &[(1, 2), (2, 3)]); let graph = TestGraph::new(1, &[(1, 2), (2, 3)]);
let dominators = dominators(&graph); let d = dominators(&graph);
assert_eq!(dominators.immediate_dominator(0), None); assert_eq!(d.immediate_dominator(0), None);
assert_eq!(dominators.immediate_dominator(1), None); assert_eq!(d.immediate_dominator(1), None);
assert_eq!(dominators.immediate_dominator(2), Some(1)); assert_eq!(d.immediate_dominator(2), Some(1));
assert_eq!(dominators.immediate_dominator(3), Some(2)); assert_eq!(d.immediate_dominator(3), Some(2));
} }
#[test] #[test]
@ -75,8 +73,7 @@ fn transitive_dominator() {
], ],
); );
let dom_tree = dominators(&graph); let d = dominators(&graph);
let immediate_dominators = &dom_tree.immediate_dominators; assert_eq!(d.immediate_dominator(2), Some(0));
assert_eq!(immediate_dominators[2], Some(0)); assert_eq!(d.immediate_dominator(3), Some(0)); // This used to return Some(1).
assert_eq!(immediate_dominators[3], Some(0)); // This used to return Some(1).
} }