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