This repository has been archived by the owner on Nov 9, 2023. It is now read-only.
/
test_hamming.py
executable file
·120 lines (92 loc) · 3.79 KB
/
test_hamming.py
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
#!/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.9.1"
__maintainer__ = "Justin Kuczynski"
__email__ = "justinak@gmail.com"
from unittest 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()