blob: 50bc21be236360546dd7aadac6348a2833851eab [file] [log] [blame]
Brian Silverman88678712018-08-04 23:56:48 -07001/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2// test_polymorphic.cpp
3
4// (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
5// Use, modification and distribution is subject to the Boost Software
6// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8
9// should pass compilation and execution
10
11#include <fstream>
12
13#include <cstdio> // remove
14#include <boost/config.hpp>
15#if defined(BOOST_NO_STDC_NAMESPACE)
16namespace std{
17 using ::remove;
18}
19#endif
20
21#include "../test/test_tools.hpp"
22
23#if !defined(BOOST_ARCHIVE_TEST)
24#define BOOST_ARCHIVE_TEST polymorphic_text_archive.hpp
25#endif
26
27// the following is to ensure that when one of the libraries changes
28// BJAM rebuilds and relinks the test.
29/*
30#include "polymorphic_text_archive.hpp"
31#include "polymorphic_text_warchive.hpp"
32#include "polymorphic_binary_archive.hpp"
33#include "polymorphic_xml_archive.hpp"
34#include "polymorphic_xml_warchive.hpp"
35*/
36
37#include <boost/preprocessor/stringize.hpp>
38// #include <boost/preprocessor/cat.hpp>
39// the following fails with (only!) gcc 3.4
40// #include BOOST_PP_STRINGIZE(BOOST_PP_CAT(../test/,BOOST_ARCHIVE_TEST))
41// just copy over the files from the test directory
42#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
43
44#include <boost/archive/polymorphic_oarchive.hpp>
45#include <boost/archive/polymorphic_iarchive.hpp>
46
47#include <boost/serialization/nvp.hpp>
48#include "../test/test_polymorphic_A.hpp"
49
50int test_main(int /* argc */, char * /* argv */ [])
51{
52 const char * testfile = boost::archive::tmpnam(NULL);
53 BOOST_REQUIRE(NULL != testfile);
54 const data d;
55 data d1;
56 // test using using polymorphic interface
57 {
58 test_ostream os(testfile, TEST_STREAM_FLAGS);
59 test_oarchive oa_implementation(os);
60 boost::archive::polymorphic_oarchive & oa_interface = oa_implementation;
61 oa_interface << BOOST_SERIALIZATION_NVP(d);
62 }
63 {
64 test_istream is(testfile, TEST_STREAM_FLAGS);
65 test_iarchive ia_implementation(is);
66 boost::archive::polymorphic_iarchive & ia_interface = ia_implementation;
67 ia_interface >> BOOST_SERIALIZATION_NVP(d1);
68 }
69 BOOST_CHECK(d == d1);
70 std::remove(testfile);
71
72 // test using using polymorphic implementation.
73 {
74 test_ostream os(testfile, TEST_STREAM_FLAGS);
75 test_oarchive oa_implementation(os);
76 oa_implementation << BOOST_SERIALIZATION_NVP(d);
77 }
78 {
79 test_istream is(testfile, TEST_STREAM_FLAGS);
80 test_iarchive ia_implementation(is);
81 ia_implementation >> BOOST_SERIALIZATION_NVP(d1);
82 }
83 BOOST_CHECK(d == d1);
84 std::remove(testfile);
85
86 // test using using polymorphic implementation.
87 {
88 test_ostream os(testfile, TEST_STREAM_FLAGS);
89 boost::archive::polymorphic_oarchive * oa_implementation
90 = new test_oarchive(os);
91 *oa_implementation << BOOST_SERIALIZATION_NVP(d);
92 delete oa_implementation;
93 }
94 {
95 test_istream is(testfile, TEST_STREAM_FLAGS);
96 boost::archive::polymorphic_iarchive * ia_implementation
97 = new test_iarchive(is);
98 *ia_implementation >> BOOST_SERIALIZATION_NVP(d1);
99 delete ia_implementation;
100 }
101 BOOST_CHECK(d == d1);
102 std::remove(testfile);
103 return EXIT_SUCCESS;
104}