|
@@ -7,16 +7,18 @@ from src.utils import Statement as S, Block as B, find_leaders, \
|
|
|
class TestUtils(unittest.TestCase):
|
|
class TestUtils(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
def setUp(self):
|
|
|
- pass
|
|
|
|
|
|
|
+ add = S('command', 'add', '$1', '$2', '$3')
|
|
|
|
|
+ self.statements = [add, S('command', 'j', 'foo'), add, add, \
|
|
|
|
|
+ S('label', 'foo')]
|
|
|
|
|
+ self.block = B([S('command', 'foo'), \
|
|
|
|
|
+ S('command', 'bar'),
|
|
|
|
|
+ S('command', 'baz')])
|
|
|
|
|
|
|
|
def test_find_leaders(self):
|
|
def test_find_leaders(self):
|
|
|
- add = S('command', 'add', '$1', '$2', '$3')
|
|
|
|
|
- s = [add, S('command', 'j', 'foo'), add, add, S('label', 'foo')]
|
|
|
|
|
- self.assertEqual(find_leaders(s), [0, 2, 4])
|
|
|
|
|
|
|
+ self.assertEqual(find_leaders(self.statements), [0, 2, 4])
|
|
|
|
|
|
|
|
def test_find_basic_blocks(self):
|
|
def test_find_basic_blocks(self):
|
|
|
- add = S('command', 'add', '$1', '$2', '$3')
|
|
|
|
|
- s = [add, S('command', 'j', 'foo'), add, add, S('label', 'foo')]
|
|
|
|
|
|
|
+ s = self.statements
|
|
|
self.assertEqual(map(lambda b: b.statements, find_basic_blocks(s)), \
|
|
self.assertEqual(map(lambda b: b.statements, find_basic_blocks(s)), \
|
|
|
[B(s[:2]).statements, B(s[2:4]).statements, \
|
|
[B(s[:2]).statements, B(s[2:4]).statements, \
|
|
|
B(s[4:]).statements])
|
|
B(s[4:]).statements])
|
|
@@ -43,3 +45,29 @@ class TestUtils(unittest.TestCase):
|
|
|
def test_jump_target(self):
|
|
def test_jump_target(self):
|
|
|
self.assertEqual(S('command', 'j', 'foo').jump_target(), 'foo')
|
|
self.assertEqual(S('command', 'j', 'foo').jump_target(), 'foo')
|
|
|
self.assertRaises(Exception, S('command', 'foo').jump_target)
|
|
self.assertRaises(Exception, S('command', 'foo').jump_target)
|
|
|
|
|
+
|
|
|
|
|
+ def test_read(self):
|
|
|
|
|
+ self.assertEqual(self.block.read(), S('command', 'foo'))
|
|
|
|
|
+ self.assertEqual(self.block.read(), S('command', 'bar'))
|
|
|
|
|
+ self.assertEqual(self.block.read(), S('command', 'baz'))
|
|
|
|
|
+
|
|
|
|
|
+ def test_end(self):
|
|
|
|
|
+ self.assertFalse(self.block.end())
|
|
|
|
|
+ self.block.read()
|
|
|
|
|
+ self.block.read()
|
|
|
|
|
+ self.block.read()
|
|
|
|
|
+ self.assertTrue(self.block.end())
|
|
|
|
|
+
|
|
|
|
|
+ def test_peek(self):
|
|
|
|
|
+ self.assertEqual(self.block.peek(), S('command', 'foo'))
|
|
|
|
|
+ self.assertEqual(self.block.peek(2), [S('command', 'foo'), \
|
|
|
|
|
+ S('command', 'bar')])
|
|
|
|
|
+ self.block.read()
|
|
|
|
|
+ self.assertEqual(self.block.peek(), S('command', 'bar'))
|
|
|
|
|
+
|
|
|
|
|
+ def test_replace(self):
|
|
|
|
|
+ self.block.replace(1, [S('command', 'foobar')])
|
|
|
|
|
+ self.assertEqual(self.block.pointer, 1)
|
|
|
|
|
+ self.assertEqual(self.block.statements, [S('command', 'foobar'), \
|
|
|
|
|
+ S('command', 'bar'), \
|
|
|
|
|
+ S('command', 'baz')])
|