File: test_py_kmer_api.py

package info (click to toggle)
kmc 3.2.1%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 4,132 kB
  • sloc: cpp: 39,219; python: 372; perl: 179; makefile: 157; sh: 34
file content (89 lines) | stat: -rw-r--r-- 2,900 bytes parent folder | download | duplicates (3)
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
#!/usr/bin/env python3
'''
A series of test for KmerAPI class.
'''
import sys
import os
import kmer_utils
import init_sys_path
import py_kmc_api as pka

def _py_kmer_api_from_string(kmer_str):
    kmer = pka.KmerAPI(len(kmer_str))
    kmer.from_string(kmer_str)
    return kmer

def test_kmer_from_string_to_string():
    ''' Tests if KmerAPI object is created correctly from
     string and then converted back to string. '''
    kmers = ('A', 'C', 'GT', 'TGC', 'ACGGTTAGG',
             'GCATCATGCAGTCTGAGCAACGTATGCTGAGCTGATGCTGACACTGATGCAAC')
    for kmer_str in kmers:
        kmer = _py_kmer_api_from_string(kmer_str)
        assert kmer_str == str(kmer)
        assert kmer_str == kmer.to_string()


def test_kmer_lt():
    ''' Tests if operator< (__lt__) works correctly. '''
    kmer1_str = 'ACGACGACG'
    kmer2_str = 'ACGACGACT'
    kmer1 = _py_kmer_api_from_string(kmer1_str)
    kmer2 = _py_kmer_api_from_string(kmer2_str)
    assert kmer1 < kmer2
    assert not kmer1 == kmer2
    assert not kmer2 < kmer1

def test_kmer_eq():
    ''' Tests if operator== (__eq__) works correctly. '''
    kmer_str = 'ACGACGACG'
    kmer1 = _py_kmer_api_from_string(kmer_str)
    kmer2 = _py_kmer_api_from_string(kmer_str)
    assert kmer1 == kmer2
    assert not kmer1 < kmer2
    assert not kmer2 < kmer1


def test_ascii_symbol():
    ''' Tests if ascii symbol of k-mer is correctly returned by ascii_symbol method. '''
    kmers = ('A', 'C', 'GT', 'TGC', 'ACGGTTAGG',
             'GCATCATGCAGTCTGAGCAACGTATGCTGAGCTGATGCTGACACTGATGCAAC')
    for kmer_str in kmers:
        kmer = _py_kmer_api_from_string(kmer_str)
        for i in range(len(kmer_str)):
            assert kmer.get_asci_symbol(i) == kmer_str[i]

def test_get_num_symbol():
    ''' Tests if get_num_bybol ('A' -> 0, 'C' -> 1, 'G' -> 2, 'T' -> 3) works correctly. '''
    kmers = ('A', 'C', 'GT', 'TGC', 'ACGGTTAGG',
             'GCATCATGCAGTCTGAGCAACGTATGCTGAGCTGATGCTGACACTGATGCAAC')
    mapping = {
        'A': 0,
        'C': 1,
        'G': 2,
        'T': 3,
    }
    for kmer_str in kmers:
        kmer = _py_kmer_api_from_string(kmer_str)
        for i in range(len(kmer_str)):
            assert kmer.get_num_symbol(i) == mapping[kmer_str[i]]


def test_reverse():
    ''' Tests if conversion of k-mer to its reverse complement works correctly. '''
    kmer_str = 'AAAAACGAAATTTA'
    kmer = _py_kmer_api_from_string(kmer_str)
    kmer.reverse()
    kmer_str_rev = str(kmer)
    assert kmer_str_rev == 'TAAATTTCGTTTTT'

def test_get_signature():
    ''' Test if valid signature is returned for k-mer. '''
    kmer_str = 'ACGGATGCAGTGCTAGCGGTGGCC'
    kmer = _py_kmer_api_from_string(kmer_str)
    sig = kmer.get_signature(7)
    assert sig == 1436
    kmer_str = 'AAAAAAAAAAAAAAAAGC'
    kmer = _py_kmer_api_from_string(kmer_str)
    for sig_len in (5, 11):
        assert kmer.get_signature(sig_len) == (1 << (2*sig_len))