From 1e2cf2e981c80b9ca9f085b27e084085c59b1203 Mon Sep 17 00:00:00 2001 From: Jayke Meijer <jayke.meijer@gmail.com> Date: Tue, 27 Dec 2011 16:52:57 +0100 Subject: [PATCH] Added unittests for dag. --- src/dataflow.py | 2 +- tests/__init__.pyc | Bin 104 -> 0 bytes tests/test_dataflow.py | 56 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 54 insertions(+), 4 deletions(-) delete mode 100644 tests/__init__.pyc diff --git a/src/dataflow.py b/src/dataflow.py index eb27e4c..b90ddbf 100644 --- a/src/dataflow.py +++ b/src/dataflow.py @@ -175,7 +175,7 @@ class Dag: def find_op_node(self, op, rd, *args): for n in self.nodes: - if n.op == op and n.nodes == args: + if not isinstance(n, DagLeaf) and n.op == op and n.nodes == args: n.labels.append(rd) return n diff --git a/tests/__init__.pyc b/tests/__init__.pyc deleted file mode 100644 index 7ef5b56499b5cbfec327a19f91a44ca00ff2d827..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 104 zcmZSn%*%Ca_D{cL1}I<z(hfje%mO4*7#M;zKq7t`K!O2{C>8{Ym82Gz6zj*wXXa&= b#K-FuRF-f6MQw8PQ%ZAE?Lc~qftUdRYfcf+ diff --git a/tests/test_dataflow.py b/tests/test_dataflow.py index 425dec9..4a8cf2c 100644 --- a/tests/test_dataflow.py +++ b/tests/test_dataflow.py @@ -2,7 +2,7 @@ import unittest from src.statement import Statement as S from src.dataflow import BasicBlock as B, find_leaders, find_basic_blocks, \ - generate_flow_graph, Dag + generate_flow_graph, Dag, DagNode, DagLeaf class TestDataflow(unittest.TestCase): @@ -45,5 +45,55 @@ class TestDataflow(unittest.TestCase): self.assertIn(b1, b3.edges_from) self.assertIn(b2, b3.edges_from) - def test_dag(self): - pass + def test_dag_unary(self): + dag = Dag(B([S('command', 'neg.d', '$rd', '$rs')])) + expect = Dag([]) + expect.nodes = [DagLeaf('$rs'), DagNode('neg.d', '$rd', DagLeaf('$rs'))] + + self.assertEqualDag(dag, expect) + + + def test_dag_binary(self): + dag = Dag(B([S('command', 'addu', '$rd', '$r1', '$r2')])) + expect = Dag([]) + expect.nodes = [DagLeaf('$r1'), + DagLeaf('$r2'), + DagNode('addu', '$rd', DagLeaf('$r1'), DagLeaf('$r2'))] + + self.assertEqualDag(dag, expect) + + +# def test_dag_combinednode(self): +# dag = Dag(B([S('command', 'mult', '$rd1', '$r1', '$r2'), +# S('command', 'mult', '$rd2', '$r1', '$r2')])) +# expect = Dag([]) +# multnode = DagNode('mult', +# DagLeaf('$r1'), +# DagLeaf('$r2')) +# multnode.labels = ['$rd1', '$rd2'] +# expect.nodes = [DagLeaf('$r1'), +# DagLeaf('$r2'), +# multnode] +# +# self.assertEqualDag(dag, expect) + + + def assertEqualDag(self, dag1, dag2): + self.assertEqual(len(dag1.nodes), len(dag2.nodes)) + + for node1, node2 in zip(dag1.nodes, dag2.nodes): + self.assertEqualNodes(node1, node2) + + def assertEqualNodes(self, node1, node2): + if isinstance(node1, DagLeaf): + self.assertIsInstance(node2, DagLeaf) + self.assertEqual(node1.reg, node2.reg) + elif isinstance(node2, DagLeaf): + raise AssertionError + else: + self.assertEqual(node1.op , node2.op) + self.assertEqual(node1.labels, node2.labels) + self.assertEqual(len(node1.nodes), len(node2.nodes)) + + for child1, child2 in zip(node1.nodes, node2.nodes): + self.assertEqualNodes(child1, child2) -- GitLab