$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r55325 - trunk/libs/serialization/test
From: ramey_at_[hidden]
Date: 2009-07-31 17:04:57
Author: ramey
Date: 2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
New Revision: 55325
URL: http://svn.boost.org/trac/boost/changeset/55325
Log:
Fix test_no_rtti test
extended_type_info system not based on type_id
Added:
   trunk/libs/serialization/test/test_multiple_inheritance.cpp   (contents, props changed)
Text files modified: 
   trunk/libs/serialization/test/Jamfile.v2               |     3 ++-                                     
   trunk/libs/serialization/test/polymorphic_derived1.cpp |     4 ++--                                    
   trunk/libs/serialization/test/test_diamond.cpp         |     4 ++--                                    
   trunk/libs/serialization/test/test_dll_simple.cpp      |    14 +++++++++-----                          
   trunk/libs/serialization/test/test_no_rtti.cpp         |    25 ++++++++++++++++++++++---               
   5 files changed, 37 insertions(+), 13 deletions(-)
Modified: trunk/libs/serialization/test/Jamfile.v2
==============================================================================
--- trunk/libs/serialization/test/Jamfile.v2	(original)
+++ trunk/libs/serialization/test/Jamfile.v2	2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
@@ -82,8 +82,9 @@
      [ test-bsl-run_files test_map : A ]
      [ test-bsl-run_files test_mi ]
      [ test-bsl-run_files test_multiple_ptrs : A ]
+     [ test-bsl-run_files test_multiple_inheritance ]
      [ test-bsl-run_files test_no_rtti 
-         : polymorphic_base polymorphic_derived1 polymorphic_derived2 
+         : polymorphic_base polymorphic_derived1 
      ]
      [ test-bsl-run_files test_non_intrusive ]
      [ test-bsl-run_files test_non_default_ctor ]
Modified: trunk/libs/serialization/test/polymorphic_derived1.cpp
==============================================================================
--- trunk/libs/serialization/test/polymorphic_derived1.cpp	(original)
+++ trunk/libs/serialization/test/polymorphic_derived1.cpp	2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
@@ -14,11 +14,11 @@
 
 #include "polymorphic_derived1.hpp"
 
-BOOST_CLASS_EXPORT(polymorphic_derived1)
-
 const char * polymorphic_derived1::get_key() const {
     return
         boost::serialization::type_info_implementation<
             polymorphic_derived1
         >::type::get_const_instance().get_key();
 }
+
+BOOST_CLASS_EXPORT(polymorphic_derived1)
Modified: trunk/libs/serialization/test/test_diamond.cpp
==============================================================================
--- trunk/libs/serialization/test/test_diamond.cpp	(original)
+++ trunk/libs/serialization/test/test_diamond.cpp	2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
@@ -1,12 +1,12 @@
 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
 // test_diamond.cpp
 
-// (C) Copyright 2002 Vladimir Prus. 
+// (C) Copyright 2002-2009 Vladimir Prus and Robert Ramey. 
 // Use, modification and distribution is subject to the Boost Software
 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
-// test of serialization library for diamond intheritence situations
+// test of serialization library for diamond inheritence situations
 
 #include <cstddef> // NULL
 #include <fstream>
Modified: trunk/libs/serialization/test/test_dll_simple.cpp
==============================================================================
--- trunk/libs/serialization/test/test_dll_simple.cpp	(original)
+++ trunk/libs/serialization/test/test_dll_simple.cpp	2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
@@ -73,7 +73,7 @@
         test_istream is(testfile, TEST_STREAM_FLAGS);
         boost::archive::polymorphic_text_iarchive ia(is, TEST_ARCHIVE_FLAGS);
         boost::archive::polymorphic_iarchive & pia(ia);
-        ia >> boost::serialization::make_nvp("a", a1);
+        pia >> boost::serialization::make_nvp("a", a1);
     }
     BOOST_CHECK_EQUAL(a, a1);
 
@@ -86,7 +86,7 @@
     const char * testfile = boost::archive::tmpnam(NULL);
     BOOST_REQUIRE(NULL != testfile);
 
-    const A *a = & A();
+    const A *a = new A;
     A *a1;
     {   
         test_ostream os(testfile, TEST_STREAM_FLAGS);
@@ -101,6 +101,7 @@
     BOOST_CHECK_EQUAL(*a, *a1);
 
     std::remove(testfile);
+    delete a;
 }
 
 // simple class pointer with polymorphic archive compiled in dll
@@ -109,7 +110,7 @@
     const char * testfile = boost::archive::tmpnam(NULL);
     BOOST_REQUIRE(NULL != testfile);
 
