diff options
| author | serpilliere <serpilliere@users.noreply.github.com> | 2015-09-06 23:38:46 +0200 |
|---|---|---|
| committer | serpilliere <serpilliere@users.noreply.github.com> | 2015-09-06 23:38:46 +0200 |
| commit | cc20f3d79c641d929865f12471a70a2575b8cf54 (patch) | |
| tree | d9afdd811ebd9b767bffeb2be8d15bda476015d2 /test/core/graph.py | |
| parent | e58c094050a1873d9eec4b609804f3e1d6cbb6bd (diff) | |
| parent | 8a4238aaf13366284acf66e47fa0ba5a150ed2a0 (diff) | |
| download | miasm-cc20f3d79c641d929865f12471a70a2575b8cf54.tar.gz miasm-cc20f3d79c641d929865f12471a70a2575b8cf54.zip | |
Merge pull request #218 from mrphrazer/digraph_loops
Extend digraph with loop detection algorithms
Diffstat (limited to 'test/core/graph.py')
| -rw-r--r-- | test/core/graph.py | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/test/core/graph.py b/test/core/graph.py index 5100cf8d..86175c91 100644 --- a/test/core/graph.py +++ b/test/core/graph.py @@ -163,4 +163,32 @@ assert(frontier == {7: set([9]), frontier = g2.compute_dominance_frontier(5) assert(frontier == {7: set([9]), - 8: set([9])}) \ No newline at end of file + 8: set([9])}) + +# Regression test with natural loops and irreducible loops +g3 = DiGraph() +g3.add_edge(1, 2) +g3.add_edge(1, 3) +g3.add_edge(2, 4) +g3.add_edge(2, 5) +g3.add_edge(3, 7) +g3.add_edge(3, 8) +g3.add_edge(4, 9) +g3.add_edge(5, 9) +g3.add_edge(7, 6) +g3.add_edge(8, 6) +g3.add_edge(9, 6) +g3.add_edge(9, 2) +g3.add_edge(9, 1) +g3.add_edge(7, 8) +g3.add_edge(8, 7) + +loops = set([(backedge, frozenset(body)) for backedge, body in g3.compute_natural_loops(1)]) +assert(loops == {((1, 9), frozenset({1, 2, 4, 5, 9})), + ((2, 9), frozenset({2, 4, 5, 9}))}) + +sccs = set([frozenset(scc) for scc in g3.compute_strongly_connected_components()]) +assert(sccs == {frozenset({6}), + frozenset({7, 8}), + frozenset({3}), + frozenset({1, 2, 4, 5, 9})}) |