test_utils.py 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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('comment', 'bar'),
  11. S('command', 'baz')])
  12. def tearDown(self):
  13. del self.statements
  14. del self.block
  15. def test_find_leaders(self):
  16. self.assertEqual(find_leaders(self.statements), [0, 2, 4])
  17. def test_find_basic_blocks(self):
  18. s = self.statements
  19. self.assertEqual(map(lambda b: b.statements, find_basic_blocks(s)), \
  20. [B(s[:2]).statements, B(s[2:4]).statements, \
  21. B(s[4:]).statements])
  22. def test_eq(self):
  23. self.assertTrue(S('command', 'foo') == S('command', 'foo'))
  24. self.assertFalse(S('command', 'foo') == S('command', 'bar'))
  25. def test_stype(self):
  26. self.assertTrue(S('comment', 'foo', inline=False).is_comment())
  27. self.assertTrue(S('directive', 'foo').is_directive())
  28. self.assertTrue(S('label', 'foo').is_label())
  29. self.assertTrue(S('command', 'foo').is_command())
  30. self.assertFalse(S('command', 'foo').is_comment())
  31. self.assertFalse(S('label', 'foo').is_directive())
  32. self.assertFalse(S('comment', 'foo', inline=False).is_label())
  33. self.assertFalse(S('directive', 'foo').is_command())
  34. def test_is_inline_comment(self):
  35. self.assertTrue(S('comment', 'foo', inline=True).is_inline_comment())
  36. self.assertFalse(S('comment', 'foo', inline=False).is_inline_comment())
  37. def test_jump_target(self):
  38. self.assertEqual(S('command', 'j', 'foo').jump_target(), 'foo')
  39. self.assertRaises(Exception, S('command', 'foo').jump_target)
  40. def test_iter(self):
  41. self.assertEqual(self.block.statements, list(self.block))
  42. def test_read(self):
  43. self.assertEqual(self.block.read(), S('command', 'foo'))
  44. self.assertEqual(self.block.read(), S('comment', 'bar'))
  45. self.assertEqual(self.block.read(), S('command', 'baz'))
  46. def test_end(self):
  47. self.assertFalse(self.block.end())
  48. self.block.read()
  49. self.block.read()
  50. self.block.read()
  51. self.assertTrue(self.block.end())
  52. def test_peek(self):
  53. self.assertEqual(self.block.peek(), S('command', 'foo'))
  54. self.assertEqual(self.block.peek(2), [S('command', 'foo'), \
  55. S('comment', 'bar')])
  56. self.block.read()
  57. self.assertEqual(self.block.peek(), S('comment', 'bar'))
  58. def test_replace(self):
  59. self.block.replace(1, [S('command', 'foobar')])
  60. self.assertEqual(self.block.pointer, 1)
  61. self.assertEqual(self.block.statements, [S('command', 'foobar'), \
  62. S('comment', 'bar'), \
  63. S('command', 'baz')])
  64. def test_apply_filter(self):
  65. self.block.apply_filter(lambda s: s.is_command())
  66. self.assertEqual(self.block.statements, [S('command', 'foo'), \
  67. S('command', 'baz')])