use spirit parser for reading annot file
[mussa.git] / alg / test / test_sequence.cpp
index ae2726cc0d0321d40a82829151426308db557e7c..1e478fa4cf5a66e721a8187eef346ef06d133947 100644 (file)
@@ -5,6 +5,7 @@ namespace fs=boost::filesystem;
 
 #include <list>
 #include <iostream>
+#include <sstream>
 
 #include "alg/sequence.hpp"
 #include "mussa_exceptions.hpp"
@@ -63,6 +64,29 @@ BOOST_AUTO_TEST_CASE( sequence_load )
                                     "5' flank");
 }
 
+BOOST_AUTO_TEST_CASE( annotation_load )
+{
+  string annot_data = "human\n"
+                      "0 10 name type\n"
+                      "10 20 name\n"
+                      "20 30\n"
+                      "15 20 backward\n";
+  string s('A',100);
+  s += "GCTGCT";
+  Sequence seq(s);
+                     
+  //istringstream annot_stream(annot_data);
+  seq.parse_annot(annot_data, 0, 0);
+  typedef std::list<annot> annot_list_t;
+  annot_list_t annots = seq.annotations();
+  for(annot_list_t::iterator annot_i = annots.begin();
+      annot_i != annots.end();
+      ++annot_i)
+  {
+    std::cout << "start " << annot_i->start << endl;
+  }
+}
+
 // ticket:83 when you try to load a sequence from a file that doesn't
 // have fasta headers it crashes. 
 BOOST_AUTO_TEST_CASE( sequence_past_end ) 
@@ -161,21 +185,42 @@ BOOST_AUTO_TEST_CASE( annot_test )
 
 BOOST_AUTO_TEST_CASE( annotate_from_sequence )
 {
-  Sequence s("CCGCCCCCCATCATCGCGGCTCTCCGAGAGTCCCGCGCCCCACTCCCGGC"
-             "ACCCACCTGACCGCGGGCGGCTCCGGCCCCGCTTCGCCCCACTGCGATCA"
-             "GTCGCGTCCCGCAGGCCAGGCACGCCCCGCCGCTCCCGCTGCGCCGGGCG"
-             "TCTGGGACCTCGGGCGGCTCCTCCGAGGGGCGGGGCAGCCGGGAGCCACG"
-             "CCCCCGCAGGTGAGCCGGCCACGCCCACCGCCCGTGGGAAGTTCAGCCTC"
-             "GGGGCTCCAGCCCCGCGGGAATGGCAGAACTTCGCACGCGGAACTGGTAA"
-             "CCTCCAGGACACCTCGAATCAGGGTGATTGTAGCGCAGGGGCCTTGGCCA"
-             "AGCTAAAACTTTGGAAACTTTAGATCCCAGACAGGTGGCTTTCTTGCAGT");
+  string s("CCGCCCCCCATCATCGCGGCTCTCCGAGAGTCCCGCGCCCCACTCCCGGC"
+           "ACCCACCTGACCGCGGGCGGCTCCGGCCCCGCTTCGCCCCACTGCGATCA"
+           "GTCGCGTCCCGCAGGCCAGGCACGCCCCGCCGCTCCCGCTGCGCCGGGCG"
+           "TCTGGGACCTCGGGCGGCTCCTCCGAGGGGCGGGGCAGCCGGGAGCCACG"
+           "CCCCCGCAGGTGAGCCGGCCACGCCCACCGCCCGTGGGAAGTTCAGCCTC"
+           "GGGGCTCCAGCCCCGCGGGAATGGCAGAACTTCGCACGCGGAACTGGTAA"
+           "CCTCCAGGACACCTCGAATCAGGGTGATTGTAGCGCAGGGGCCTTGGCCA"
+           "AGCTAAAACTTTGGAAACTTTAGATCCCAGACAGGTGGCTTTCTTGCAGT");
+  string gc("GCCCCC");
+  string gga("GGACACCTC");
+  Sequence seq(s);
 
   std::list<Sequence> query_list;
-  query_list.push_back(Sequence("GCCCCC"));
-  query_list.push_back(Sequence("GGACACCTC"));
-
-  BOOST_CHECK_EQUAL( s.annotations().size(), 0 );
-  s.find_sequences(query_list.begin(), query_list.end());
-  BOOST_CHECK_EQUAL( s.annotations().size(), 4 );
+  std::list<string> string_list;
+  query_list.push_back(Sequence(gc));
+  string_list.push_back(gc);
+  query_list.push_back(Sequence(gga));
+  string_list.push_back(gga);
+
+  BOOST_CHECK_EQUAL( seq.annotations().size(), 0 );
+  seq.find_sequences(query_list.begin(), query_list.end());
+  
+  int count = 0;
+  for(list<string>::iterator string_i = string_list.begin();
+      string_i != string_list.end();
+      ++string_i)
+  {
+    string::size_type pos=0;
+    while(pos != string::npos) {
+      pos = s.find(*string_i, pos);
+      if (pos != string::npos) {
+        ++count;
+        ++pos;
+      }
+    }
+  }
+  BOOST_CHECK_EQUAL(seq.annotations().size(), count);
 }