1 #include <boost/test/auto_unit_test.hpp>
5 #include "alg/annotation_colors.hpp"
6 #include "alg/glsequence.hpp"
7 #include "alg/sequence.hpp"
11 BOOST_AUTO_TEST_CASE ( glsequence_operator_equal )
14 // I don't trust my operator = hack so lets make sure it works.
15 string s0("AAGGCCTT");
16 string s1("TTGGCCAA");
20 GlSequence glseq0(seq0, cm);
21 BOOST_CHECK (glseq0.sequence().get_seq() == s0);
22 GlSequence glseq1(seq1, cm);
23 GlSequence glseq_copy0(glseq0);
25 BOOST_CHECK(glseq_copy0.sequence().get_seq() == glseq0.sequence().get_seq());
26 BOOST_CHECK( &(glseq_copy0.sequence()) == &(glseq0.sequence()));
30 BOOST_CHECK( glseq0.sequence().get_seq() == s1 );
33 BOOST_AUTO_TEST_CASE( glsequence_color )
36 Color black(0.0, 0.0, 0.0, 0.0);
37 Color c(0.1, 0.2, 0.3, 0.4);
38 Sequence seq("AAGGCCTT");
39 GlSequence s(seq, cm);
41 BOOST_CHECK_EQUAL(s.color(), black );
43 BOOST_CHECK_EQUAL( s.color(), c );
46 BOOST_AUTO_TEST_CASE( glsequence_renderable )
49 Sequence seq("AAGGCCTT");
50 GlSequence s(seq, cm);
52 // way more base pairs than viewport pixel width
53 BOOST_CHECK_EQUAL(s.is_sequence_renderable( 0, 1000, 500), false );
54 // way fewer basepairs than viewport pixel width
55 BOOST_CHECK_EQUAL(s.is_sequence_renderable( 0, 10, 500), true);
58 BOOST_AUTO_TEST_CASE( glsequence_sequence )
61 string seq_string("AAGGCCTTNNAAGGCCTTNNAAGGCCTTNN");
62 string::size_type seqlen = seq_string.size();
63 Sequence seq(seq_string);
64 GlSequence glseq(seq, cm);
66 BOOST_CHECK( glseq.sequence_begin(0, 50) == seq.begin() );
67 // always make sure we return seq.end() regardless of how much extra
69 BOOST_CHECK( glseq.sequence_end(0, seqlen+10) == seq.end() );
70 // do we get the right end pointer?
71 BOOST_CHECK( glseq.sequence_end(0, 5) == seq.begin()+5 );
73 // when we request far too much sequence what do we get?
74 BOOST_CHECK( glseq.sequence_begin(seqlen+10, seqlen+20) == seq.end() );
75 BOOST_CHECK( glseq.sequence_end(seqlen+10, seqlen+20) == seq.end() );
77 // we cant ask for reversed sequences with sequence_begin/end
78 BOOST_CHECK( glseq.sequence_begin(10, 5) == seq.end() );
79 BOOST_CHECK( glseq.sequence_end(10, 5) == seq.end() );
81 Sequence::const_iterator seq_itor;
83 // if we as for an empty segment? start and end should equal
84 seq_itor = glseq.sequence_begin(10, 10);
85 BOOST_CHECK( seq_itor == glseq.sequence_end(10, 10) );
87 // reuse seq_itor downhere
88 string::const_iterator str_itor;
89 for(str_itor = seq.begin(),
90 seq_itor = glseq.sequence_begin();
91 str_itor != seq.end() and
92 seq_itor != glseq.sequence_end();
93 ++str_itor, ++seq_itor)
95 BOOST_CHECK_EQUAL( *str_itor, *seq_itor );
99 // make sure the computation of the leftmost and rightmost base is correct
100 BOOST_AUTO_TEST_CASE( glsequence_leftright_base )
103 std::string seq_string = "AAGGCCTT";
104 Sequence seq(seq_string);
105 GlSequence glseq(seq, cm);
107 BOOST_CHECK_EQUAL( glseq.leftbase( -50.0 ), 0 );
108 BOOST_CHECK_EQUAL( glseq.leftbase( 0.5 ), 1 );
109 BOOST_CHECK_EQUAL( glseq.leftbase( 5.0 ), 5 );
110 BOOST_CHECK_EQUAL( glseq.leftbase( 500.0 ), seq_string.size() );
111 BOOST_CHECK_EQUAL( glseq.rightbase( 0.0 ), 0 );
112 BOOST_CHECK_EQUAL( glseq.rightbase( 1000.0 ), seq_string.size() );
113 BOOST_CHECK_EQUAL( glseq.rightbase( seq_string.size()-0.5),
114 seq_string.size()-1);
117 // do our left and right most base computations still work if
118 // we move the sequence around?
119 BOOST_AUTO_TEST_CASE( glsequence_movex )
122 std::string seq_string = "AAGGCCTTAAGGCCTT";
123 Sequence seq(seq_string);
124 GlSequence glseq(seq, cm);
127 BOOST_CHECK_EQUAL( glseq.leftbase(-100.0), 0 );
128 BOOST_CHECK_EQUAL( glseq.leftbase( 0.0), 5 );
129 BOOST_CHECK_EQUAL( glseq.leftbase( -2.0), 3 );
130 BOOST_CHECK_EQUAL( glseq.leftbase( 100.0), seq_string.size() );
131 BOOST_CHECK_EQUAL( glseq.rightbase( 1000.0 ), seq_string.size() );
132 BOOST_CHECK_EQUAL( glseq.rightbase( 8.0 ), 8+5 );
133 BOOST_CHECK_EQUAL( glseq.rightbase( -7.0 ), 0 );
137 BOOST_AUTO_TEST_CASE( glsequence_check_iterators )
140 std::string seq_string = "AAGGCCTTAAGGCCTT";
141 Sequence seq(seq_string);
142 GlSequence glseq(seq, cm);
144 Sequence::const_iterator seq_begin_i;
145 Sequence::const_iterator seq_end_i;
147 BOOST_CHECK(glseq.sequence_begin(5, -5) == seq.end());
148 BOOST_CHECK(glseq.sequence_begin(0, 20) == seq.begin());
149 BOOST_CHECK(glseq.sequence_begin(10,20) == seq.begin()+10);
151 BOOST_CHECK(glseq.sequence_end(5, -5) == seq.end());
152 BOOST_CHECK(glseq.sequence_end(0, 20) == seq.end());
153 BOOST_CHECK(glseq.sequence_end(0, 10) == seq.begin()+10);
156 BOOST_CHECK(glseq.sequence_begin(0, 10) == seq.begin()+5);
157 BOOST_CHECK(glseq.sequence_end(0, 15) == seq.end());