#include <boost/test/auto_unit_test.hpp>
#include <boost/test/floating_point_comparison.hpp>
+#include <boost/shared_ptr.hpp>
#include <string>
using namespace std;
-BOOST_AUTO_TEST_CASE ( glsequence_operator_equal )
+BOOST_AUTO_TEST_CASE ( glsequence_operator_assignment )
{
- AnnotationColors cm;
- // I don't trust my operator = hack so lets make sure it works.
+ 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);
- Sequence seq1(s1);
+ boost::shared_ptr<Sequence> seq0(new Sequence(s0));
+ boost::shared_ptr<Sequence> seq1(new Sequence(s1));
GlSequence glseq0(seq0, cm);
BOOST_CHECK (glseq0.sequence() == s0);
BOOST_CHECK( &(glseq_copy0.sequence()) == &(glseq0.sequence()));
glseq0 = glseq1;
-
BOOST_CHECK( glseq0.sequence() == s1 );
}
BOOST_AUTO_TEST_CASE( glsequence_color )
{
- AnnotationColors cm;
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
Color black(0.0, 0.0, 0.0, 0.0);
Color c(0.1, 0.2, 0.3, 0.4);
- Sequence seq("AAGGCCTT");
+ boost::shared_ptr<Sequence> seq(new Sequence("AAGGCCTT"));
GlSequence s(seq, cm);
BOOST_CHECK_EQUAL(s.color(), black );
BOOST_AUTO_TEST_CASE( glsequence_renderable )
{
- AnnotationColors cm;
- Sequence seq("AAGGCCTT");
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
+ boost::shared_ptr<Sequence> seq(new Sequence("AAGGCCTT"));
GlSequence s(seq, cm);
// way more base pairs than viewport pixel width
BOOST_AUTO_TEST_CASE( glsequence_sequence )
{
- AnnotationColors cm;
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
string seq_string("AAGGCCTTNNAAGGCCTTNNAAGGCCTTNN");
string::size_type seqlen = seq_string.size();
- Sequence seq(seq_string);
+ boost::shared_ptr<Sequence> seq(new Sequence(seq_string));
GlSequence glseq(seq, cm);
- BOOST_CHECK( glseq.sequence_begin(0, 50) == seq.begin() );
- // always make sure we return seq.end() regardless of how much extra
+ BOOST_CHECK( glseq.sequence_begin(0, 50) == seq->begin() );
+ // always make sure we return seq->end() regardless of how much extra
// is asked for
- BOOST_CHECK( glseq.sequence_end(0, seqlen+10) == seq.end() );
+ BOOST_CHECK( glseq.sequence_end(0, seqlen+10) == seq->end() );
// do we get the right end pointer?
- BOOST_CHECK( glseq.sequence_end(0, 5) == seq.begin()+5 );
+ BOOST_CHECK( glseq.sequence_end(0, 5) == seq->begin()+5 );
// when we request far too much sequence what do we get?
- BOOST_CHECK( glseq.sequence_begin(seqlen+10, seqlen+20) == seq.end() );
- BOOST_CHECK( glseq.sequence_end(seqlen+10, seqlen+20) == seq.end() );
+ BOOST_CHECK( glseq.sequence_begin(seqlen+10, seqlen+20) == seq->end() );
+ BOOST_CHECK( glseq.sequence_end(seqlen+10, seqlen+20) == seq->end() );
// we cant ask for reversed sequences with sequence_begin/end
- BOOST_CHECK( glseq.sequence_begin(10, 5) == seq.end() );
- BOOST_CHECK( glseq.sequence_end(10, 5) == seq.end() );
+ BOOST_CHECK( glseq.sequence_begin(10, 5) == seq->end() );
+ BOOST_CHECK( glseq.sequence_end(10, 5) == seq->end() );
Sequence::const_iterator seq_itor;
// reuse seq_itor downhere
string::const_iterator str_itor;
- for(str_itor = seq.begin(),
+ for(str_itor = seq->begin(),
seq_itor = glseq.sequence_begin();
- str_itor != seq.end() and
+ str_itor != seq->end() and
seq_itor != glseq.sequence_end();
++str_itor, ++seq_itor)
{
// make sure the computation of the leftmost and rightmost base is correct
BOOST_AUTO_TEST_CASE( glsequence_leftright_base )
{
- AnnotationColors cm;
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
std::string seq_string = "AAGGCCTT";
- Sequence seq(seq_string);
+ boost::shared_ptr<Sequence> seq(new Sequence(seq_string));
GlSequence glseq(seq, cm);
BOOST_CHECK_EQUAL( glseq.leftbase( -50.0 ), 0 );
// we move the sequence around?
BOOST_AUTO_TEST_CASE( glsequence_movex )
{
- AnnotationColors cm;
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
std::string seq_string = "AAGGCCTTAAGGCCTT";
- Sequence seq(seq_string);
+ boost::shared_ptr<Sequence> seq(new Sequence(seq_string));
GlSequence glseq(seq, cm);
glseq.setX(-5);
// Check iterators
BOOST_AUTO_TEST_CASE( glsequence_check_iterators )
{
- AnnotationColors cm;
+ boost::shared_ptr<AnnotationColors> cm(new AnnotationColors);
std::string seq_string = "AAGGCCTTAAGGCCTT";
- Sequence seq(seq_string);
+ boost::shared_ptr<Sequence> seq(new Sequence(seq_string));
GlSequence glseq(seq, cm);
Sequence::const_iterator seq_begin_i;
Sequence::const_iterator seq_end_i;
- BOOST_CHECK(glseq.sequence_begin(5, -5) == seq.end());
- BOOST_CHECK(glseq.sequence_begin(0, 20) == seq.begin());
- BOOST_CHECK(glseq.sequence_begin(10,20) == seq.begin()+10);
+ BOOST_CHECK(glseq.sequence_begin(5, -5) == seq->end());
+ BOOST_CHECK(glseq.sequence_begin(0, 20) == seq->begin());
+ BOOST_CHECK(glseq.sequence_begin(10,20) == seq->begin()+10);
- BOOST_CHECK(glseq.sequence_end(5, -5) == seq.end());
- BOOST_CHECK(glseq.sequence_end(0, 20) == seq.end());
- BOOST_CHECK(glseq.sequence_end(0, 10) == seq.begin()+10);
+ BOOST_CHECK(glseq.sequence_end(5, -5) == seq->end());
+ BOOST_CHECK(glseq.sequence_end(0, 20) == seq->end());
+ BOOST_CHECK(glseq.sequence_end(0, 10) == seq->begin()+10);
glseq.setX(-5);
- BOOST_CHECK(glseq.sequence_begin(0, 10) == seq.begin()+5);
- BOOST_CHECK(glseq.sequence_end(0, 15) == seq.end());
+ BOOST_CHECK(glseq.sequence_begin(0, 10) == seq->begin()+5);
+ BOOST_CHECK(glseq.sequence_end(0, 15) == seq->end());
}
+
+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");
+ boost::shared_ptr<Sequence> seq0(new Sequence(s0));
+ BOOST_CHECK_EQUAL( seq0.use_count(), 1 );
+ boost::shared_ptr<Sequence> seq1(new Sequence(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);
+}
+
+