Mercurial > lcfOS
view test/testgraph.py @ 326:2fa27c44e3c9
Changed hasbang
author | Windel Bouwman |
---|---|
date | Sat, 01 Feb 2014 16:54:33 +0100 |
parents | e9fe6988497c |
children | b00219172a42 |
line wrap: on
line source
#!/usr/bin/python import unittest from ppci.codegen.graph import Graph, Node, DiGraph, DiNode from ppci.codegen.interferencegraph import InterferenceGraph from ppci.codegen.flowgraph import FlowGraph from ppci import ir from ppci.irmach import AbstractInstruction as AI from target import Nop class GraphTestCase(unittest.TestCase): def testEdge(self): g = Graph() n1 = Node(g) g.addNode(n1) n2 = Node(g) g.addNode(n2) g.addEdge(n1, n2) self.assertTrue(g.hasEdge(n2, n1)) self.assertTrue(g.hasEdge(n1, n2)) g.delNode(n1) g.delNode(n2) def testDegree(self): g = Graph() n1 = Node(g) g.addNode(n1) n2 = Node(g) g.addNode(n2) n3 = Node(g) g.addNode(n3) g.addEdge(n1, n2) g.addEdge(n1, n3) self.assertEqual(2, n1.Degree) self.assertEqual(1, n2.Degree) g.delNode(n2) self.assertEqual(1, n1.Degree) class DigraphTestCase(unittest.TestCase): def testSuccessor(self): g = DiGraph() a = DiNode(g) b = DiNode(g) c = DiNode(g) g.addNode(a) g.addNode(b) g.addNode(c) g.addEdge(a, b) g.addEdge(b, c) self.assertEqual({b}, a.Succ) self.assertEqual({b}, c.Pred) g.delNode(c) self.assertEqual(set(), b.Succ) class InterferenceGraphTestCase(unittest.TestCase): def testNormalUse(self): t1 = ir.Temp('t1') t2 = ir.Temp('t2') t3 = ir.Temp('t3') t4 = ir.Temp('t4') t5 = ir.Temp('t5') t6 = ir.Temp('t6') instrs = [] instrs.append(AI(Nop, dst=[t1])) instrs.append(AI(Nop, dst=[t2])) instrs.append(AI(Nop, dst=[t3])) cfg = FlowGraph(instrs) ig = InterferenceGraph(cfg) def testCombine(self): t1 = ir.Temp('t1') t2 = ir.Temp('t2') t3 = ir.Temp('t3') t4 = ir.Temp('t4') instrs = [] instrs.append(AI(Nop, dst=[t1])) instrs.append(AI(Nop, dst=[t2])) instrs.append(AI(Nop, dst=[t3])) instrs.append(AI(Nop, dst=[t4], src=[t3])) instrs.append(AI(Nop, src=[t4])) instrs.append(AI(Nop, src=[t1])) instrs.append(AI(Nop, src=[t2])) cfg = FlowGraph(instrs) ig = InterferenceGraph(cfg) ig.Combine(ig.getNode(t4), ig.getNode(t3)) self.assertIs(ig.getNode(t4), ig.getNode(t3)) if __name__ == '__main__': unittest.main()