about summary refs log tree commit diff stats
path: root/test/analysis/depgraph.py
diff options
context:
space:
mode:
authorFabrice Desclaux <fabrice.desclaux@cea.fr>2015-03-12 13:28:23 +0100
committerFabrice Desclaux <fabrice.desclaux@cea.fr>2015-03-12 13:28:39 +0100
commit78fb1b41149a387c0df7d1dff6cf6d8608ec15d9 (patch)
tree03fc801e1e981530ed8d203f654384d91434d434 /test/analysis/depgraph.py
parentd0005fe286a874eb0702c8f669ffaa178c258fbf (diff)
downloadmiasm-78fb1b41149a387c0df7d1dff6cf6d8608ec15d9.tar.gz
miasm-78fb1b41149a387c0df7d1dff6cf6d8608ec15d9.zip
Test/DepGraph: add regression test for double bloc symbolic emulation
Diffstat (limited to 'test/analysis/depgraph.py')
-rw-r--r--test/analysis/depgraph.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/test/analysis/depgraph.py b/test/analysis/depgraph.py
index 9237d785..5484ec02 100644
--- a/test/analysis/depgraph.py
+++ b/test/analysis/depgraph.py
@@ -280,6 +280,21 @@ g10_ira.g.add_uniq_edge(g10_irb1.label, g10_irb1.label)
 
 g10_ira.blocs = dict([(irb.label, irb) for irb in [g10_irb1, g10_irb2]])
 
+# graph 11
+
+g11_ira = IRATest()
+g11_ira.g = GraphTest(g11_ira)
+
+g11_irb0 = gen_irbloc(lbl0, [ [ExprAff(a, cst1),
+                               ExprAff(b, cst2)] ])
+g11_irb1 = gen_irbloc(lbl1, [ [ExprAff(a, b),
+                               ExprAff(b, a)] ])
+g11_irb2 = gen_irbloc(lbl2, [ [ExprAff(a, a - b)] ])
+
+g11_ira.g.add_uniq_edge(g11_irb0.label, g11_irb1.label)
+g11_ira.g.add_uniq_edge(g11_irb1.label, g11_irb2.label)
+
+g11_ira.blocs = dict([(irb.label, irb) for irb in [g11_irb0, g11_irb1, g11_irb2]])
 
 # Test graph 1
 
@@ -543,6 +558,32 @@ g10_output1 = {"graph": g10_test1,
                "has_loop": True}
 
 
+# Test 11: no dual bloc emulation
+g11_test1 = DepNodeTest(g11_ira)
+
+g11_test1_dn1 = DependencyNode(g11_irb2.label, a, len(g11_irb2.irs))
+g11_test1_dn2 = DependencyNode(g11_irb2.label, a, 0)
+g11_test1_dn3 = DependencyNode(g11_irb2.label, b, 0)
+g11_test1_dn4 = DependencyNode(g11_irb1.label, a, 0)
+g11_test1_dn5 = DependencyNode(g11_irb1.label, b, 0)
+g11_test1_dn6 = DependencyNode(g11_irb0.label, cst1, 0)
+g11_test1_dn7 = DependencyNode(g11_irb0.label, cst2, 0)
+
+g11_test1.add_uniq_edge(g11_test1_dn7, g11_test1_dn5)
+g11_test1.add_uniq_edge(g11_test1_dn6, g11_test1_dn4)
+g11_test1.add_uniq_edge(g11_test1_dn5, g11_test1_dn2)
+g11_test1.add_uniq_edge(g11_test1_dn4, g11_test1_dn3)
+g11_test1.add_uniq_edge(g11_test1_dn3, g11_test1_dn1)
+g11_test1.add_uniq_edge(g11_test1_dn2, g11_test1_dn1)
+
+g11_input = (set([g11_test1_dn1]), set([g11_irb0.label]))
+
+g11_output1 = {"graph": g11_test1,
+               "emul": {a: ExprInt32(0x1)},
+               "unresolved": set(),
+               "has_loop": False}
+
+
 # Launch tests
 for i, test in enumerate([(g1_ira, g1_input, [g1_output1]),
                           (g2_ira, g2_input, [g2_output1]),
@@ -554,6 +595,7 @@ for i, test in enumerate([(g1_ira, g1_input, [g1_output1]),
                           (g8_ira, g8_input, [g8_output1, g8_output2]),
                           (g8_ira, g9_input, [g9_output1, g9_output2]),
                           (g10_ira, g10_input, [g10_output1]),
+                          (g11_ira, g11_input, [g11_output1]),
                       ]):
     # Extract test elements
     print "[+] Test", i+1