+BOOST_AUTO_TEST_CASE( three_way_local_alignment )
+{
+ string s0("AGCAGGGAGGGTTTAAATGGCACCCAGCAGTTGGTGTGAGG");
+ string s1("AGCGGGAAGGGTTTAAATGGCACCGGGCAGTTGGCGTGAGG");
+ string s2("CAGCGCCGGGGTTTAAATGGCACCGAGCAGTTGGCGCAGGG");
+
+ Mussa analysis;
+ analysis.append_sequence(s0);
+ analysis.append_sequence(s1);
+ analysis.append_sequence(s2);
+ analysis.set_threshold(23);
+ analysis.set_window(30);
+ analysis.analyze();
+ NwayPaths npath = analysis.paths();
+ BOOST_CHECK_EQUAL( npath.refined_pathz.size(), 1 );
+
+ list<ConservedPath::path_type> result;
+ list<vector<bool> > reversed;
+ // grab 1 path (since there's only one)
+ list<ConservedPath>::iterator pathz_i = npath.pathz.begin();
+ list<ConservedPath> selected_paths;
+ selected_paths.push_back(*pathz_i);
+ analysis.createLocalAlignment(selected_paths.begin(),
+ selected_paths.end(),
+ result,
+ reversed);
+
+ for(std::list<ConservedPath::path_type>::iterator result_i = result.begin();
+ result_i != result.end();
+ ++result_i)
+ {
+ std::cout << "path ";
+ ConservedPath::path_element first_element = *(result_i->begin());
+ for (ConservedPath::path_type::iterator element_i = result_i->begin();
+ element_i != result_i->end();
+ ++element_i)
+ {
+ BOOST_CHECK_EQUAL( *element_i, first_element );
+ BOOST_CHECK_EQUAL( s0[*element_i], s1[*element_i] );
+ BOOST_CHECK_EQUAL( s1[*element_i], s2[*element_i] );
+ BOOST_CHECK_EQUAL( s0[*element_i], s2[*element_i] );
+ std::cout << *element_i << " " << s0[*element_i];
+ }
+ std::cout << std::endl;
+ }