def testDeletion( self ):
        '''test single deletion.'''
        
        for l in range(1,7):
            for x in range(0,len(self.seq)):
                s = list(self.seq)
                todelete = min(l, self.length - x )
                for y in range(x,x+todelete): s[y] = ""
                ncodons = self.ncodons - todelete // 3
                i = list(snp2counts.iterateOverFrames( s ))

                codon_start = (x // 3) * 3
                codon_end = min(self.length, x + l + (3 - (x + l) % 3) % 3)

                result = []
                if codon_start > 0: result.append( [True, 0, codon_start] )

                if todelete % 3 == 0:
                    if x % 3 != 0:
                        result.append( [False, codon_start, codon_end] )
                        if codon_end < self.length: result.append( [True, codon_end, self.length] )
                    else:
                        result.append( [True, codon_start, self.length] )
                else:
                    o = codon_start
                    if todelete > 3 and x % 3 == 0:
                        o = codon_start + (todelete // 3) * 3
                        result.append( [True, codon_start, o] )
                        
                    result.append( [False, o, codon_end ] )
                    result.append( [False, codon_end, self.length ] )

                result = self.merge( result )
                
                self.assertEqual( i, result )
    def testInsertion( self ):
        '''test single insertion.'''
        
        for l in range(1,7):
            for x in range(len(self.seq)):
                s = list(self.seq)
                s[x] = "A"*l + s[x]
                i = list(snp2counts.iterateOverFrames( s ))
                result = []

                codon_start = (x // 3) * 3
                
                if codon_start > 0: result.append( [True, 0, codon_start] )

                if l % 3 == 0:
                    result.append( [True, 0, self.length ] )
                else:
                    result.append( [False, codon_start, self.length ] )

                result = self.merge( result )
                
                self.assertEqual( i, result )
    def testDeletion(self):
        '''test single deletion.'''

        for l in range(1, 7):
            for x in range(0, len(self.seq)):
                s = list(self.seq)
                todelete = min(l, self.length - x)
                for y in range(x, x + todelete):
                    s[y] = ""
                ncodons = self.ncodons - todelete // 3
                i = list(snp2counts.iterateOverFrames(s))

                codon_start = (x // 3) * 3
                codon_end = min(self.length, x + l + (3 - (x + l) % 3) % 3)

                result = []
                if codon_start > 0:
                    result.append([True, 0, codon_start])

                if todelete % 3 == 0:
                    if x % 3 != 0:
                        result.append([False, codon_start, codon_end])
                        if codon_end < self.length:
                            result.append([True, codon_end, self.length])
                    else:
                        result.append([True, codon_start, self.length])
                else:
                    o = codon_start
                    if todelete > 3 and x % 3 == 0:
                        o = codon_start + (todelete // 3) * 3
                        result.append([True, codon_start, o])

                    result.append([False, o, codon_end])
                    result.append([False, codon_end, self.length])

                result = self.merge(result)

                self.assertEqual(i, result)
    def testInsertion(self):
        '''test single insertion.'''

        for l in range(1, 7):
            for x in range(len(self.seq)):
                s = list(self.seq)
                s[x] = "A" * l + s[x]
                i = list(snp2counts.iterateOverFrames(s))
                result = []

                codon_start = (x // 3) * 3

                if codon_start > 0:
                    result.append([True, 0, codon_start])

                if l % 3 == 0:
                    result.append([True, 0, self.length])
                else:
                    result.append([False, codon_start, self.length])

                result = self.merge(result)

                self.assertEqual(i, result)