make Sequence a subclass of std::string
[mussa.git] / alg / test / test_sequence.cpp
index 98051e290bbfda1e51f878be0d7a0a1386e5ad8c..1d9051010ac6486a23f3d76e691b97bc16304f09 100644 (file)
@@ -52,31 +52,32 @@ BOOST_AUTO_TEST_CASE( sequence_eol_conventions )
 //! Do simple operations work correctly?
 BOOST_AUTO_TEST_CASE( sequence_filter )
 {
-  Sequence s1("AATTGGCC");
-  BOOST_CHECK_EQUAL(s1.get_seq(), "AATTGGCC");
+  const char *core_seq = "AATTGGCC";
+  Sequence s1(core_seq);
+  BOOST_CHECK_EQUAL(s1, core_seq);
 
   Sequence s2("aattggcc");
-  BOOST_CHECK_EQUAL(s2.get_seq(), "AATTGGCC");
+  BOOST_CHECK_EQUAL(s2, "AATTGGCC");
   BOOST_CHECK_EQUAL(s2.rev_comp(), "GGCCAATT");
-  BOOST_CHECK_EQUAL(s2.size(), s2.get_seq().size());
-  BOOST_CHECK_EQUAL(s2.c_seq(), s2.get_seq().c_str());
+  BOOST_CHECK_EQUAL(s2.size(), s2.size());
+  BOOST_CHECK_EQUAL(s2.c_str(), core_seq);
 
   Sequence s3("asdfg");
-  BOOST_CHECK_EQUAL(s3.get_seq(), "ANNNG");
+  BOOST_CHECK_EQUAL(s3, "ANNNG");
   BOOST_CHECK_EQUAL(s3.subseq(0,2), "AN");
 
   s3.set_filtered_sequence("AAGGCCTT", 0, 2); 
-  BOOST_CHECK_EQUAL(s3.get_seq(), "AA");
+  BOOST_CHECK_EQUAL(s3, "AA");
   s3.set_filtered_sequence("AAGGCCTT", 2, 2);
-  BOOST_CHECK_EQUAL( s3.get_seq(), "GG");
+  BOOST_CHECK_EQUAL( s3, "GG");
   s3.set_filtered_sequence("AAGGCCTT", 4);
-  BOOST_CHECK_EQUAL( s3.get_seq(), "CCTT");
+  BOOST_CHECK_EQUAL( s3, "CCTT");
   
   s3.clear();
-  BOOST_CHECK_EQUAL(s3.get_seq(), "");
+  BOOST_CHECK_EQUAL(s3, "");
 
-  s3.set_seq("AAGGFF");
-  BOOST_CHECK_EQUAL(s3.get_seq(), "AAGGNN");
+  s3 = "AAGGFF";
+  BOOST_CHECK_EQUAL(s3, "AAGGNN");
 }
 
 //! Can we load data from a file
@@ -270,3 +271,50 @@ BOOST_AUTO_TEST_CASE( annotate_from_sequence )
   BOOST_CHECK_EQUAL(seq.annotations().size(), count);
 }
 
+BOOST_AUTO_TEST_CASE( subseq_annotation_test )
+{
+  string s("CCGCCCCCCATCATCGCGGCTCTCCGAGAGTCCCGCGCCCCACTCCCGGC"
+           "ACCCACCTGACCGCGGGCGGCTCCGGCCCCGCTTCGCCCCACTGCGATCA"
+           "GTCGCGTCCCGCAGGCCAGGCACGCCCCGCCGCTCCCGCTGCGCCGGGCG"
+           "TCTGGGACCTCGGGCGGCTCCTCCGAGGGGCGGGGCAGCCGGGAGCCACG"
+           "CCCCCGCAGGTGAGCCGGCCACGCCCACCGCCCGTGGGAAGTTCAGCCTC"
+           "GGGGCTCCAGCCCCGCGGGAATGGCAGAACTTCGCACGCGGAACTGGTAA"
+           "CCTCCAGGACACCTCGAATCAGGGTGATTGTAGCGCAGGGGCCTTGGCCA"
+           "AGCTAAAACTTTGGAAACTTTAGATCCCAGACAGGTGGCTTTCTTGCAGT");
+  Sequence seq(s);
+
+
+  seq.add_annotation(annot(0, 10, "0-10", "0-10"));
+  seq.add_annotation(annot(10, 20, "10-20", "10-20"));
+  seq.add_annotation(annot(0, 20, "0-20", "0-20"));
+  seq.add_annotation(annot(8, 12, "8-12", "8-12"));
+  seq.add_annotation(annot(100, 5000, "100-5000", "100-5000"));
+
+  Sequence subseq = seq.subseq(5, 10);
+  const list<annot> annots = subseq.annotations();
+  // generate some ground truth
+  list<annot> correct;
+  correct.push_back(annot(0, 5, "0-10",  "0-10"));
+  correct.push_back(annot(5,10, "10-20", "10-20"));
+  correct.push_back(annot(0,10, "0-20",  "0-20"));
+  correct.push_back(annot(3, 7, "8-12",  "8-12"));
+  BOOST_REQUIRE_EQUAL( annots.size(), correct.size() );
+
+  list<annot>::iterator correct_i = correct.begin();
+  list<annot>::const_iterator annot_i = annots.begin();
+  for(; annot_i != annots.end(); ++annot_i, ++correct_i)
+  {
+    BOOST_CHECK( *annot_i == *correct_i );
+  }
+}
+
+BOOST_AUTO_TEST_CASE( out_operator )
+{
+  string s("AAGGCCTT");
+  Sequence seq(s);
+
+  ostringstream buf;
+  buf << s;
+  BOOST_CHECK_EQUAL( s, buf.str() );
+}
+