use cairo_lang_utils::ordered_hash_set::OrderedHashSet;
use super::Dominators;
use crate::BlockId;
#[test]
fn test_dominates() {
let dominators = Dominators {
per_block: vec![
OrderedHashSet::from_iter([BlockId(0)]),
OrderedHashSet::from_iter([BlockId(0), BlockId(1)]),
OrderedHashSet::from_iter([BlockId(0), BlockId(2)]),
OrderedHashSet::from_iter([BlockId(0), BlockId(3)]),
OrderedHashSet::from_iter([BlockId(0), BlockId(3), BlockId(4)]),
OrderedHashSet::from_iter([BlockId(0), BlockId(3), BlockId(5)]),
OrderedHashSet::from_iter([BlockId(0), BlockId(3), BlockId(6)]),
],
};
for i in 0..dominators.per_block.len() {
assert!(dominators.dominates(BlockId(i), BlockId(i)));
}
for i in 0..dominators.per_block.len() {
assert!(dominators.dominates(BlockId(0), BlockId(i)));
}
assert!(dominators.dominates(BlockId(3), BlockId(4)));
assert!(dominators.dominates(BlockId(3), BlockId(5)));
assert!(dominators.dominates(BlockId(3), BlockId(6)));
assert!(!dominators.dominates(BlockId(1), BlockId(2)));
assert!(!dominators.dominates(BlockId(2), BlockId(1)));
assert!(!dominators.dominates(BlockId(1), BlockId(3)));
assert!(!dominators.dominates(BlockId(2), BlockId(3)));
assert!(!dominators.dominates(BlockId(3), BlockId(1)));
assert!(!dominators.dominates(BlockId(3), BlockId(2)));
}