X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=blobdiff_plain;f=alg%2Ftest%2Ftest_alphabet.cpp;h=c854530554aa85055854cbc3f59300b046eea393;hp=bfe6e3e3e63e447405a42b0061d8ab88c5d98f6b;hb=97498410e1fc5c39eac0282a6620b8fcb0f02ff3;hpb=3f3aba42bdea1eaa21c4345732320b9cf3473da2 diff --git a/alg/test/test_alphabet.cpp b/alg/test/test_alphabet.cpp index bfe6e3e..c854530 100644 --- a/alg/test/test_alphabet.cpp +++ b/alg/test/test_alphabet.cpp @@ -1,4 +1,6 @@ -#include +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE test_alphabet +#include #include #include @@ -10,12 +12,165 @@ 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 new_seq(a.reverse_complement(seq)); + + BOOST_CHECK_EQUAL(*new_seq, known_rc_seq); + }