Пример #1
0
    def test_edges_for_call_chain_propagation_divisible(self):
        bcfile = "./examples/divisible.bc"
        c = CallGraph(bcfile).group_independent_calls()

        self.assertEqual(6, len([pair for run in c for pair in run]))

        # This asserts are specifig to the grouping strategy
        # If you change the strategy, you probably have to change this
        self.assertEqual(c[0], [('divby10', 'divby2'), ('divby10', 'divby5'),
                                ('divby30', 'divby3'), ('divby6', 'divby2'),
                                ('divby6', 'divby3')])
        self.assertEqual([('divby30', 'divby10')], c[1])
Пример #2
0
    def test_candidates_for_symbolic_encapsulation_simple(self):
        bcfile = "./examples/divisible.bc"
        c = CallGraph(bcfile).list_symbolic_encapsulable()

        self.assertEqual(len(c), 6)

        self.assertTrue(
            c.index("divby5") < c.index("divby10") < c.index("divby30"))

        self.assertTrue(c.index("divby2") < c.index("divby6"))
        self.assertTrue(c.index("divby3") < c.index("divby6"))
Пример #3
0
    def test_candidates_for_symbolic_encapsulation_simple(self):
        bcfile = "./examples/divisible.bc"
        c = CallGraph(bcfile).list_symbolic_encapsulable()

        self.assertEqual(len(c), 6)

        self.assertTrue(
            c.index("divby5") < c.index("divby10") < c.index("divby30"))

        self.assertTrue(c.index("divby2") < c.index("divby6"))
        self.assertTrue(c.index("divby3") < c.index("divby6"))
Пример #4
0
 def test_candidates_for_symbolic_encapsulation_small(self):
     bcfile = "./examples/small.bc"
     c = CallGraph(bcfile).list_symbolic_encapsulable()
     self.assertEqual(len(c), 3)
     self.assertTrue(c.index("f2") < c.index("f1"))
     self.assertTrue(c.index("f3") < c.index("f1"))
Пример #5
0
    def test_edges_for_call_chain_propagation_factorial(self):
        bcfile = "./examples/factorial.bc"
        c = CallGraph(bcfile).group_independent_calls()

        self.assertEqual(c, [[('fac', 'fac')]])
Пример #6
0
    def test_edges_for_call_chain_propagation_small(self):
        bcfile = "./examples/small.bc"
        c = CallGraph(bcfile).group_independent_calls()

        self.assertEqual(c, [[('f1', 'f2'), ('f1', 'f3')]])
Пример #7
0
    def test_edges_for_call_chain_propagation_circle(self):
        bcfile = "./examples/doomcircle.bc"
        c = CallGraph(bcfile).group_independent_calls()

        self.assertEqual(c, [[('c', 'a')], [('a', 'b')], [('b', 'c')]])
Пример #8
0
 def test_candidates_for_symbolic_encapsulation_small(self):
     bcfile = "./examples/small.bc"
     c = CallGraph(bcfile).list_symbolic_encapsulable()
     self.assertEqual(len(c), 3)
     self.assertTrue(c.index("f2") < c.index("f1"))
     self.assertTrue(c.index("f3") < c.index("f1"))
Пример #9
0
 def test_candidates_for_symbolic_encapsulation_circle(self):
     bcfile = "./examples/doomcircle.bc"
     c = CallGraph(bcfile).list_symbolic_encapsulable()
     self.assertEqual(c, ['a', 'b', 'c'])