Figured out how to serialize a shared_ptr<string>
[mussa.git] / alg / test / test_sequence.cpp
index 350deed58d440465b9c3954096c0ae0fad12d9c8..c6a4ca6346afdefec6eedf926b22e31c00dc4e2e 100644 (file)
@@ -482,7 +482,7 @@ BOOST_AUTO_TEST_CASE( get_name )
   seq.set_fasta_header("fasta human");
   BOOST_CHECK_EQUAL( seq.get_name(), "fasta human");
 }
-/*
+
 BOOST_AUTO_TEST_CASE( serialize_simple )
 {
   std::string seq_string = "AAGGCCTT";
@@ -496,7 +496,6 @@ BOOST_AUTO_TEST_CASE( serialize_simple )
     BOOST_CHECK_EQUAL(seq, const_seq);
     oarchive << const_seq;
   }
-
   Sequence seq_loaded;
   {
     std::istringstream iss(oss.str());
@@ -535,7 +534,9 @@ BOOST_AUTO_TEST_CASE( serialize_tree )
   BOOST_CHECK_EQUAL(seq_loaded, seq);
 }  
 
-BOOST_AUTO_TEST_CASE( serialize_xml_tree )
+// this writes out an "old" style annotated sequence
+// with annotations attached as "motifs" and "annots"
+BOOST_AUTO_TEST_CASE( serialize_xml_sequence )
 {
   std::string seq_string = "AAGGCCTT";
   Sequence seq(seq_string);
@@ -551,15 +552,43 @@ BOOST_AUTO_TEST_CASE( serialize_xml_tree )
     boost::archive::xml_oarchive oarchive(oss);
     const Sequence& const_seq(seq);
     BOOST_CHECK_EQUAL(seq, const_seq);
-    oarchive << boost::serialization::make_nvp("seq", const_seq);
+    oarchive << boost::serialization::make_nvp("root", const_seq);
   }
-  
   Sequence seq_loaded;
   {
     std::istringstream iss(oss.str());
     boost::archive::xml_iarchive iarchive(iss);
-    iarchive >> boost::serialization::make_nvp("seq", seq_loaded);
+    iarchive >> boost::serialization::make_nvp("root", seq_loaded);
   }
   BOOST_CHECK_EQUAL(seq_loaded, seq);
 }
-*/
+
+BOOST_AUTO_TEST_CASE( serialize_xml_two )
+{
+  std::string seq_string = "AAGGCCTT";
+  Sequence seq1(seq_string);
+  Sequence seq2(seq1);
+
+  std::ostringstream oss;
+  // allocate/deallocate serialization components
+  {
+    boost::archive::xml_oarchive oarchive(oss);
+    const Sequence& const_seq1(seq1);
+    const Sequence& const_seq2(seq2);
+    oarchive << boost::serialization::make_nvp("seq1", const_seq1);
+    oarchive << boost::serialization::make_nvp("seq2", const_seq2);
+  }
+  //std::cout << "xml: " << oss.str() << std::endl;
+  Sequence seq1_loaded;
+  Sequence seq2_loaded;
+  {
+    std::istringstream iss(oss.str());
+    boost::archive::xml_iarchive iarchive(iss);
+    iarchive >> boost::serialization::make_nvp("seq1", seq1_loaded);
+    iarchive >> boost::serialization::make_nvp("seq2", seq2_loaded);
+  }
+  BOOST_CHECK_EQUAL(seq1_loaded, seq1);
+  BOOST_CHECK_EQUAL(seq2_loaded, seq2);
+  // test if our pointers are the same
+  BOOST_CHECK_EQUAL(seq1_loaded.c_str(), seq2_loaded.c_str());
+}