test_utils.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import unittest
  2. from src.utils import Statement as S, Block as B, find_leaders, \
  3. find_basic_blocks
  4. class TestUtils(unittest.TestCase):
  5. def setUp(self):
  6. add = S('command', 'add', '$1', '$2', '$3')
  7. self.statements = [add, S('command', 'j', 'foo'), add, add, \
  8. S('label', 'foo')]
  9. self.block = B([S('command', 'foo'), \
  10. S('command', 'bar'),
  11. S('command', 'baz')])
  12. def test_find_leaders(self):
  13. self.assertEqual(find_leaders(self.statements), [0, 2, 4])
  14. def test_find_basic_blocks(self):
  15. s = self.statements
  16. self.assertEqual(map(lambda b: b.statements, find_basic_blocks(s)), \
  17. [B(s[:2]).statements, B(s[2:4]).statements, \
  18. B(s[4:]).statements])
  19. def test_eq(self):
  20. self.assertTrue(S('command', 'foo') == S('command', 'foo'))
  21. self.assertFalse(S('command', 'foo') == S('command', 'bar'))
  22. def test_stype(self):
  23. self.assertTrue(S('comment', 'foo', inline=False).is_comment())
  24. self.assertTrue(S('directive', 'foo').is_directive())
  25. self.assertTrue(S('label', 'foo').is_label())
  26. self.assertTrue(S('command', 'foo').is_command())
  27. self.assertFalse(S('command', 'foo').is_comment())
  28. self.assertFalse(S('label', 'foo').is_directive())
  29. self.assertFalse(S('comment', 'foo', inline=False).is_label())
  30. self.assertFalse(S('directive', 'foo').is_command())
  31. def test_is_inline_comment(self):
  32. self.assertTrue(S('comment', 'foo', inline=True).is_inline_comment())
  33. self.assertFalse(S('comment', 'foo', inline=False).is_inline_comment())
  34. def test_jump_target(self):
  35. self.assertEqual(S('command', 'j', 'foo').jump_target(), 'foo')
  36. self.assertRaises(Exception, S('command', 'foo').jump_target)
  37. def test_read(self):
  38. self.assertEqual(self.block.read(), S('command', 'foo'))
  39. self.assertEqual(self.block.read(), S('command', 'bar'))
  40. self.assertEqual(self.block.read(), S('command', 'baz'))
  41. def test_end(self):
  42. self.assertFalse(self.block.end())
  43. self.block.read()
  44. self.block.read()
  45. self.block.read()
  46. self.assertTrue(self.block.end())
  47. def test_peek(self):
  48. self.assertEqual(self.block.peek(), S('command', 'foo'))
  49. self.assertEqual(self.block.peek(2), [S('command', 'foo'), \
  50. S('command', 'bar')])
  51. self.block.read()
  52. self.assertEqual(self.block.peek(), S('command', 'bar'))
  53. def test_replace(self):
  54. self.block.replace(1, [S('command', 'foobar')])
  55. self.assertEqual(self.block.pointer, 1)
  56. self.assertEqual(self.block.statements, [S('command', 'foobar'), \
  57. S('command', 'bar'), \
  58. S('command', 'baz')])