-    const A *a = & A();
+    const A *a = new A;
     A *a1;
     {   
         test_ostream os(testfile, TEST_STREAM_FLAGS);
@@ -126,6 +127,7 @@
     BOOST_CHECK_EQUAL(*a, *a1);
 
     std::remove(testfile);
+    delete a;
 }
 
 #include "B.hpp"
@@ -184,7 +186,7 @@
     const char * testfile = boost::archive::tmpnam(NULL);
     BOOST_REQUIRE(NULL != testfile);
 
-    const B *b = & B();
+    const B *b = new B;
     B *b1;
     {   
         test_ostream os(testfile, TEST_STREAM_FLAGS);
@@ -199,6 +201,7 @@
     BOOST_CHECK_EQUAL(*b, *b1);
 
     std::remove(testfile);
+    delete b;
 }
 
 // derived class pointer with base polymorphic archive compiled in dll
@@ -207,7 +210,7 @@
     const char * testfile = boost::archive::tmpnam(NULL);
     BOOST_REQUIRE(NULL != testfile);
 
-    const B *b = & B();
+    const B *b = new B;
     B *b1;
     {   
         test_ostream os(testfile, TEST_STREAM_FLAGS);
@@ -224,6 +227,7 @@
     BOOST_CHECK_EQUAL(*b, *b1);
 
     std::remove(testfile);
+    delete b;
 }
 
 
Added: trunk/libs/serialization/test/test_multiple_inheritance.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/serialization/test/test_multiple_inheritance.cpp	2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
@@ -0,0 +1,125 @@
+/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
+// test_multiple_inheritance.cpp
+
+// (C) Copyright 2009 Robert Ramey. 
+// Use, modification and distribution is subject to the Boost Software
+// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+// test of serialization library for multiple inheritence situations
+
+#include <cassert>
+#include <fstream>
+
+#include <boost/config.hpp>
+#include <cstdio> // remove
+#if defined(BOOST_NO_STDC_NAMESPACE)
+namespace std{ 
+    using ::remove;
+}
+#endif
+
+#include "test_tools.hpp"
+
+#include <boost/serialization/access.hpp>
+#include <boost/serialization/base_object.hpp>
+#include <boost/serialization/nvp.hpp>
+#include <boost/serialization/export.hpp>
+
+struct Base1 {
+    int m_x;
+    Base1(){}
+    Base1(int x) : m_x(1 + x) {}
+    virtual ~Base1() {}
+    bool operator==(Base1 & rhs) const {
+        return m_x == rhs.m_x;
+    }
+    // serialize
+    friend class boost::serialization::access;
+    template<class Archive>
+    void serialize(Archive & ar, const unsigned int /* file_version */) {
+        ar & BOOST_SERIALIZATION_NVP(m_x);
+    }
+};
+
+//BOOST_CLASS_EXPORT(Base1)
+
+struct Base2 {
+    int m_x;
+    Base2(){}
+    Base2(int x) : m_x(2 + x) {}
+    virtual ~Base2() {}
+    bool operator==(Base2 & rhs) const {
+        return m_x == rhs.m_x;
+    }
+    // serialize
+    friend class boost::serialization::access;
+    template<class Archive>
+    void serialize(Archive & ar, const unsigned int /* file_version */) {
+        ar & BOOST_SERIALIZATION_NVP(m_x);
+    }
+};
+
+//BOOST_CLASS_EXPORT(Base2)
+
+struct Sub :
+    public Base1, 
+    public Base2 
+{
+    int m_x;
+    Sub(){}
+    Sub(int x) :
+        Base1(x),
+        Base2(x),
+        m_x(x) 
+    {}
+    bool operator==(Sub & rhs) const {
+        if(! Base2::operator==(rhs))
+            return false;
+        if(! Base1::operator==(rhs))
+            return false;
+        return m_x == rhs.m_x;
+    }
+    virtual ~Sub() {}
+
+    // serialize
+    friend class boost::serialization::access;
+    template<class Archive>
+    void serialize(Archive &ar, const unsigned int /* file_version */)
+    {
+        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base1);
+        ar & BOOST_SERIALIZATION_BASE_OBJECT_NVP(Base2);
+        ar & BOOST_SERIALIZATION_NVP(m_x);
+    }
+};
+
+BOOST_CLASS_EXPORT(Sub)
+
+int
+test_main( int /* argc */, char* /* argv */[] )
+{
+    const char * testfile = boost::archive::tmpnam(NULL);
+    BOOST_REQUIRE(NULL != testfile);
+    Base2 * pb2;
+    {
+        // serialize
+        pb2 = new Sub(2);
+
+        test_ostream ofs(testfile);
+        test_oarchive oa(ofs);
+        oa << boost::serialization::make_nvp("Base2", pb2);
+    }
+    Base2 * pb2_1;
+    {
+        // de-serialize
+        test_istream ifs(testfile);
+        test_iarchive ia(ifs);
+        ia >> boost::serialization::make_nvp("Base2", pb2_1);
+    }
+    Sub *s1 = dynamic_cast<Sub *>(pb2);
+    BOOST_CHECK(0 != s1);
+    Sub *s2 = dynamic_cast<Sub *>(pb2_1);
+    BOOST_CHECK(0 != s2);
+    BOOST_CHECK(*s1 == *s2);
+    return EXIT_SUCCESS;
+}
Modified: trunk/libs/serialization/test/test_no_rtti.cpp
==============================================================================
--- trunk/libs/serialization/test/test_no_rtti.cpp	(original)
+++ trunk/libs/serialization/test/test_no_rtti.cpp	2009-07-31 17:04:56 EDT (Fri, 31 Jul 2009)
@@ -16,6 +16,7 @@
 
 #include <cstddef>
 #include <fstream>
