+
+// do our left and right most base computations still work if
+// we move the sequence around?
+BOOST_AUTO_TEST_CASE( glsequence_movex )
+{
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
+ std::string seq_string = "AAGGCCTTAAGGCCTT";
+ Sequence seq(seq_string);
+ GlSequence glseq(seq, cm);
+
+ glseq.setX(-5);
+ BOOST_CHECK_EQUAL( glseq.leftbase(-100.0), 0 );
+ BOOST_CHECK_EQUAL( glseq.leftbase( 0.0), 5 );
+ BOOST_CHECK_EQUAL( glseq.leftbase( -2.0), 3 );
+ BOOST_CHECK_EQUAL( glseq.leftbase( 100.0), seq_string.size() );
+ BOOST_CHECK_EQUAL( glseq.rightbase( 1000.0 ), seq_string.size() );
+ BOOST_CHECK_EQUAL( glseq.rightbase( 8.0 ), 8+5 );
+ BOOST_CHECK_EQUAL( glseq.rightbase( -7.0 ), 0 );
+}
+
+// Check iterators
+BOOST_AUTO_TEST_CASE( glsequence_check_iterators )
+{
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
+ std::string seq_string = "AAGGCCTTAAGGCCTT";
+ Sequence seq(seq_string);
+ GlSequence glseq(seq, cm);
+
+ Sequence::const_iterator seq_begin_i;
+ Sequence::const_iterator seq_end_i;
+
+ BOOST_CHECK(glseq.region_begin(5, -5) == seq.end());
+ BOOST_CHECK(glseq.region_begin(0, 20) == seq.begin());
+ BOOST_CHECK(glseq.region_begin(10,20) == seq.begin()+10);
+
+ BOOST_CHECK(glseq.region_end(5, -5) == seq.end());
+ BOOST_CHECK(glseq.region_end(0, 20) == seq.end());
+ BOOST_CHECK(glseq.region_end(0, 10) == seq.begin()+10);
+
+ glseq.setX(-5);
+ BOOST_CHECK(glseq.region_begin(0, 10) == seq.begin()+5);
+ BOOST_CHECK(glseq.region_end(0, 15) == seq.end());
+}
+
+BOOST_AUTO_TEST_CASE( glsequence_subseq )
+{
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
+ boost::shared_ptr<Color> c(new Color(1.0, 0.5, 0.5));
+
+ GlSequence seq("AAGGCCTT", cm);
+ seq.setColor(c);
+
+ GlSequence subseq = seq.subseq(4,2);
+ BOOST_CHECK_EQUAL(subseq.get_sequence(), "CC");
+ BOOST_CHECK_EQUAL(subseq.color(), c);
+}
+
+/*
+BOOST_AUTO_TEST_CASE ( shared_ptr_test )
+{
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
+ // I don't trust my operator= hack so lets make sure it works.
+ string s0("AAGGCCTT");
+ string s1("TTGGCCAA");
+ Sequence seq0(s0);
+ BOOST_CHECK_EQUAL( seq0.use_count(), 1 );
+ Sequence seq1(s1);
+ BOOST_CHECK_EQUAL( seq0.use_count(), 1 );
+
+ // make a block to test deallocation
+ {
+ GlSequence glseq0(seq0, cm);
+ BOOST_CHECK_EQUAL(seq0.use_count(), 2);
+ GlSequence glseq1(seq1, cm);
+ BOOST_CHECK_EQUAL(seq1.use_count(), 2);
+
+ glseq0 = glseq1;
+ BOOST_CHECK_EQUAL( seq0.use_count(), 1 );
+ BOOST_CHECK_EQUAL( seq1.use_count(), 3 );
+ }
+ BOOST_CHECK_EQUAL(seq0.use_count(), 1);
+ BOOST_CHECK_EQUAL(seq1.use_count(), 1);
+}
+*/