pub struct TestCfg {
pub entry: BlockId,
pub exits: HashSet<BlockId>,
pub error_blocks: HashSet<BlockId>,
pub successors: HashMap<BlockId, Vec<BlockId>>,
pub predecessors: HashMap<BlockId, Vec<BlockId>>,
}Expand description
Test CFG structure for unit tests.
Fields§
§entry: BlockIdEntry block ID
exits: HashSet<BlockId>Exit block IDs (may be multiple in real CFG)
error_blocks: HashSet<BlockId>Error/panic blocks
successors: HashMap<BlockId, Vec<BlockId>>Successors: block -> list of successor blocks
predecessors: HashMap<BlockId, Vec<BlockId>>Predecessors: block -> list of predecessor blocks
Implementations§
Source§impl TestCfg
impl TestCfg
Sourcepub fn add_edge(&mut self, from: BlockId, to: BlockId) -> &mut Self
pub fn add_edge(&mut self, from: BlockId, to: BlockId) -> &mut Self
Adds an edge from from to to.
Sourcepub fn simple_loop() -> Self
pub fn simple_loop() -> Self
Builds a simple loop CFG.
Sourcepub fn enumerate_paths(&self) -> Vec<Path>
pub fn enumerate_paths(&self) -> Vec<Path>
Enumerates all paths from entry to exits using DFS.
Sourcepub fn compute_dominators(&self) -> DominatorTree
pub fn compute_dominators(&self) -> DominatorTree
Computes the dominator tree using the iterative algorithm.
Sourcepub fn detect_loops(&self) -> Vec<Loop>
pub fn detect_loops(&self) -> Vec<Loop>
Detects natural loops using back-edge detection.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TestCfg
impl RefUnwindSafe for TestCfg
impl Send for TestCfg
impl Sync for TestCfg
impl Unpin for TestCfg
impl UnsafeUnpin for TestCfg
impl UnwindSafe for TestCfg
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more