Switch to unified view

a b/tests/test_barcodeFileParser.py
1
#!/usr/bin/env python3
2
# -*- coding: utf-8 -*-
3
import unittest
4
import itertools
5
import singlecellmultiomics.barcodeFileParser.barcodeFileParser as barcodeFileParser
6
import pkg_resources
7
8
"""
9
These tests check if the barcode file parser is working correctly
10
"""
11
12
class TestBarcodeParser(unittest.TestCase):
13
14
    def test_insert(self):
15
16
        b = barcodeFileParser.BarcodeParser()
17
18
        b.addBarcode(
19
            barcodeFileAlias = 'test',
20
            barcode='AAA',
21
            index='TEST1')
22
23
24
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAA','test')
25
        self.assertEqual(index,'TEST1')
26
        self.assertEqual(barcode,'AAA')
27
        self.assertEqual(hd,0)
28
29
    def test_hamming_expansion(self):
30
31
        b = barcodeFileParser.BarcodeParser()
32
        b.addBarcode( barcodeFileAlias = 'test', barcode='AAA', index='TEST1')
33
        b.expand(1,'test')
34
        # Postive examples:
35
        for positive in ['AAT','CAA','AGA','TAA']:
36
            index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance(positive,'test')
37
            self.assertEqual(index,'TEST1')
38
            self.assertEqual(barcode,'AAA')
39
            self.assertEqual(hd,1)
40
41
        #Negative examples
42
        for negative in ['TAT','CCA','GGA','TCA']:
43
            index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance(negative,'test')
44
            self.assertNotEqual(barcode,'AAA')
45
46
    def test_hamming_expansion(self):
47
48
        b = barcodeFileParser.BarcodeParser()
49
        b.addBarcode(
50
            barcodeFileAlias = 'test',
51
            barcode='AAA',
52
            index='TEST1')
53
        b.addBarcode(
54
            barcodeFileAlias = 'test',
55
            barcode='AAT',
56
            index='TEST2')
57
        b.addBarcode(
58
            barcodeFileAlias = 'test',
59
            barcode='TTT',
60
            index='TEST3')
61
62
        b.expand(2,'test')
63
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('CTC','test')
64
        self.assertEqual(index,'TEST3')
65
        self.assertEqual(barcode,'TTT')
66
        self.assertEqual(hd,2)
67
68
69
    def test_hamming_expansion_collisions(self):
70
71
        b = barcodeFileParser.BarcodeParser()
72
        b.addBarcode(
73
            barcodeFileAlias = 'test',
74
            barcode='AAA',
75
            index='TEST1')
76
        b.addBarcode(
77
            barcodeFileAlias = 'test',
78
            barcode='AAT',
79
            index='TEST2')
80
        b.addBarcode(
81
            barcodeFileAlias = 'test',
82
            barcode='TTT',
83
            index='TEST3')
84
85
        b.expand(2,'test')
86
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAG','test')
87
        self.assertIsNone(index)
88
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAG','test')
89
        self.assertIsNone(index)
90
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('TCA','test')
91
        self.assertIsNone(index)
92
93
94
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAA','test')
95
        self.assertEqual(index,'TEST1')
96
        self.assertEqual(barcode,'AAA')
97
        self.assertEqual(hd,0)
98
99
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('TAA','test')
100
        self.assertEqual(index,'TEST1')
101
        self.assertEqual(barcode,'AAA')
102
        self.assertEqual(hd,1)
103
104
105
    def lazy_load_case(self, lazyloadsetting):
106
        b = barcodeFileParser.BarcodeParser(pkg_resources.resource_filename(
107
            'singlecellmultiomics',
108
            'modularDemultiplexer/barcodes/'), lazyLoad = lazyloadsetting,hammingDistanceExpansion=1)
109
110
111
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('GAATCTCG','celseq1')
112
        self.assertEqual(index,49)
113
        self.assertEqual(barcode,'GAATCTCG')
114
        self.assertEqual(hd,0)
115
116
        # Test lazy loading of hamming expansion:
117
        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('GTGCTATC','celseq1')
118
        self.assertEqual(index,95)
119
        self.assertEqual(barcode,'GTGCAATC')
120
        self.assertEqual(hd,1)
121
122
123
    def test_lazy_load(self):
124
        print('lazyLoad all:')
125
        self.lazy_load_case(lazyloadsetting='*')
126
        #print('lazyLoad single:')
127
        #self.lazy_load_case(lazyloadsetting=('celseq1',))
128
129
130
if __name__ == '__main__':
131
    unittest.main()