File: test_string_mers.py

package info (click to toggle)
jellyfish 2.2.10-2
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 3,320 kB
  • sloc: cpp: 35,615; sh: 963; ruby: 578; makefile: 372; python: 165; perl: 36
file content (43 lines) | stat: -rw-r--r-- 1,327 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
import unittest
import sys
import random

import dna_jellyfish as jf

class TestStringMers(unittest.TestCase):
    def setUp(self):
        bases = "ACGTacgt"
        self.str = ''.join(random.choice(bases) for _ in range(1000))
        self.k = random.randint(10, 110)
        jf.MerDNA.k(self.k)

    def test_all_mers(self):
        count = 0
        good1 = True
        good2 = True
        mers = jf.string_mers(self.str)
        for m in mers:
            m2 = jf.MerDNA(self.str[count:count+self.k])
            good1 = good1 and m == m2
            good2 = good2 and self.str[count:count+self.k].upper() == str(m2)
            count += 1
        self.assertTrue(good1)
        self.assertTrue(good2)
        self.assertEqual(len(self.str) - self.k + 1, count)

    def test_canonical_mers(self):
        good = True
        mers = jf.string_canonicals(self.str)
        for count, m in enumerate(mers):
            m2 = jf.MerDNA(self.str[count:count+self.k])
            rm2 = m2.get_reverse_complement()
            good = good and (m == m2 or m == rm2)
            good = good and (not (m > m2)) and (not (m > rm2))
            # count += 1
        self.assertTrue(good)
        self.assertEqual(len(self.str) - self.k + 0, count)
        

if __name__ == '__main__':
    data = sys.argv.pop(1)
    unittest.main()