-#include <boost/test/auto_unit_test.hpp>
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE test_alphabet
+#include <boost/test/unit_test.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
BOOST_AUTO_TEST_CASE( alphabet_simple )
{
- const Alphabet &a = Alphabet::reduced_dna_alphabet;
+ Alphabet a(Alphabet::reduced_dna_alphabet());
// exists is case insensitive
BOOST_CHECK_EQUAL( a.exists('a'), true);
BOOST_CHECK_EQUAL( a.exists('A'), true);
BOOST_CHECK_EQUAL( a.exists('Q'), false);
BOOST_CHECK_EQUAL( a.exists('q'), false);
- BOOST_CHECK_EQUAL( a.c_str(), "AaCcGgTtNn\012\015"); // copied from alphabet.cpp
+ // copied from alphabet.cpp
+ BOOST_CHECK_EQUAL( Alphabet::reduced_dna_cstr, "AaCcGgTtNn\012\015");
+}
+
+BOOST_AUTO_TEST_CASE( alphabet_equality)
+{
+ Alphabet a(Alphabet::reduced_dna_alphabet());
+ BOOST_CHECK_EQUAL( a, Alphabet::reduced_dna_alphabet() );
+}
+
+/*
+BOOST_AUTO_TEST_CASE( alphabet_rc_invalid )
+{
+ Alphabet a1 = Alphabet::get_alphabet(empty_alphabet);
+ BOOST_CHECK_THROW(a1.get_complement_map(), mussa_error);
+
+ Alphabet a2 = Alphabet::get_alphabet(protein_alphabet);
+ BOOST_CHECK_THROW(a2.create_complement_map(), mussa_error);
+}
+*/
+
+BOOST_AUTO_TEST_CASE( alphabet_rc_reduced_dna)
+{
+ Alphabet a = Alphabet::get_alphabet(reduced_dna_alphabet);
+
+ std::string rc_map = a.get_complement_map();
+ BOOST_CHECK_EQUAL(rc_map['A'], 'T');
+ BOOST_CHECK_EQUAL(rc_map['a'], 't');
+ BOOST_CHECK_EQUAL(rc_map['T'], 'A');
+ BOOST_CHECK_EQUAL(rc_map['t'], 'a');
+ BOOST_CHECK_EQUAL(rc_map['G'], 'C');
+ BOOST_CHECK_EQUAL(rc_map['g'], 'c');
+ BOOST_CHECK_EQUAL(rc_map['C'], 'G');
+ BOOST_CHECK_EQUAL(rc_map['c'], 'g');
+ BOOST_CHECK_EQUAL(rc_map['U'], '~');
+ BOOST_CHECK_EQUAL(rc_map['u'], '~');
+ BOOST_CHECK_EQUAL(rc_map['Q'], '~');
+ BOOST_CHECK_EQUAL(rc_map['*'], '~');
+}
+
+BOOST_AUTO_TEST_CASE( alphabet_rc_reduced_rna)
+{
+ Alphabet a = Alphabet::get_alphabet(reduced_rna_alphabet);
+
+ std::string rc_map = a.get_complement_map();
+ BOOST_CHECK_EQUAL(rc_map['A'], 'U');
+ BOOST_CHECK_EQUAL(rc_map['a'], 'u');
+ BOOST_CHECK_EQUAL(rc_map['G'], 'C');
+ BOOST_CHECK_EQUAL(rc_map['g'], 'c');
+ BOOST_CHECK_EQUAL(rc_map['C'], 'G');
+ BOOST_CHECK_EQUAL(rc_map['c'], 'g');
+ BOOST_CHECK_EQUAL(rc_map['T'], '~');
+ BOOST_CHECK_EQUAL(rc_map['t'], '~');
+ BOOST_CHECK_EQUAL(rc_map['U'], 'A');
+ BOOST_CHECK_EQUAL(rc_map['u'], 'a');
+ BOOST_CHECK_EQUAL(rc_map['Q'], '~');
+ BOOST_CHECK_EQUAL(rc_map['*'], '~');
+}
+
+BOOST_AUTO_TEST_CASE( alphabet_rc_dna)
+{
+ Alphabet a = Alphabet::get_alphabet(dna_alphabet);
+
+ std::string rc_map = a.get_complement_map();
+ BOOST_CHECK_EQUAL(rc_map['A'], 'T');
+ BOOST_CHECK_EQUAL(rc_map['a'], 't');
+ BOOST_CHECK_EQUAL(rc_map['C'], 'G');
+ BOOST_CHECK_EQUAL(rc_map['c'], 'g');
+ BOOST_CHECK_EQUAL(rc_map['G'], 'C');
+ BOOST_CHECK_EQUAL(rc_map['g'], 'c');
+ BOOST_CHECK_EQUAL(rc_map['T'], 'A');
+ BOOST_CHECK_EQUAL(rc_map['t'], 'a');
+ BOOST_CHECK_EQUAL(rc_map['R'], 'Y');
+ BOOST_CHECK_EQUAL(rc_map['r'], 'y');
+ BOOST_CHECK_EQUAL(rc_map['Y'], 'R');
+ BOOST_CHECK_EQUAL(rc_map['y'], 'r');
+ BOOST_CHECK_EQUAL(rc_map['S'], 'S');
+ BOOST_CHECK_EQUAL(rc_map['s'], 's');
+ BOOST_CHECK_EQUAL(rc_map['W'], 'W');
+ BOOST_CHECK_EQUAL(rc_map['w'], 'w');
+ BOOST_CHECK_EQUAL(rc_map['K'], 'M');
+ BOOST_CHECK_EQUAL(rc_map['k'], 'm');
+ BOOST_CHECK_EQUAL(rc_map['M'], 'K');
+ BOOST_CHECK_EQUAL(rc_map['m'], 'k');
+ BOOST_CHECK_EQUAL(rc_map['B'], 'V');
+ BOOST_CHECK_EQUAL(rc_map['b'], 'v');
+ BOOST_CHECK_EQUAL(rc_map['V'], 'B');
+ BOOST_CHECK_EQUAL(rc_map['v'], 'b');
+ BOOST_CHECK_EQUAL(rc_map['D'], 'H');
+ BOOST_CHECK_EQUAL(rc_map['d'], 'h');
+ BOOST_CHECK_EQUAL(rc_map['H'], 'D');
+ BOOST_CHECK_EQUAL(rc_map['h'], 'd');
+ BOOST_CHECK_EQUAL(rc_map['N'], 'N');
+ BOOST_CHECK_EQUAL(rc_map['n'], 'n');
+
+ BOOST_CHECK_EQUAL(rc_map['U'], '~');
+ BOOST_CHECK_EQUAL(rc_map['u'], '~');
+ BOOST_CHECK_EQUAL(rc_map['Q'], '~');
+ BOOST_CHECK_EQUAL(rc_map['*'], '~');
+}
+
+BOOST_AUTO_TEST_CASE( alphabet_rc_rna)
+{
+ Alphabet a = Alphabet::get_alphabet(rna_alphabet);
+
+ std::string rc_map = a.get_complement_map();
+ BOOST_CHECK_EQUAL(rc_map['A'], 'U');
+ BOOST_CHECK_EQUAL(rc_map['a'], 'u');
+ BOOST_CHECK_EQUAL(rc_map['C'], 'G');
+ BOOST_CHECK_EQUAL(rc_map['c'], 'g');
+ BOOST_CHECK_EQUAL(rc_map['G'], 'C');
+ BOOST_CHECK_EQUAL(rc_map['g'], 'c');
+ BOOST_CHECK_EQUAL(rc_map['U'], 'A');
+ BOOST_CHECK_EQUAL(rc_map['u'], 'a');
+ BOOST_CHECK_EQUAL(rc_map['R'], 'Y');
+ BOOST_CHECK_EQUAL(rc_map['r'], 'y');
+ BOOST_CHECK_EQUAL(rc_map['Y'], 'R');
+ BOOST_CHECK_EQUAL(rc_map['y'], 'r');
+ BOOST_CHECK_EQUAL(rc_map['S'], 'S');
+ BOOST_CHECK_EQUAL(rc_map['s'], 's');
+ BOOST_CHECK_EQUAL(rc_map['W'], 'W');
+ BOOST_CHECK_EQUAL(rc_map['w'], 'w');
+ BOOST_CHECK_EQUAL(rc_map['K'], 'M');
+ BOOST_CHECK_EQUAL(rc_map['k'], 'm');
+ BOOST_CHECK_EQUAL(rc_map['M'], 'K');
+ BOOST_CHECK_EQUAL(rc_map['m'], 'k');
+ BOOST_CHECK_EQUAL(rc_map['B'], 'V');
+ BOOST_CHECK_EQUAL(rc_map['b'], 'v');
+ BOOST_CHECK_EQUAL(rc_map['V'], 'B');
+ BOOST_CHECK_EQUAL(rc_map['v'], 'b');
+ BOOST_CHECK_EQUAL(rc_map['D'], 'H');
+ BOOST_CHECK_EQUAL(rc_map['d'], 'h');
+ BOOST_CHECK_EQUAL(rc_map['H'], 'D');
+ BOOST_CHECK_EQUAL(rc_map['h'], 'd');
+ BOOST_CHECK_EQUAL(rc_map['N'], 'N');
+ BOOST_CHECK_EQUAL(rc_map['n'], 'n');
+
+ BOOST_CHECK_EQUAL(rc_map['T'], '~');
+ BOOST_CHECK_EQUAL(rc_map['t'], '~');
+ BOOST_CHECK_EQUAL(rc_map['Q'], '~');
+ BOOST_CHECK_EQUAL(rc_map['*'], '~');
+}
+
+
+//enum AlphabetRef { reduced_nucleic_alphabet, nucleic_alphabet, };
+BOOST_AUTO_TEST_CASE( alphabet_reverse_complement )
+{
+ Alphabet a = Alphabet::get_alphabet(reduced_dna_alphabet);
+ std::string seq("AAAAGCT");
+ std::string known_rc_seq("AGCTTTT");
+ boost::shared_ptr<std::string> new_seq(a.reverse_complement(seq));
+
+ BOOST_CHECK_EQUAL(*new_seq, known_rc_seq);
+
}