+#include <iostream>
 
 #include <boost/config.hpp>
 #include <cstdio> // remove
@@ -35,11 +36,23 @@
 
 #include <boost/serialization/type_info_implementation.hpp>
 #include <boost/serialization/extended_type_info_no_rtti.hpp>
+#include <boost/serialization/export.hpp>
+#include <boost/serialization/nvp.hpp>
 
 #include "polymorphic_base.hpp"
 #include "polymorphic_derived1.hpp"
-#define POLYMORPHIC_DERIVED2_IMPORT
+
 #include "polymorphic_derived2.hpp"
+BOOST_CLASS_EXPORT(polymorphic_derived2)
+
+template void polymorphic_derived2::serialize(
+    test_oarchive & ar,
+    const unsigned int version
+);
+template void polymorphic_derived2::serialize(
+    test_iarchive & ar,
+    const unsigned int version
+);
 
 // save derived polymorphic class
 void save_derived(const char *testfile)
@@ -50,7 +63,9 @@
     polymorphic_derived1 *rd1 = new polymorphic_derived1;
     polymorphic_derived2 *rd2 = new polymorphic_derived2;
 
+    std::cout << "saving polymorphic_derived1 (no_rtti)\n";
     oa << BOOST_SERIALIZATION_NVP(rd1);
+    std::cout << "saving polymorphic_derived2\n";
     oa << BOOST_SERIALIZATION_NVP(rd2);
 
     // the above opereration registers the derived classes as a side
@@ -58,7 +73,9 @@
     // a base class pointer.
     polymorphic_base *rb1 =  rd1;
     polymorphic_base *rb2 =  rd2;
+    std::cout << "saving polymorphic_derived1 (no_rtti) through base (no_rtti)\n";
     oa << BOOST_SERIALIZATION_NVP(rb1);
+    std::cout << "saving polymorphic_derived2 through base (no_rtti)\n";
     oa << BOOST_SERIALIZATION_NVP(rb2);
 
     delete rd1;
@@ -74,6 +91,7 @@
     polymorphic_derived1 *rd1 = NULL;
     polymorphic_derived2 *rd2 = NULL;
 
+    std::cout << "loading polymorphic_derived1 (no_rtti)\n";
     ia >> BOOST_SERIALIZATION_NVP(rd1);
 
     BOOST_CHECK_MESSAGE(
@@ -88,8 +106,8 @@
         "restored pointer d1 not of correct type"
     );
 
+    std::cout << "loading polymorphic_derived2\n";
     ia >> BOOST_SERIALIZATION_NVP(rd2);
-
     BOOST_CHECK_MESSAGE(
         boost::serialization::type_info_implementation<
             polymorphic_derived2
@@ -101,13 +119,13 @@
         ,
         "restored pointer d2 not of correct type"
     );
-
     polymorphic_base *rb1 = NULL;
     polymorphic_base *rb2 = NULL;
 
     // the above opereration registers the derived classes as a side
     // effect.  Hence, instances can now be correctly serialized through
     // a base class pointer.
+    std::cout << "loading polymorphic_derived1 (no_rtti) through base (no_rtti)\n";
     ia >> BOOST_SERIALIZATION_NVP(rb1);
 
     BOOST_CHECK_MESSAGE(
@@ -127,6 +145,7 @@
         "restored pointer b1 not of correct type"
     );
 
+    std::cout << "loading polymorphic_derived2 through base (no_rtti)\n";
     ia >> BOOST_SERIALIZATION_NVP(rb2);
 
     BOOST_CHECK_MESSAGE(