Exemple #1
0
 def testEmpty(self):
     function = FunctionDecl(void_type, 'f', [], Block([]))
     cfg = CFG('f')
     cfg.connect(cfg.entry, cfg.exit)
     function.cfg = cfg
     program = Program([function])
     linearise = self.assertSuccess(program)
     self.assertEquals(
         linearise.lines,
         [Label('f', public=True),
          Label('f$exit', public=True)])
Exemple #2
0
 def testOneStatement(self):
     function = FunctionDecl(void_type, 'f', [], Block([]))
     cfg = CFG('f')
     stmt = cfg.add(Operation(42))
     cfg.connect(cfg.entry, stmt)
     cfg.connect(stmt, cfg.exit)
     function.cfg = cfg
     program = Program([function])
     linearise = self.assertSuccess(program)
     self.assertEquals(linearise.lines, [
         Label('f', public=True),
         Instruction(42),
         Label('f$exit', public=True)
     ])
Exemple #3
0
 def testInfiniteLoop(self):
     function = FunctionDecl(void_type, 'f', [], Block([]))
     cfg = CFG('f')
     node = cfg.add(Operation(42))
     cfg.connect(cfg.entry, node, node)
     function.cfg = cfg
     program = Program([function])
     linearise = self.assertSuccess(program)
     self.assertEquals(linearise.lines, [
         Label('f', public=True),
         Label(2),
         Instruction(42),
         Jump(2),
         Label('f$exit', public=True)
     ])
Exemple #4
0
 def testTest(self):
     function = FunctionDecl(void_type, 'f', [], Block([]))
     cfg = CFG('f')
     test_node = cfg.add(Test(42))
     cfg.connect(cfg.entry, test_node)
     true_node = cfg.add(Operation(100))
     cfg.connect(test_node, TrueEdge(), true_node, cfg.exit)
     false_node = cfg.add(Operation(200))
     cfg.connect(test_node, FalseEdge(), false_node, cfg.exit)
     function.cfg = cfg
     program = Program([function])
     linearise = self.assertSuccess(program)
     self.assertEquals(linearise.lines, [
         Label('f', public=True),
         Branch(42, 3),
         Label(4),
         Instruction(200),
         Jump('f$exit'),
         Label(3),
         Instruction(100),
         Label('f$exit', public=True)
     ])
Exemple #5
0
 def testJump(self):
     lines = [Label('f', public=True), Jump('f')]
     render = self.assertSuccess(lines)
     self.assertEquals(render.lines, ['f::', 'jmp f'])
Exemple #6
0
 def testEmptyFunction(self):
     lines = [Label('f', public=True), Label('f$exit', public=True)]
     render = self.assertSuccess(lines)
     self.assertEquals(render.lines, ['f::', 'f$exit::'])
Exemple #7
0
 def testSingleLine(self):
     lines = [Label('f'), Instruction(42), Label('f$exit')]
     cfg = delinearise(lines)
     self.assertTrue(cfg.has_path(cfg.entry, Operation(42), cfg.exit),
                     msg=cfg)
Exemple #8
0
 def testSimple(self):
     lines = [Label('f'), Label('f$exit')]
     cfg = delinearise(lines)
     self.assertEquals(cfg.entry.name, 'f')
     self.assertEquals(cfg.exit.name, 'f$exit')
     self.assertTrue(cfg.has_path(cfg.entry, cfg.exit))
Exemple #9
0
 def testForwardJump(self):
     lines = [Label('f'), Jump('f2'), Label('f2'), Label('f$exit')]
     cfg = delinearise(lines)
     self.assertTrue(cfg.has_path(cfg.entry, Pass(), cfg.exit), msg=cfg)
Exemple #10
0
 def testJump(self):
     lines = [Label('f'), Jump('f'), Label('f$exit')]
     cfg = delinearise(lines)
     #self.assertTrue(cfg.has_path(cfg.entry, cfg.entry), msg=cfg)
     self.assertFalse(cfg.has_path(cfg.entry, cfg.exit), msg=cfg)