1 #include <boost/test/auto_unit_test.hpp>
2 #include <boost/filesystem/operations.hpp>
3 namespace fs = boost::filesystem;
9 #include "alg/mussa.hpp"
13 //! can we initialize a mussa object?
14 BOOST_AUTO_TEST_CASE( mussa_simple )
17 BOOST_CHECK_EQUAL(m.get_name(), "" );
18 BOOST_CHECK_EQUAL(m.get_window(), 0);
19 BOOST_CHECK_EQUAL(m.get_threshold(), 0);
20 BOOST_CHECK_EQUAL(m.get_analysis_mode(), Mussa::TransitiveNway);
21 m.set_name( "hello" );
22 BOOST_CHECK_EQUAL(m.get_name(), "hello" );
24 BOOST_CHECK_EQUAL(m.get_window(), 30);
26 BOOST_CHECK_EQUAL(m.get_threshold(), 21);
27 m.set_analysis_mode(Mussa::RadialNway);
28 BOOST_CHECK_EQUAL(m.get_analysis_mode(), Mussa::RadialNway);
31 BOOST_CHECK_EQUAL(m.get_name(), "" );
32 BOOST_CHECK_EQUAL(m.get_window(), 0);
33 BOOST_CHECK_EQUAL(m.get_threshold(), 0);
34 BOOST_CHECK_EQUAL(m.get_analysis_mode(), Mussa::TransitiveNway);
37 BOOST_AUTO_TEST_CASE( mussa_analysis_name )
40 m.set_analysis_mode( Mussa::TransitiveNway );
41 BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "Transitive" );
42 m.set_analysis_mode( Mussa::RadialNway );
43 BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "Radial" );
44 m.set_analysis_mode( Mussa::EntropyNway );
45 BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "Entropy" );
46 m.set_analysis_mode( Mussa::RecursiveNway);
47 BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "[deprecated] Recursive" );
50 BOOST_AUTO_TEST_CASE( mussa_sequences )
52 std::string s0("AAAANNNN");
53 std::string s1("GGGGNNNN");
54 std::string s2("TTTTNNNN");
57 analysis.add_a_seq(s0);
58 analysis.add_a_seq(s1);
59 analysis.add_a_seq(s2);
61 BOOST_CHECK_EQUAL( analysis.sequences().size(), 3 );
62 BOOST_CHECK_EQUAL( analysis.sequences()[0].get_seq(), s0);
63 BOOST_CHECK_EQUAL( analysis.sequences()[1].get_seq(), s1);
64 BOOST_CHECK_EQUAL( analysis.sequences()[2].get_seq(), s2);
67 // for some reason we can call nway once safely but it
68 // somehow changed things and caused a segfault
69 // fixed by adding a return statement in trans_path_search
70 BOOST_AUTO_TEST_CASE ( empty_mussa_set_threshold )
80 BOOST_AUTO_TEST_CASE( mussa_load_mupa )
82 fs::path mupa_path(EXAMPLE_DIR);
83 mupa_path /= "mck3test.mupa";
86 m1.load_mupa_file( mupa_path );
88 BOOST_CHECK_EQUAL( m1.get_name(), std::string("mck3test") );
89 BOOST_CHECK( m1.size() > 0 );
92 fs::path result_path = fs::initial_path() / "mck3test_w30_t20";
93 m2.load( result_path );
94 BOOST_CHECK_EQUAL( m2.get_name(), result_path.leaf() );
95 BOOST_CHECK_EQUAL( m1.size(), m2.size() );
99 BOOST_AUTO_TEST_CASE( mussa_load_full_path )
102 fs::path full_path(fs::path(EXAMPLE_DIR) / "mck3test.mupa");
103 m1.load_mupa_file( full_path );
106 BOOST_CHECK( m1.size() > 0);
107 BOOST_CHECK_EQUAL( m1.get_window(), 30 );
108 BOOST_CHECK_EQUAL( m1.get_threshold(), 20);
111 BOOST_AUTO_TEST_CASE( mussa_load_analysis )
113 fs::path example_dir(EXAMPLE_DIR);
115 m1.load_mupa_file( example_dir / "mck3test.mupa" );
119 m2.load( example_dir / "mck3test_w30_t20");
121 BOOST_CHECK_EQUAL( m1.size(), m2.size() );
122 BOOST_CHECK_EQUAL( m1.get_window(), m2.get_window() );
123 BOOST_CHECK_EQUAL( m1.get_threshold(), m2.get_threshold() );
126 BOOST_AUTO_TEST_CASE( mussa_load_motif )
128 string data = "AAGG 1.0 1.0 0.0\n"
132 istringstream test_istream(data);
135 m1.add_a_seq("AAAAGGGGTTTT");
136 m1.add_a_seq("GGGCCCCTTGGTT");
137 m1.load_motifs(test_istream);
139 for (vector<Sequence>::const_iterator seq_i = m1.sequences().begin();
140 seq_i != m1.sequences().end();
143 BOOST_CHECK( seq_i->motifs().size() > 0 );
147 BOOST_AUTO_TEST_CASE( mussa_add_motif )
149 vector<string> motifs;
150 motifs.push_back("AAGG");
151 vector<Color> colors;
152 colors.push_back(Color(1.0, 0.0, 0.0));
155 m1.add_a_seq("AAAAGGGGTTTT");
156 m1.add_a_seq("GGGCCCCTTGGTT");
157 m1.add_motifs(motifs, colors);
158 int first_size = m1.motifs().size();
159 BOOST_CHECK_EQUAL( first_size, 1 );
160 m1.add_motifs(motifs, colors);
161 BOOST_CHECK_EQUAL( first_size, m1.motifs().size() );