test_dag.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import unittest
  2. from src.statement import Statement as S
  3. from src.dataflow import BasicBlock as B
  4. from src.dag import Dag, DagNode, DagLeaf
  5. class TestDag(unittest.TestCase):
  6. def setUp(self):
  7. pass
  8. def tearDown(self):
  9. pass
  10. def test_dag_unary(self):
  11. dag = Dag(B([S('command', 'neg.d', '$rd', '$rs')]))
  12. expect = Dag([])
  13. expect.nodes = [DagLeaf('$rs'), DagNode('neg.d', '$rd', \
  14. DagLeaf('$rs'))]
  15. self.assertEqualDag(dag, expect)
  16. def test_dag_binary(self):
  17. dag = Dag(B([S('command', 'addu', '$rd', '$r1', '$r2')]))
  18. expect = Dag([])
  19. expect.nodes = [DagLeaf('$r1'),
  20. DagLeaf('$r2'),
  21. DagNode('addu', '$rd', DagLeaf('$r1'), DagLeaf('$r2'))]
  22. self.assertEqualDag(dag, expect)
  23. # def test_dag_combinednode(self):
  24. # dag = Dag(B([S('command', 'mult', '$rd1', '$r1', '$r2'),
  25. # S('command', 'mult', '$rd2', '$r1', '$r2')]))
  26. # expect = Dag([])
  27. # multnode = DagNode('mult',
  28. # DagLeaf('$r1'),
  29. # DagLeaf('$r2'))
  30. # multnode.labels = ['$rd1', '$rd2']
  31. # expect.nodes = [DagLeaf('$r1'),
  32. # DagLeaf('$r2'),
  33. # multnode]
  34. #
  35. # self.assertEqualDag(dag, expect)
  36. def assertEqualDag(self, dag1, dag2):
  37. self.assertEqual(len(dag1.nodes), len(dag2.nodes))
  38. for node1, node2 in zip(dag1.nodes, dag2.nodes):
  39. self.assertEqualNodes(node1, node2)
  40. def assertEqualNodes(self, node1, node2):
  41. if isinstance(node1, DagLeaf):
  42. self.assertIsInstance(node2, DagLeaf)
  43. self.assertEqual(node1.reg, node2.reg)
  44. elif isinstance(node2, DagLeaf):
  45. raise AssertionError
  46. else:
  47. self.assertEqual(node1.op, node2.op)
  48. self.assertEqual(node1.labels, node2.labels)
  49. self.assertEqual(len(node1.nodes), len(node2.nodes))
  50. for child1, child2 in zip(node1.nodes, node2.nodes):
  51. self.assertEqualNodes(child1, child2)