File: codon_tables_test.go

package info (click to toggle)
golang-github-shenwei356-bio 0.13.3-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 852 kB
  • sloc: perl: 114; sh: 58; makefile: 21
file content (152 lines) | stat: -rw-r--r-- 5,383 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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
package seq

import (
	"regexp"
	"testing"
)

type codonTableTest struct {
	table int
	nt    string
	aa    string
	frame int
	trim  bool
	clean bool

	allowUnknownCodon bool
	markInitCodonAsM  bool
}

var codonTableTests []codonTableTest

func init() {
	re := regexp.MustCompile(`\r?\n|\s`)
	codonTableTests = make([]codonTableTest, 0, 10)

	// https://www.ncbi.nlm.nih.gov/nuccore/AB021961.1
	codonTableTests = append(codonTableTests,
		codonTableTest{
			table: 1,
			nt: re.ReplaceAllString(`atgactgccatggaggagtcacagtcggatatcagcctcgagctccctctgagccaggag
acattttcaggcttatggaaactacttcctccagaagatatcctgccatcacctcactgc
atggacgatctgttgctgccccaggatgttgaggagttttttgaaggcccaagtgaagcc
ctccgagtgtcaggagctcctgcagcacaggaccctgtcaccgagacccctgggccagtg
gcccctgccccagccactccatggcccctgtcatcttttgtcccttctcaaaaaacttac
cagggcaactatggcttccacctgggcttcctgcagtctgggacagccaagtctgttatg
tgcacgtactctcctcccctcaataagctattctgccagctggcgaagacgtgccctgtg
cagttgtgggtcagcgccacacctccagctgggagccgtgtccgcgccatggccatctac
aagaagtcacagcacatgacggaggtcgtgagacgctgcccccaccatgagcgctgctcc
gatggtgatggcctggctcctccccagcatcgtatccgggtggaaggaaatttgtatccc
gagtatctggaagacaggcagacttttcgccacagcgtggtggtaccttatgagccaccc
gaggccggctctgagtataccaccatccactacaagtacatgtgtaatagctcctgcatg
gggggcatgaaccgccgacctatccttaccatcatcacactggaagactccagtgggaac
cttctgggacgggacagctttgaggttcgtgtttgtgcctgccctgggagagaccgccgt
acagaagaagaaaatttccgcaaaaaggaagtcctttgccctgaactgcccccagggagc
gcaaagagagcgctgcccacctgcacaagcgcctctcccccgcaaaagaaaaaaccactt
gatggagagtatttcaccctcaagatccgcgggcgtaaacgcttcgagatgttccgggag
ctgaatgaggccttagagttaaaggatgcccatgctacagaggagtctggagacagcagg
gctcactccagctacctgaagaccaagaagggccagtctacttcccgccataaaaaaaca
atggtcaagaaagtggggcctgactcagactga`, ""),
			aa: re.ReplaceAllString(`MTAMEESQSDISLELPLSQETFSGLWKLLPPEDILPSPHCMDDL
LLPQDVEEFFEGPSEALRVSGAPAAQDPVTETPGPVAPAPATPWPLSSFVPSQKTYQG
NYGFHLGFLQSGTAKSVMCTYSPPLNKLFCQLAKTCPVQLWVSATPPAGSRVRAMAIY
KKSQHMTEVVRRCPHHERCSDGDGLAPPQHRIRVEGNLYPEYLEDRQTFRHSVVVPYE
PPEAGSEYTTIHYKYMCNSSCMGGMNRRPILTIITLEDSSGNLLGRDSFEVRVCACPG
RDRRTEEENFRKKEVLCPELPPGSAKRALPTCTSASPPQKKKPLDGEYFTLKIRGRKR
FEMFRELNEALELKDAHATEESGDSRAHSSYLKTKKGQSTSRHKKTMVKKVGPDSD`, ""),
			frame: 1,
			trim:  true,
			clean: false,
		})

	// ORF25 from https://www.ncbi.nlm.nih.gov/nuccore/AJ245616.1
	codonTableTests = append(codonTableTests,
		codonTableTest{
			table: 11,
			nt: re.ReplaceAllString(`atggaggaacaagcatggcgagaagtcctcgaacgtttagctcga
attgaaacaaagttagataactatgaaacagttcgagataaagcagaacgagcgctccta
atagctcaatcaaatgcgaaacttatagaaaaaatggaagctaataataagtgggcttgg
ggctttatgcttactcttgccgtaactgttattggttatttattcactaaaattagattc
tga`, ""),
			aa: re.ReplaceAllString(`MEEQAWREVLERLARIETKLDNYETVRDKAERALLIAQSNAKLI
EKMEANNKWAWGFMLTLAVTVIGYLFTKIRF`, ""),
			frame: 1,
			trim:  true,
			clean: false,
		})

	codonTableTests = append(codonTableTests,
		codonTableTest{
			table: 11,
			nt: re.ReplaceAllString(`tcagaatctaattttagtgaataaataaccaataacagttacggcaagagtaagcataaa
gccccaagcccacttattattagcttccattttttctataagtttcgcatttgattgagc
tattaggagcgctcgttctgctttatctcgaactgtttcatagttatctaactttgtttc
aattcgagctaaacgttcgaggacttctcgccatgcttgttcctccat`, ""),
			aa: re.ReplaceAllString(`MEEQAWREVLERLARIETKLDNYETVRDKAERALLIAQSNAKLI
EKMEANNKWAWGFMLTLAVTVIGYLFTKIRF`, ""),
			frame: -1,
			trim:  true,
			clean: false,
		})

	codonTableTests = append(codonTableTests,
		codonTableTest{
			table: 11,
			nt: re.ReplaceAllString(`tcagaatctaattttagtgaataaataaccaataacagttacggcaagagtaagcataaa
gccccaagcccacttattattagcttccattttttctataagtttcgcatttgattgagc
tattaggagcgctcgttctgctttatctcgaactgtttcatagttatctaactttgtttc
aattcgagctaaacgttcgaggacttctcgccatgcttgttcctccatc`, ""),
			aa: re.ReplaceAllString(`MEEQAWREVLERLARIETKLDNYETVRDKAERALLIAQSNAKLI
EKMEANNKWAWGFMLTLAVTVIGYLFTKIRF`, ""),
			frame: -2,
			trim:  true,
			clean: false,
		})

	codonTableTests = append(codonTableTests,
		codonTableTest{
			table: 11,
			nt: re.ReplaceAllString(`tcagaatctaattttagtgaataaataaccaataacagttacggcaagagtaagcataaa
gccccaagcccacttattattagcttccattttttctataagtttcgcatttgattgagc
tattaggagcgctcgttctgctttatctcgaactgtttcatagttatctaactttgtttc
aattcgagctaaacgttcgaggacttctcgccatgcttgttcctccatcc`, ""),
			aa: re.ReplaceAllString(`MEEQAWREVLERLARIETKLDNYETVRDKAERALLIAQSNAKLI
EKMEANNKWAWGFMLTLAVTVIGYLFTKIRF`, ""),
			frame: -3,
			trim:  true,
			clean: false,
		})

	codonTableTests = append(codonTableTests,
		codonTableTest{
			table: 11,
			nt: re.ReplaceAllString(`atNgaggaacaagcatggcgagaagtcctcgaacgtttagctcga
attgaaacaaagttagataactatgaaacagttcgagataaagcagaacgagcgctccta
atagctcaatcaaatgcgaaacttatagaaaaaatggaagctaataataagtgggcttgg
ggctttatgcttactcttgccgtaactgttattggttatttattcactaaaattagattc
tga`, ""),
			aa: re.ReplaceAllString(`XEEQAWREVLERLARIETKLDNYETVRDKAERALLIAQSNAKLI
EKMEANNKWAWGFMLTLAVTVIGYLFTKIRF*`, ""),
			frame:             1,
			trim:              false,
			clean:             false,
			allowUnknownCodon: true,
		})
}

func TestCodonTableStranslation(t *testing.T) {
	var aa []byte
	var err error
	for i, test := range codonTableTests {
		aa, err = CodonTables[test.table].Translate([]byte(test.nt), test.frame, test.trim, test.clean, test.allowUnknownCodon, test.markInitCodonAsM)
		if err != nil {
			t.Errorf("test %d err: %s", i, err)
		}
		if len(aa) != len(test.aa) {
			t.Errorf("test %d err: len unequal, answer: %d, result: %d", i, len(aa), len(test.aa))
		}
		if string(aa) != test.aa {
			t.Errorf("test %d err: result not right", i)
		}
	}
}