Switch to side-by-side view

--- a
+++ b/tests/test_barcodeFileParser.py
@@ -0,0 +1,131 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+import unittest
+import itertools
+import singlecellmultiomics.barcodeFileParser.barcodeFileParser as barcodeFileParser
+import pkg_resources
+
+"""
+These tests check if the barcode file parser is working correctly
+"""
+
+class TestBarcodeParser(unittest.TestCase):
+
+    def test_insert(self):
+
+        b = barcodeFileParser.BarcodeParser()
+
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='AAA',
+            index='TEST1')
+
+
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAA','test')
+        self.assertEqual(index,'TEST1')
+        self.assertEqual(barcode,'AAA')
+        self.assertEqual(hd,0)
+
+    def test_hamming_expansion(self):
+
+        b = barcodeFileParser.BarcodeParser()
+        b.addBarcode( barcodeFileAlias = 'test', barcode='AAA', index='TEST1')
+        b.expand(1,'test')
+        # Postive examples:
+        for positive in ['AAT','CAA','AGA','TAA']:
+            index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance(positive,'test')
+            self.assertEqual(index,'TEST1')
+            self.assertEqual(barcode,'AAA')
+            self.assertEqual(hd,1)
+
+        #Negative examples
+        for negative in ['TAT','CCA','GGA','TCA']:
+            index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance(negative,'test')
+            self.assertNotEqual(barcode,'AAA')
+
+    def test_hamming_expansion(self):
+
+        b = barcodeFileParser.BarcodeParser()
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='AAA',
+            index='TEST1')
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='AAT',
+            index='TEST2')
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='TTT',
+            index='TEST3')
+
+        b.expand(2,'test')
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('CTC','test')
+        self.assertEqual(index,'TEST3')
+        self.assertEqual(barcode,'TTT')
+        self.assertEqual(hd,2)
+
+
+    def test_hamming_expansion_collisions(self):
+
+        b = barcodeFileParser.BarcodeParser()
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='AAA',
+            index='TEST1')
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='AAT',
+            index='TEST2')
+        b.addBarcode(
+            barcodeFileAlias = 'test',
+            barcode='TTT',
+            index='TEST3')
+
+        b.expand(2,'test')
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAG','test')
+        self.assertIsNone(index)
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAG','test')
+        self.assertIsNone(index)
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('TCA','test')
+        self.assertIsNone(index)
+
+
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('AAA','test')
+        self.assertEqual(index,'TEST1')
+        self.assertEqual(barcode,'AAA')
+        self.assertEqual(hd,0)
+
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('TAA','test')
+        self.assertEqual(index,'TEST1')
+        self.assertEqual(barcode,'AAA')
+        self.assertEqual(hd,1)
+
+
+    def lazy_load_case(self, lazyloadsetting):
+        b = barcodeFileParser.BarcodeParser(pkg_resources.resource_filename(
+            'singlecellmultiomics',
+            'modularDemultiplexer/barcodes/'), lazyLoad = lazyloadsetting,hammingDistanceExpansion=1)
+
+
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('GAATCTCG','celseq1')
+        self.assertEqual(index,49)
+        self.assertEqual(barcode,'GAATCTCG')
+        self.assertEqual(hd,0)
+
+        # Test lazy loading of hamming expansion:
+        index, barcode, hd = b.getIndexCorrectedBarcodeAndHammingDistance('GTGCTATC','celseq1')
+        self.assertEqual(index,95)
+        self.assertEqual(barcode,'GTGCAATC')
+        self.assertEqual(hd,1)
+
+
+    def test_lazy_load(self):
+        print('lazyLoad all:')
+        self.lazy_load_case(lazyloadsetting='*')
+        #print('lazyLoad single:')
+        #self.lazy_load_case(lazyloadsetting=('celseq1',))
+
+
+if __name__ == '__main__':
+    unittest.main()