X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=mussa.git;a=blobdiff_plain;f=alg%2Ftest%2Ftest_glseqbrowser.cpp;h=9587472ae5ab73bbbea1ae6780d5e70a3f0230ae;hp=336d0052f6c7c0b4d15f82bb8e09ad8659a2c40e;hb=HEAD;hpb=946b9e9a4290b013533184f20fd1871c0a04e6ad diff --git a/alg/test/test_glseqbrowser.cpp b/alg/test/test_glseqbrowser.cpp index 336d005..9587472 100644 --- a/alg/test/test_glseqbrowser.cpp +++ b/alg/test/test_glseqbrowser.cpp @@ -1,4 +1,7 @@ -#include +#define BOOST_TEST_DYN_LINK +#define BOOST_TEST_MODULE test_glseqbrowser +#include + #include using namespace boost::assign; @@ -8,9 +11,10 @@ using namespace boost::assign; #include #include -#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; @@ -34,27 +38,88 @@ BOOST_AUTO_TEST_CASE ( gltracks_connect ) vector 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 rc; + rc += false, false, false; + vector 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 seq0(new Sequence(s0)); - boost::shared_ptr seq1(new Sequence(s1)); - boost::shared_ptr seq2(new Sequence(s2)); + Sequence seq0(s0); + Sequence seq1(s1); + Sequence seq2(s2); boost::shared_ptr cm(new AnnotationColors); GlSequence glseq0(seq0, cm); GlSequence glseq1(seq1, cm); @@ -80,9 +145,79 @@ BOOST_AUTO_TEST_CASE( glseqbrowser_center ) BOOST_CHECK_EQUAL( gt.right(), s0.size() + gt.border()-11 ); // aparently we end up with a different glsequence in the seqbrowser - BOOST_CHECK( glseq1.x() != gt.sequences()[1].x() ); + BOOST_CHECK( glseq1.x() != gt.sequences()[1]->x() ); + + BOOST_CHECK_EQUAL( gt.sequences()[0]->x(), (gt.viewportCenter()-15)-path[0] ); + BOOST_CHECK_EQUAL( gt.sequences()[1]->x(), (gt.viewportCenter()-15)-path[1] ); + BOOST_CHECK_EQUAL( gt.sequences()[2]->x(), (gt.viewportCenter()-15)-path[2] ); +} + +BOOST_AUTO_TEST_CASE( setSelectedPaths ) +{ + 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 rc; + rc += false, false, false; + vector path; + path += 1,1,1; gt.link(path, rc, 1); + 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, 1); + + vector selected; + selected += 1,4; + BOOST_CHECK_EQUAL( gt.selectedPaths().size(), 0 ); + gt.setSelectedPaths(selected); + BOOST_CHECK_EQUAL( gt.selectedPaths().size(), selected.size() ); + gt.clear_selection(); + BOOST_CHECK_EQUAL( gt.selectedPaths().size(), 0); +} + +BOOST_AUTO_TEST_CASE( setSelectedTracks ) +{ + 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); - BOOST_CHECK_EQUAL( gt.sequences()[0].x(), (gt.viewportCenter()-15)-path[0] ); - BOOST_CHECK_EQUAL( gt.sequences()[1].x(), (gt.viewportCenter()-15)-path[1] ); - BOOST_CHECK_EQUAL( gt.sequences()[2].x(), (gt.viewportCenter()-15)-path[2] ); + BOOST_CHECK_EQUAL( gt.selectedTracks().size(), 0 ); + gt.appendSelectedTrack(0, 0, seq0.size()); + gt.appendSelectedTrack(2, 0, seq2.size()); + BOOST_CHECK_EQUAL( gt.selectedTracks().size(), 2 ); + + list selected_sequence; + BOOST_CHECK_EQUAL(selected_sequence.size(), 0); + gt.copySelectedTracksAsSequences(selected_sequence); + BOOST_CHECK_EQUAL(selected_sequence.size(), 2); + BOOST_CHECK_EQUAL(selected_sequence.front(), seq0); + BOOST_CHECK_EQUAL(selected_sequence.back(), seq2); + + gt.clear_selection(); + BOOST_CHECK_EQUAL( gt.selectedPaths().size(), 0); + + gt.appendSelectedTrack(0, 0, 2); + list seq_locs; + gt.copySelectedTracksAsSeqLocation(seq_locs); + BOOST_CHECK_EQUAL(seq_locs.size(), 1); + BOOST_CHECK_EQUAL(seq_locs.front().getSequence(), seq0); + BOOST_CHECK_EQUAL(seq_locs.front().getLeft(), 0); + BOOST_CHECK_EQUAL(seq_locs.front().getRight(), 2); }