File: test_hamming.py

package info (click to toggle)
qiime 1.4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 29,704 kB
  • sloc: python: 77,837; haskell: 379; sh: 113; makefile: 103
file content (121 lines) | stat: -rwxr-xr-x 3,872 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#!/usr/bin/env python
# test_hamming.py
"""
Tests for standalone Hamming decoding function

Author: Micah Hamady (hamady@colorado.edu)

"""
__author__ = "Micah Hamady"
__copyright__ = "Copyright 2011, The QIIME Project" #consider project name
__credits__ = ["Micah Hamady", "Rob Knight"] #remember to add yourself
__license__ = "GPL"
__version__ = "1.4.0"
__maintainer__ = "Justin Kuczynski"
__email__ = "justinak@gmail.com"
__status__ = "Release"

from cogent.util.unit_test import TestCase, main
from qiime.hamming import decode_barcode_8

class GeneralSetUp(TestCase):

    def setUp(self):
        """General Setup"""

        # valid code words
        self.valid_bc_1 = "AACCATGC"
        self.valid_bc_2 = "TCGTAGCA"
        self.valid_bc_3 = "ACACCTCT"
        self.valid_bc_4 = "CTTCCTAG"
        self.valid_bc_5 = "GGTAGCTT"
   
        # single error reference 
        self.single_error_ref = "AACCATGC"

        # A->C
        self.single_error_1 =   "ACCCATGC"
        
        # A->G
        self.single_error_2 =   "AACCGTGC"   

        # C->A
        self.single_error_3 =   "AAACATGC"   

        # C->T
        self.single_error_4 =   "AACCATGT"   
        
        # T->C
        self.single_error_5 =   "AACCACGC"   
        
        # T->G
        self.single_error_6 =   "AACCAGGC"   

        # G->T
        self.single_error_7 =   "AACCATTC"   

        # G->A
        self.single_error_8 =   "AACCATAC"   

        # double error reference 
        self.double_error_ref = "AACCATGC"

        # A->T  
        self.double_error_1 =   "ATCCATGC"

        # T->A
        self.double_error_2 =   "AACCAAGC"

        # C->G
        self.double_error_3 =   "AACGATGC"

        #aG->C 
        self.double_error_4 =   "AACCATCC" 
 


class StandaloneHammingTests(GeneralSetUp):
    """Tests for the standalone_hamming functions""" 
    
    def test_decode_barcode_8_ok(self):
        """ Should decode valid codewords w/o error  """
        self.assertEqual(decode_barcode_8(self.valid_bc_1), \
            (self.valid_bc_1, 0)) 
        self.assertEqual(decode_barcode_8(self.valid_bc_2), \
            (self.valid_bc_2, 0)) 
        self.assertEqual(decode_barcode_8(self.valid_bc_3), \
            (self.valid_bc_3, 0)) 
        self.assertEqual(decode_barcode_8(self.valid_bc_4), \
            (self.valid_bc_4, 0)) 
        self.assertEqual(decode_barcode_8(self.valid_bc_5), \
            (self.valid_bc_5, 0)) 

    def test_decode_barcode_8_one_error(self):
        """ Should correct single bit errors w/o error """ 
        self.assertEqual(decode_barcode_8(self.single_error_1), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_2), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_3), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_4), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_5), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_6), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_7), \
            (self.single_error_ref, 0.5)) 
        self.assertEqual(decode_barcode_8(self.single_error_8), \
            (self.single_error_ref, 0.5)) 

 
    def test_decode_barcode_8_two_error(self):
        """ Should raise error when double error detected """ 
        self.assertEqual(decode_barcode_8(self.double_error_1), (None, 1))
        self.assertEqual(decode_barcode_8(self.double_error_1), (None, 1))
        self.assertEqual(decode_barcode_8(self.double_error_1), (None, 1))
        self.assertEqual(decode_barcode_8(self.double_error_1), (None, 1))

if __name__ == '__main__':
    main()