There can be only one (filename convention)
[mussa.git] / alg / test / test_mussa.cpp
1 #include <boost/test/auto_unit_test.hpp>
2
3 #include <string>
4
5 #include "alg/mussa.hpp"
6
7 //! can we initialize a mussa object?
8 BOOST_AUTO_TEST_CASE( mussa_simple )
9 {
10   Mussa m;
11   BOOST_CHECK_EQUAL(m.get_name(), "" );
12   BOOST_CHECK_EQUAL(m.get_window(), 0);
13   BOOST_CHECK_EQUAL(m.get_threshold(), 0);
14   BOOST_CHECK_EQUAL(m.get_analysis_mode(), Mussa::TransitiveNway);
15   m.set_name( "hello" );
16   BOOST_CHECK_EQUAL(m.get_name(), "hello" );
17   m.set_window(30);
18   BOOST_CHECK_EQUAL(m.get_window(), 30);
19   m.set_threshold(21);
20   BOOST_CHECK_EQUAL(m.get_threshold(), 21);
21   m.set_analysis_mode(Mussa::RadialNway);
22   BOOST_CHECK_EQUAL(m.get_analysis_mode(), Mussa::RadialNway);
23     
24   m.clear();
25   BOOST_CHECK_EQUAL(m.get_name(), "" );
26   BOOST_CHECK_EQUAL(m.get_window(), 0);
27   BOOST_CHECK_EQUAL(m.get_threshold(), 0);
28   BOOST_CHECK_EQUAL(m.get_analysis_mode(), Mussa::TransitiveNway);
29 }
30
31 BOOST_AUTO_TEST_CASE( mussa_analysis_name )
32 {
33   Mussa m;
34   m.set_analysis_mode( Mussa::TransitiveNway );
35   BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "Transitive" );
36   m.set_analysis_mode( Mussa::RadialNway );
37   BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "Radial" );
38   m.set_analysis_mode( Mussa::EntropyNway );
39   BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "Entropy" );
40   m.set_analysis_mode( Mussa::RecursiveNway);
41   BOOST_CHECK_EQUAL( m.get_analysis_mode_name(), "[deprecated] Recursive" );
42 }
43
44 BOOST_AUTO_TEST_CASE( mussa_sequences )
45 {
46   std::string s0("AAAANNNN");
47   std::string s1("GGGGNNNN");
48   std::string s2("TTTTNNNN");
49
50   Mussa analysis;
51   analysis.add_a_seq(s0);
52   analysis.add_a_seq(s1);
53   analysis.add_a_seq(s2);
54
55   BOOST_CHECK_EQUAL( analysis.sequences().size(), 3 );
56   BOOST_CHECK_EQUAL( analysis.sequences()[0].get_seq(), s0);
57   BOOST_CHECK_EQUAL( analysis.sequences()[1].get_seq(), s1);
58   BOOST_CHECK_EQUAL( analysis.sequences()[2].get_seq(), s2);
59 }
60
61 // for some reason we can call nway once safely but it
62 // somehow changed things and caused a segfault
63 // fixed by adding a return statement in trans_path_search 
64 BOOST_AUTO_TEST_CASE ( empty_mussa_set_threshold )
65 {
66   Mussa m;
67   m.set_soft_thres(15);
68   m.nway();
69
70   m.set_soft_thres(25);
71   m.nway();
72 }
73
74 #include <unistd.h>
75 BOOST_AUTO_TEST_CASE( mussa_load_mupa )
76 {
77   Mussa m1;
78   chdir( "examples" );
79   m1.load_mupa_file( "mck3test.mupa" );
80   m1.analyze(0, 0);
81   BOOST_CHECK_EQUAL( m1.get_name(), std::string("mck3test") );
82   BOOST_CHECK( m1.size() > 0 );
83
84   Mussa m2;
85   std::string saved_analysis_path("mck3test_w30_t20");
86   m2.load( saved_analysis_path  );
87   chdir( ".." );
88
89   BOOST_CHECK_EQUAL( m2.get_name(), saved_analysis_path );
90   BOOST_CHECK_EQUAL( m1.size(), m2.size() );
91
92 }
93
94 BOOST_AUTO_TEST_CASE( mussa_load_full_path )
95 {
96   Mussa m1;
97   chdir( "examples" );
98   const int bufsize = 1024;
99   char path_buf[bufsize];
100   getcwd(path_buf, bufsize);
101   std::string path(path_buf);
102   chdir( ".." );
103   path += "/mck3test.mupa";
104   m1.load_mupa_file( path );
105   m1.analyze(0, 0);
106
107   BOOST_CHECK( m1.size() > 0);
108 }