1 #include <boost/test/auto_unit_test.hpp>
2 #include <boost/assign/std/vector.hpp>
3 using namespace boost::assign;
5 #include <boost/shared_ptr.hpp>
11 #include "alg/annotation_colors.hpp"
12 #include "alg/glseqbrowser.hpp"
13 #include "alg/sequence.hpp"
17 BOOST_AUTO_TEST_CASE ( gltracks_connect )
19 string s0("AAGGCCTT");
20 string s1("TTGGCCAA");
21 string s2("GATTACAA");
27 gt.push_sequence(seq0);
28 gt.push_sequence(seq1);
29 gt.push_sequence(seq2);
31 // make up some sample data
33 rc += false, false, false;
35 path += 1,1,1; gt.link(path, rc, 1);
36 path.clear(); path += 1,1,3; gt.link(path, rc, 1);
37 path.clear(); path += 1,2,1; gt.link(path, rc, 1);
38 path.clear(); path += 2,3,3; gt.link(path, rc, 1);
39 path.clear(); path += 3,3,3; gt.link(path, rc, 1);
41 // this represents the "depth" of the path_segment AKA sequences -1
42 BOOST_CHECK_EQUAL( gt.path_segments.size(), 2 );
43 BOOST_CHECK_EQUAL( gt.path_segments[0].size(), 4);
44 BOOST_CHECK_EQUAL( gt.path_segments[1].size(), 4);
45 GlSeqBrowser::segment_key p11(1, 1);
46 GlSeqBrowser::segment_key p23(2, 3);
47 GlSeqBrowser::segment_key p33(3, 3);
48 GlSeqBrowser::segment_key p13(1, 3);
49 GlSeqBrowser::pair_segment_map::iterator psm_i = gt.path_segments[0].find(p11);
50 BOOST_CHECK( psm_i != gt.path_segments[0].end() );
51 BOOST_CHECK_EQUAL( psm_i->second.path_ids.size(), 2 );
52 // exaustively test the other keys in the first row
53 psm_i = gt.path_segments[0].find(p23);
54 BOOST_CHECK( psm_i != gt.path_segments[0].end());
55 psm_i = gt.path_segments[0].find(p33);
56 BOOST_CHECK( psm_i != gt.path_segments[0].end());
58 psm_i = gt.path_segments[0].find(p13);
59 BOOST_CHECK( psm_i == gt.path_segments[0].end());
62 BOOST_CHECK_EQUAL( gt.path_segments.size(), 0 );
65 BOOST_AUTO_TEST_CASE ( gltracks_connect_different_lengths )
67 string s0("AAGGCCTT");
68 string s1("TTGGCCAA");
69 string s2("GATTACAA");
75 gt.push_sequence(seq0);
76 gt.push_sequence(seq1);
77 gt.push_sequence(seq2);
79 // make up some sample data
81 rc += false, false, false;
83 path += 1,1,1; gt.link(path, rc, 5);
84 path.clear(); path += 1,1,3; gt.link(path, rc, 1);
85 path.clear(); path += 2,3,3; gt.link(path, rc, 1);
86 path.clear(); path += 3,3,3; gt.link(path, rc, 3);
87 path.clear(); path += 4,3,3; gt.link(path, rc, 2);
89 // this represents the "depth" of the path_segment AKA sequences -1
90 BOOST_CHECK_EQUAL( gt.path_segments.size(), 2 );
91 BOOST_CHECK_EQUAL( gt.path_segments[0].size(), 4);
92 BOOST_CHECK_EQUAL( gt.path_segments[1].size(), 3);
93 GlSeqBrowser::segment_key p1(1, 1);
94 GlSeqBrowser::pair_segment_map::iterator psm1_i = gt.path_segments[0].find(p1);
95 BOOST_CHECK( psm1_i != gt.path_segments[0].end() );
96 BOOST_CHECK_EQUAL( psm1_i->second.start.x, 1); //start segment x coordinate
97 BOOST_CHECK_EQUAL( psm1_i->second.end.x, 1); //end segment x coordinate
98 BOOST_CHECK_EQUAL( psm1_i->second.length, 5);
99 // there should be two paths, the sizes don't match
100 BOOST_CHECK_EQUAL( psm1_i->second.path_ids.size(), 2 );
102 // look at the second row
103 GlSeqBrowser::segment_key p2(3,3);
104 GlSeqBrowser::pair_segment_map::iterator psm2_i = gt.path_segments[1].find(p2);
105 BOOST_CHECK( psm2_i != gt.path_segments[1].end() );
106 BOOST_CHECK_EQUAL( psm2_i->second.start.x, 3); //start segment x coordinate
107 BOOST_CHECK_EQUAL( psm2_i->second.end.x, 3); //end segment x coordinate
108 BOOST_CHECK_EQUAL( psm2_i->second.length, 3);
111 BOOST_AUTO_TEST_CASE( glseqbrowser_center )
113 string s0("AAGGCCTT");
114 string s1("TTGGCCAA");
115 string s2("GATTACAA");
116 boost::shared_ptr<Sequence> seq0(new Sequence(s0));
117 boost::shared_ptr<Sequence> seq1(new Sequence(s1));
118 boost::shared_ptr<Sequence> seq2(new Sequence(s2));
119 boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
120 GlSequence glseq0(seq0, cm);
121 GlSequence glseq1(seq1, cm);
122 GlSequence glseq2(seq2, cm);
125 gt.push_sequence(glseq0);
126 gt.push_sequence(glseq1);
127 gt.push_sequence(glseq2);
132 BOOST_CHECK_EQUAL( gt.left(), -gt.border() );
133 BOOST_CHECK_EQUAL( gt.right(), s0.size() + gt.border() );
135 gt.centerOnPath(path);
137 // I didn't bother to compute how the path should shift things
138 // by the magic number 3, i just ran the test and saw how it failed
139 // and hard coded this in.
140 BOOST_CHECK_EQUAL( gt.left(), -18-gt.border() );
141 BOOST_CHECK_EQUAL( gt.right(), s0.size() + gt.border()-11 );
143 // aparently we end up with a different glsequence in the seqbrowser
144 BOOST_CHECK( glseq1.x() != gt.sequences()[1]->x() );
146 BOOST_CHECK_EQUAL( gt.sequences()[0]->x(), (gt.viewportCenter()-15)-path[0] );
147 BOOST_CHECK_EQUAL( gt.sequences()[1]->x(), (gt.viewportCenter()-15)-path[1] );
148 BOOST_CHECK_EQUAL( gt.sequences()[2]->x(), (gt.viewportCenter()-15)-path[2] );
151 BOOST_AUTO_TEST_CASE( setSelectedPaths )
153 string s0("AAGGCCTT");
154 string s1("TTGGCCAA");
155 string s2("GATTACAA");
161 gt.push_sequence(seq0);
162 gt.push_sequence(seq1);
163 gt.push_sequence(seq2);
165 // make up some sample data
167 rc += false, false, false;
169 path += 1,1,1; gt.link(path, rc, 1);
170 path.clear(); path += 1,1,3; gt.link(path, rc, 1);
171 path.clear(); path += 2,3,3; gt.link(path, rc, 1);
172 path.clear(); path += 3,3,3; gt.link(path, rc, 1);
174 vector<int> selected;
176 BOOST_CHECK_EQUAL( gt.selectedPaths().size(), 0 );
177 gt.setSelectedPaths(selected);
178 BOOST_CHECK_EQUAL( gt.selectedPaths().size(), selected.size() );
179 gt.clear_selection();
180 BOOST_CHECK_EQUAL( gt.selectedPaths().size(), 0);
183 BOOST_AUTO_TEST_CASE( setSelectedTracks )
185 string s0("AAGGCCTT");
186 string s1("TTGGCCAA");
187 string s2("GATTACAA");
193 gt.push_sequence(seq0);
194 gt.push_sequence(seq1);
195 gt.push_sequence(seq2);
198 BOOST_CHECK_EQUAL( gt.selectedTracks().size(), 0 );
199 gt.appendSelectedTrack(0, 0, seq0.size());
200 gt.appendSelectedTrack(2, 0, seq2.size());
201 BOOST_CHECK_EQUAL( gt.selectedTracks().size(), 2 );
203 list<Sequence> selected_sequence;
204 BOOST_CHECK_EQUAL(selected_sequence.size(), 0);
205 gt.copySelectedTracksAsSequences(selected_sequence);
206 BOOST_CHECK_EQUAL(selected_sequence.size(), 2);
207 BOOST_CHECK_EQUAL(selected_sequence.front(), seq0);
208 BOOST_CHECK_EQUAL(selected_sequence.back(), seq2);
210 gt.clear_selection();
211 BOOST_CHECK_EQUAL( gt.selectedPaths().size(), 0);
213 gt.appendSelectedTrack(0, 0, 2);
214 list<SequenceLocation> seq_locs;
215 gt.copySelectedTracksAsSeqLocation(seq_locs);
216 BOOST_CHECK_EQUAL(seq_locs.size(), 1);
217 BOOST_CHECK_EQUAL(seq_locs.front().getSequence(), seq0);
218 BOOST_CHECK_EQUAL(seq_locs.front().getLeft(), 0);
219 BOOST_CHECK_EQUAL(seq_locs.front().getRight(), 2);