diff --git a/src/dataflow.py b/src/dataflow.py
index eb27e4cda186d3edbef27a4c0682555dc9957721..b90ddbf9b6b889ae5a07a45d60a4e7c44e3f8557 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
Binary files a/tests/__init__.pyc and /dev/null differ
diff --git a/tests/test_dataflow.py b/tests/test_dataflow.py
index 425dec91b8f100c0925829db7d089c555c40089b..4a8cf2c851d29f48cd7c2893eaf6cb820848833d 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)