1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_MODULE test_alphabet
3 #include <boost/test/unit_test.hpp>
5 #include <boost/archive/text_oarchive.hpp>
6 #include <boost/archive/text_iarchive.hpp>
7 #include <boost/archive/xml_oarchive.hpp>
8 #include <boost/archive/xml_iarchive.hpp>
10 #include "alg/alphabet.hpp"
11 #include "mussa_exceptions.hpp"
13 BOOST_AUTO_TEST_CASE( alphabet_simple )
15 Alphabet a(Alphabet::reduced_dna_alphabet());
16 // exists is case insensitive
17 BOOST_CHECK_EQUAL( a.exists('a'), true);
18 BOOST_CHECK_EQUAL( a.exists('A'), true);
19 BOOST_CHECK_EQUAL( a.exists('Q'), false);
20 BOOST_CHECK_EQUAL( a.exists('q'), false);
22 // copied from alphabet.cpp
23 BOOST_CHECK_EQUAL( Alphabet::reduced_dna_cstr, "AaCcGgTtNn\012\015");
26 BOOST_AUTO_TEST_CASE( alphabet_equality)
28 Alphabet a(Alphabet::reduced_dna_alphabet());
29 BOOST_CHECK_EQUAL( a, Alphabet::reduced_dna_alphabet() );
33 BOOST_AUTO_TEST_CASE( alphabet_rc_invalid )
35 Alphabet a1 = Alphabet::get_alphabet(empty_alphabet);
36 BOOST_CHECK_THROW(a1.get_complement_map(), mussa_error);
38 Alphabet a2 = Alphabet::get_alphabet(protein_alphabet);
39 BOOST_CHECK_THROW(a2.create_complement_map(), mussa_error);
43 BOOST_AUTO_TEST_CASE( alphabet_rc_reduced_dna)
45 Alphabet a = Alphabet::get_alphabet(reduced_dna_alphabet);
47 std::string rc_map = a.get_complement_map();
48 BOOST_CHECK_EQUAL(rc_map['A'], 'T');
49 BOOST_CHECK_EQUAL(rc_map['a'], 't');
50 BOOST_CHECK_EQUAL(rc_map['T'], 'A');
51 BOOST_CHECK_EQUAL(rc_map['t'], 'a');
52 BOOST_CHECK_EQUAL(rc_map['G'], 'C');
53 BOOST_CHECK_EQUAL(rc_map['g'], 'c');
54 BOOST_CHECK_EQUAL(rc_map['C'], 'G');
55 BOOST_CHECK_EQUAL(rc_map['c'], 'g');
56 BOOST_CHECK_EQUAL(rc_map['U'], '~');
57 BOOST_CHECK_EQUAL(rc_map['u'], '~');
58 BOOST_CHECK_EQUAL(rc_map['Q'], '~');
59 BOOST_CHECK_EQUAL(rc_map['*'], '~');
62 BOOST_AUTO_TEST_CASE( alphabet_rc_reduced_rna)
64 Alphabet a = Alphabet::get_alphabet(reduced_rna_alphabet);
66 std::string rc_map = a.get_complement_map();
67 BOOST_CHECK_EQUAL(rc_map['A'], 'U');
68 BOOST_CHECK_EQUAL(rc_map['a'], 'u');
69 BOOST_CHECK_EQUAL(rc_map['G'], 'C');
70 BOOST_CHECK_EQUAL(rc_map['g'], 'c');
71 BOOST_CHECK_EQUAL(rc_map['C'], 'G');
72 BOOST_CHECK_EQUAL(rc_map['c'], 'g');
73 BOOST_CHECK_EQUAL(rc_map['T'], '~');
74 BOOST_CHECK_EQUAL(rc_map['t'], '~');
75 BOOST_CHECK_EQUAL(rc_map['U'], 'A');
76 BOOST_CHECK_EQUAL(rc_map['u'], 'a');
77 BOOST_CHECK_EQUAL(rc_map['Q'], '~');
78 BOOST_CHECK_EQUAL(rc_map['*'], '~');
81 BOOST_AUTO_TEST_CASE( alphabet_rc_dna)
83 Alphabet a = Alphabet::get_alphabet(dna_alphabet);
85 std::string rc_map = a.get_complement_map();
86 BOOST_CHECK_EQUAL(rc_map['A'], 'T');
87 BOOST_CHECK_EQUAL(rc_map['a'], 't');
88 BOOST_CHECK_EQUAL(rc_map['C'], 'G');
89 BOOST_CHECK_EQUAL(rc_map['c'], 'g');
90 BOOST_CHECK_EQUAL(rc_map['G'], 'C');
91 BOOST_CHECK_EQUAL(rc_map['g'], 'c');
92 BOOST_CHECK_EQUAL(rc_map['T'], 'A');
93 BOOST_CHECK_EQUAL(rc_map['t'], 'a');
94 BOOST_CHECK_EQUAL(rc_map['R'], 'Y');
95 BOOST_CHECK_EQUAL(rc_map['r'], 'y');
96 BOOST_CHECK_EQUAL(rc_map['Y'], 'R');
97 BOOST_CHECK_EQUAL(rc_map['y'], 'r');
98 BOOST_CHECK_EQUAL(rc_map['S'], 'S');
99 BOOST_CHECK_EQUAL(rc_map['s'], 's');
100 BOOST_CHECK_EQUAL(rc_map['W'], 'W');
101 BOOST_CHECK_EQUAL(rc_map['w'], 'w');
102 BOOST_CHECK_EQUAL(rc_map['K'], 'M');
103 BOOST_CHECK_EQUAL(rc_map['k'], 'm');
104 BOOST_CHECK_EQUAL(rc_map['M'], 'K');
105 BOOST_CHECK_EQUAL(rc_map['m'], 'k');
106 BOOST_CHECK_EQUAL(rc_map['B'], 'V');
107 BOOST_CHECK_EQUAL(rc_map['b'], 'v');
108 BOOST_CHECK_EQUAL(rc_map['V'], 'B');
109 BOOST_CHECK_EQUAL(rc_map['v'], 'b');
110 BOOST_CHECK_EQUAL(rc_map['D'], 'H');
111 BOOST_CHECK_EQUAL(rc_map['d'], 'h');
112 BOOST_CHECK_EQUAL(rc_map['H'], 'D');
113 BOOST_CHECK_EQUAL(rc_map['h'], 'd');
114 BOOST_CHECK_EQUAL(rc_map['N'], 'N');
115 BOOST_CHECK_EQUAL(rc_map['n'], 'n');
117 BOOST_CHECK_EQUAL(rc_map['U'], '~');
118 BOOST_CHECK_EQUAL(rc_map['u'], '~');
119 BOOST_CHECK_EQUAL(rc_map['Q'], '~');
120 BOOST_CHECK_EQUAL(rc_map['*'], '~');
123 BOOST_AUTO_TEST_CASE( alphabet_rc_rna)
125 Alphabet a = Alphabet::get_alphabet(rna_alphabet);
127 std::string rc_map = a.get_complement_map();
128 BOOST_CHECK_EQUAL(rc_map['A'], 'U');
129 BOOST_CHECK_EQUAL(rc_map['a'], 'u');
130 BOOST_CHECK_EQUAL(rc_map['C'], 'G');
131 BOOST_CHECK_EQUAL(rc_map['c'], 'g');
132 BOOST_CHECK_EQUAL(rc_map['G'], 'C');
133 BOOST_CHECK_EQUAL(rc_map['g'], 'c');
134 BOOST_CHECK_EQUAL(rc_map['U'], 'A');
135 BOOST_CHECK_EQUAL(rc_map['u'], 'a');
136 BOOST_CHECK_EQUAL(rc_map['R'], 'Y');
137 BOOST_CHECK_EQUAL(rc_map['r'], 'y');
138 BOOST_CHECK_EQUAL(rc_map['Y'], 'R');
139 BOOST_CHECK_EQUAL(rc_map['y'], 'r');
140 BOOST_CHECK_EQUAL(rc_map['S'], 'S');
141 BOOST_CHECK_EQUAL(rc_map['s'], 's');
142 BOOST_CHECK_EQUAL(rc_map['W'], 'W');
143 BOOST_CHECK_EQUAL(rc_map['w'], 'w');
144 BOOST_CHECK_EQUAL(rc_map['K'], 'M');
145 BOOST_CHECK_EQUAL(rc_map['k'], 'm');
146 BOOST_CHECK_EQUAL(rc_map['M'], 'K');
147 BOOST_CHECK_EQUAL(rc_map['m'], 'k');
148 BOOST_CHECK_EQUAL(rc_map['B'], 'V');
149 BOOST_CHECK_EQUAL(rc_map['b'], 'v');
150 BOOST_CHECK_EQUAL(rc_map['V'], 'B');
151 BOOST_CHECK_EQUAL(rc_map['v'], 'b');
152 BOOST_CHECK_EQUAL(rc_map['D'], 'H');
153 BOOST_CHECK_EQUAL(rc_map['d'], 'h');
154 BOOST_CHECK_EQUAL(rc_map['H'], 'D');
155 BOOST_CHECK_EQUAL(rc_map['h'], 'd');
156 BOOST_CHECK_EQUAL(rc_map['N'], 'N');
157 BOOST_CHECK_EQUAL(rc_map['n'], 'n');
159 BOOST_CHECK_EQUAL(rc_map['T'], '~');
160 BOOST_CHECK_EQUAL(rc_map['t'], '~');
161 BOOST_CHECK_EQUAL(rc_map['Q'], '~');
162 BOOST_CHECK_EQUAL(rc_map['*'], '~');
166 //enum AlphabetRef { reduced_nucleic_alphabet, nucleic_alphabet, };
167 BOOST_AUTO_TEST_CASE( alphabet_reverse_complement )
169 Alphabet a = Alphabet::get_alphabet(reduced_dna_alphabet);
170 std::string seq("AAAAGCT");
171 std::string known_rc_seq("AGCTTTT");
172 boost::shared_ptr<std::string> new_seq(a.reverse_complement(seq));
174 BOOST_CHECK_EQUAL(*new_seq, known_rc_seq);