test_optimize_advanced.py 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import unittest
  2. from src.optimize.advanced import eliminate_common_subexpressions, \
  3. fold_constants, copy_propagation
  4. from src.statement import Statement as S, Block as B
  5. class TestOptimizeAdvanced(unittest.TestCase):
  6. def setUp(self):
  7. self.foo = S('command', 'foo')
  8. self.bar = S('command', 'bar')
  9. def test_eliminate_common_subexpressions(self):
  10. pass
  11. def test_copy_propagation_true(self):
  12. block = B([self.foo,
  13. S('command', 'move', '$1', '$2'),
  14. self.foo,
  15. S('command', 'addu', '$3', '$1', '$4'),
  16. self.bar])
  17. self.assertTrue(copy_propagation(block))
  18. self.assertEqual(block.statements, [self.foo,
  19. S('command', 'move', '$1', '$2'),
  20. self.foo,
  21. S('command', 'addu', '$3', '$2', '$4'),
  22. self.bar])
  23. def test_copy_propagation_overwrite(self):
  24. block = B([self.foo, \
  25. S('command', 'move', '$1', '$2'),
  26. S('command', 'move', '$1', '$5'),
  27. S('command', 'addu', '$3', '$1', '$4'),
  28. self.bar])
  29. self.assertTrue(copy_propagation(block))
  30. self.assertEqual(block.statements, [self.foo,
  31. S('command', 'move', '$1', '$2'),
  32. S('command', 'move', '$1', '$5'),
  33. S('command', 'addu', '$3', '$5', '$4'),
  34. self.bar])
  35. def test_copy_propagation_false(self):
  36. arguments = [self.foo,
  37. S('command', 'move', '$1', '$2'),
  38. S('command', 'move', '$10', '$20'),
  39. S('command', 'addu', '$1', '$5', 1),
  40. S('command', 'addu', '$3', '$1', '$4'),
  41. self.bar]
  42. block = B(arguments)
  43. self.assertFalse(copy_propagation(block))
  44. self.assertEqual(block.statements, arguments)
  45. def test_copy_propagation_false_severalmoves(self):
  46. arguments = [self.foo,
  47. S('command', 'move', '$1', '$2'),
  48. self.foo,
  49. S('command', 'addu', '$1', '$5', 1),
  50. S('command', 'addu', '$3', '$1', '$4'),
  51. self.bar]
  52. block = B(arguments)
  53. self.assertFalse(copy_propagation(block))
  54. self.assertEqual(block.statements, arguments)