test_optimize_advanced.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import unittest
  2. from src.optimize.advanced import eliminate_common_subexpressions, \
  3. fold_constants, copy_propagation, algebraic_transformations
  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)
  55. def test_algebraic_transforms_add0(self):
  56. block = B([self.foo,
  57. S('command', 'addu', '$1', '$2', 0),
  58. self.bar])
  59. # self.assertTrue(copy_propagation(block))
  60. algebraic_transformations(block)
  61. self.assertEqual(block.statements, [self.foo,
  62. self.bar])