コード例 #1
0
class DNAHistoryGraphTest(unittest.TestCase):
    """Tests the DNA history graph functions, particularly the acyclicity functions
    """
    
    def setUp(self):
        unittest.TestCase.setUp(self)
        self.g = DNAHistoryGraph()
        self.s1 = self.g.newSegment("A")
        self.s2 = self.g.newSegment("T")
        self.s3 = self.g.newSegment("T")
        self.s4 = self.g.newSegment("A")
        self.s5 = self.g.newSegment("A")
        self.g.createBranch(self.s1, self.s2)
        self.g.createBranch(self.s1, self.s3)
        self.g.createBranch(self.s3, self.s4)
        self.g.createBranch(self.s3, self.s5)
        
        self.s1b = self.g.newSegment("A")
        self.s2b = self.g.newSegment("A")
        self.s3b = self.g.newSegment()
        self.s4b = self.g.newSegment("T")
        self.s5b = self.g.newSegment("T")
        self.g.createBranch(self.s1b, self.s2b)
        self.g.createBranch(self.s1b, self.s3b)
        self.g.createBranch(self.s3b, self.s4b)
        self.g.createBranch(self.s3b, self.s5b)
    
    def tearDown(self):
        unittest.TestCase.tearDown(self)
        
    def testInterpolateSegment(self):
        #Test case where segment is root
        self.assertEqual(self.s1.parent, None)
        s6 = self.g.interpolateSegment(self.s1)
        self.assertEqual(self.s1.parent, s6)
        self.assertEqual(s6.children, set([ self.s1 ]))
        #Test case where segment is not root
        self.assertEqual(self.s2.parent, self.s1)
        self.assertEqual(self.s1.children, set([ self.s2, self.s3 ]))
        s6 = self.g.interpolateSegment(self.s2)
        self.assertEqual(self.s2.parent, s6)
        self.assertEqual(s6.children, set([ self.s2 ]))
        self.assertEqual(self.s1.children, set([ s6, self.s3 ]))
    
    def testPullDown(self):
        s6 = self.g.pullDown(self.s1, [ self.s2, self.s3 ])
        self.assertEqual(s6.parent, self.s1)
        self.assertEqual(self.s1.children, set([ s6 ]))
        self.assertEqual(s6.children, set([self.s2, self.s3 ]))
        self.assertEqual(s6, self.s2.parent)
        self.assertEqual(s6, self.s3.parent)
        
    def testCreateBond(self):
        self.g.createBond(self.s1.left, self.s1b.left)
        self.assertEquals(self.s1.left.bond, self.s1b.left)
        self.assertEquals(self.s1b.left.bond, self.s1.left)
        
        self.g.createBond(self.s3.left, self.s4b.left) 
        self.assertEquals(self.s3.left.bond, self.s4b.left)
        self.assertEquals(self.s4b.left.bond, self.s3.left)
        
        try: #Try to make bond that violates acyclicity 
            self.g.createBond(self.s4.left, self.s3b.left) 
            self.assertTrue(False)
        except RuntimeError:
            pass
    
    def testDeleteBond(self):
        self.g.createBond(self.s1.left, self.s1b.left)
        self.g.createBond(self.s2.left, self.s2b.left)
        self.g.createBond(self.s3.left, self.s3b.left)
        self.g.createBond(self.s4.left, self.s4b.left)
        self.g.createBond(self.s5.left, self.s5b.left)
        
        self.assertEquals(self.s3.left.bond, self.s3b.left)
        self.assertEquals(self.s3b.left.bond, self.s3.left)
        self.g.deleteBond(self.s3.left)
        self.assertEquals(self.s3.left.bond, None)
        self.assertEquals(self.s3b.left.bond, None)
        
        self.g.deleteBond(self.s4.left)
        self.g.deleteBond(self.s5.left)
        
        self.g.createBond(self.s4.left, self.s3b.left)
        self.assertEquals(self.s4.left.bond, self.s3b.left)
        self.assertEquals(self.s3b.left.bond, self.s4.left)
        
        self.g.deleteBond(self.s4.left)
        self.g.createBond(self.s3.left, self.s4b.left) 
        self.assertEquals(self.s3.left.bond, self.s4b.left)
        self.assertEquals(self.s4b.left.bond, self.s3.left)
    
    def testAreSiblings(self):
        pass
    
    def testSubstitutionAmbiguity(self):
        self.assertEquals(self.g.substitutionAmbiguity(), 3)
    
    def testRearrangementAmbiguity(self):
        pass
    
    def testAmbiguity(self):
        pass
    
    def testLowerBoundSubstitutionCost(self):
        self.assertEquals(self.g.lowerBoundSubstitutionCost(), 3)
    
    def testUpperBoundSubstitutionCost(self):
        self.assertEquals(self.g.upperBoundSubstitutionCost(), 6)