Update mussa to build on ubuntu 10.04 with qt 4.6.2 +boost 1.40.0.1
[mussa.git] / alg / test / test_alphabet.cpp
1 #define BOOST_TEST_DYN_LINK
2 #define BOOST_TEST_MODULE test_alphabet
3 #include <boost/test/unit_test.hpp>
4
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>
9
10 #include "alg/alphabet.hpp"
11 #include "mussa_exceptions.hpp"
12
13 BOOST_AUTO_TEST_CASE( alphabet_simple )
14 {
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);
21   
22   // copied from alphabet.cpp
23   BOOST_CHECK_EQUAL( Alphabet::reduced_dna_cstr, "AaCcGgTtNn\012\015");
24 }
25
26 BOOST_AUTO_TEST_CASE( alphabet_equality)
27 {
28   Alphabet a(Alphabet::reduced_dna_alphabet());
29   BOOST_CHECK_EQUAL( a, Alphabet::reduced_dna_alphabet() );
30 }
31
32 /*
33 BOOST_AUTO_TEST_CASE( alphabet_rc_invalid )
34 {
35   Alphabet a1 = Alphabet::get_alphabet(empty_alphabet);
36   BOOST_CHECK_THROW(a1.get_complement_map(), mussa_error);
37
38   Alphabet a2 = Alphabet::get_alphabet(protein_alphabet);
39   BOOST_CHECK_THROW(a2.create_complement_map(), mussa_error);
40 }
41 */
42
43 BOOST_AUTO_TEST_CASE( alphabet_rc_reduced_dna)
44 {
45   Alphabet a = Alphabet::get_alphabet(reduced_dna_alphabet);
46   
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['*'], '~');
60 }
61
62 BOOST_AUTO_TEST_CASE( alphabet_rc_reduced_rna)
63 {
64   Alphabet a = Alphabet::get_alphabet(reduced_rna_alphabet);
65   
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['*'], '~');
79 }
80
81 BOOST_AUTO_TEST_CASE( alphabet_rc_dna)
82 {
83   Alphabet a = Alphabet::get_alphabet(dna_alphabet);
84   
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');
116
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['*'], '~');
121 }
122
123 BOOST_AUTO_TEST_CASE( alphabet_rc_rna)
124 {
125   Alphabet a = Alphabet::get_alphabet(rna_alphabet);
126   
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');
158
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['*'], '~');
163 }
164
165
166 //enum AlphabetRef { reduced_nucleic_alphabet,   nucleic_alphabet, };
167 BOOST_AUTO_TEST_CASE( alphabet_reverse_complement )
168 {
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));
173   
174   BOOST_CHECK_EQUAL(*new_seq, known_rc_seq);
175   
176 }