-#include <boost/test/auto_unit_test.hpp>
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE test_glseqbrowser
+#include <boost/test/unit_test.hpp>
+
#include <boost/assign/std/vector.hpp>
using namespace boost::assign;
#include <list>
#include <vector>
-#include "alg/annotation_colors.hpp"
-#include "alg/glseqbrowser.hpp"
-#include "alg/sequence.hpp"
+#include "annotation_colors.hpp"
+#include "glseqbrowser.hpp"
+#include "mussa.hpp"
+#include "sequence.hpp"
using namespace std;
vector<int> path;
path += 1,1,1; gt.link(path, rc, 1);
path.clear(); path += 1,1,3; gt.link(path, rc, 1);
+ path.clear(); path += 1,2,1; gt.link(path, rc, 1);
path.clear(); path += 2,3,3; gt.link(path, rc, 1);
path.clear(); path += 3,3,3; gt.link(path, rc, 1);
+ // this represents the "depth" of the path_segment AKA sequences -1
BOOST_CHECK_EQUAL( gt.path_segments.size(), 2 );
- GlSeqBrowser::segment_key p(1, 1);
- GlSeqBrowser::pair_segment_map::iterator psm_i = gt.path_segments[0].find(p);
+ BOOST_CHECK_EQUAL( gt.path_segments[0].size(), 4);
+ BOOST_CHECK_EQUAL( gt.path_segments[1].size(), 4);
+ GlSeqBrowser::segment_key p11(1, 1);
+ GlSeqBrowser::segment_key p23(2, 3);
+ GlSeqBrowser::segment_key p33(3, 3);
+ GlSeqBrowser::segment_key p13(1, 3);
+ GlSeqBrowser::pair_segment_map::iterator psm_i = gt.path_segments[0].find(p11);
BOOST_CHECK( psm_i != gt.path_segments[0].end() );
BOOST_CHECK_EQUAL( psm_i->second.path_ids.size(), 2 );
-
+ // exaustively test the other keys in the first row
+ psm_i = gt.path_segments[0].find(p23);
+ BOOST_CHECK( psm_i != gt.path_segments[0].end());
+ psm_i = gt.path_segments[0].find(p33);
+ BOOST_CHECK( psm_i != gt.path_segments[0].end());
+ // should be missing
+ psm_i = gt.path_segments[0].find(p13);
+ BOOST_CHECK( psm_i == gt.path_segments[0].end());
+
gt.clear();
BOOST_CHECK_EQUAL( gt.path_segments.size(), 0 );
}
+BOOST_AUTO_TEST_CASE ( gltracks_connect_different_lengths )
+{
+ string s0("AAGGCCTT");
+ string s1("TTGGCCAA");
+ string s2("GATTACAA");
+ Sequence seq0(s0);
+ Sequence seq1(s1);
+ Sequence seq2(s2);
+
+ GlSeqBrowser gt;
+ gt.push_sequence(seq0);
+ gt.push_sequence(seq1);
+ gt.push_sequence(seq2);
+
+ // make up some sample data
+ vector<bool> rc;
+ rc += false, false, false;
+ vector<int> path;
+ path += 1,1,1; gt.link(path, rc, 5);
+ path.clear(); path += 1,1,3; gt.link(path, rc, 1);
+ path.clear(); path += 2,3,3; gt.link(path, rc, 1);
+ path.clear(); path += 3,3,3; gt.link(path, rc, 3);
+ path.clear(); path += 4,3,3; gt.link(path, rc, 2);
+
+ // this represents the "depth" of the path_segment AKA sequences -1
+ BOOST_CHECK_EQUAL( gt.path_segments.size(), 2 );
+ BOOST_CHECK_EQUAL( gt.path_segments[0].size(), 4);
+ BOOST_CHECK_EQUAL( gt.path_segments[1].size(), 3);
+ GlSeqBrowser::segment_key p1(1, 1);
+ GlSeqBrowser::pair_segment_map::iterator psm1_i = gt.path_segments[0].find(p1);
+ BOOST_CHECK( psm1_i != gt.path_segments[0].end() );
+ BOOST_CHECK_EQUAL( psm1_i->second.start.x, 1); //start segment x coordinate
+ BOOST_CHECK_EQUAL( psm1_i->second.end.x, 1); //end segment x coordinate
+ BOOST_CHECK_EQUAL( psm1_i->second.length, 5);
+ // there should be two paths, the sizes don't match
+ BOOST_CHECK_EQUAL( psm1_i->second.path_ids.size(), 2 );
+
+ // look at the second row
+ GlSeqBrowser::segment_key p2(3,3);
+ GlSeqBrowser::pair_segment_map::iterator psm2_i = gt.path_segments[1].find(p2);
+ BOOST_CHECK( psm2_i != gt.path_segments[1].end() );
+ BOOST_CHECK_EQUAL( psm2_i->second.start.x, 3); //start segment x coordinate
+ BOOST_CHECK_EQUAL( psm2_i->second.end.x, 3); //end segment x coordinate
+ BOOST_CHECK_EQUAL( psm2_i->second.length, 3);
+}
+
BOOST_AUTO_TEST_CASE( glseqbrowser_center )
{
string s0("AAGGCCTT");
string s1("TTGGCCAA");
string s2("GATTACAA");
- boost::shared_ptr<Sequence> seq0(new Sequence(s0));
- boost::shared_ptr<Sequence> seq1(new Sequence(s1));
- boost::shared_ptr<Sequence> seq2(new Sequence(s2));
+ Sequence seq0(s0);
+ Sequence seq1(s1);
+ Sequence seq2(s2);
boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
GlSequence glseq0(seq0, cm);
GlSequence glseq1(seq1, cm);
Sequence seq0(s0);
Sequence seq1(s1);
Sequence seq2(s2);
-
+
GlSeqBrowser gt;
gt.push_sequence(seq0);
gt.push_sequence(seq1);
gt.push_sequence(seq1);
gt.push_sequence(seq2);
-
BOOST_CHECK_EQUAL( gt.selectedTracks().size(), 0 );
gt.appendSelectedTrack(0, 0, seq0.size());
gt.appendSelectedTrack(2, 0, seq2.size());
BOOST_CHECK_EQUAL(seq_locs.front().getSequence(), seq0);
BOOST_CHECK_EQUAL(seq_locs.front().getLeft(), 0);
BOOST_CHECK_EQUAL(seq_locs.front().getRight(), 2);
-
}