Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/serialization/test/test_tracking.cpp @ 33

Last change on this file since 33 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

File size: 3.6 KB
Line 
1/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2// test_tracking_save.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_tools.hpp"
22#include <boost/preprocessor/stringize.hpp>
23#include BOOST_PP_STRINGIZE(BOOST_ARCHIVE_TEST)
24#include <boost/serialization/tracking.hpp>
25#include <boost/serialization/nvp.hpp>
26
27#define TEST_CLASS(N, TRACKING) \
28class N \
29{ \
30    friend class boost::serialization::access; \
31    template<class Archive> \
32    void serialize(Archive & /* ar */, const unsigned int /* file_version */){ \
33        ++count; \
34    } \
35public: \
36    static unsigned int count; \
37}; \
38unsigned int N::count = 0;\
39BOOST_CLASS_TRACKING(N, TRACKING)
40
41TEST_CLASS(AN, ::boost::serialization::track_never)
42TEST_CLASS(AS, ::boost::serialization::track_selectivly)
43TEST_CLASS(AA, ::boost::serialization::track_always)
44
45// test pointers
46TEST_CLASS(PAN, ::boost::serialization::track_never)
47TEST_CLASS(PAS, ::boost::serialization::track_selectivly)
48TEST_CLASS(PAA, ::boost::serialization::track_always)
49
50void out(const char *testfile)
51{
52    test_ostream os(testfile, TEST_STREAM_FLAGS);
53    test_oarchive oa(os);
54    // write object twice to check tracking
55    AN an;
56    AS as;
57    AA aa;
58    oa << BOOST_SERIALIZATION_NVP(an) << BOOST_SERIALIZATION_NVP(an);
59    BOOST_CHECK(an.count == 2);
60    oa << BOOST_SERIALIZATION_NVP(as) << BOOST_SERIALIZATION_NVP(as);
61    BOOST_CHECK(as.count == 2);
62    oa << BOOST_SERIALIZATION_NVP(aa) << BOOST_SERIALIZATION_NVP(aa);
63    BOOST_CHECK(aa.count == 1);
64
65    PAN *pan = new PAN;
66    PAS *pas = new PAS;
67    PAA *paa = new PAA;
68    oa << BOOST_SERIALIZATION_NVP(pan) << BOOST_SERIALIZATION_NVP(pan);
69    BOOST_CHECK(pan->count == 2);
70    oa << BOOST_SERIALIZATION_NVP(pas) << BOOST_SERIALIZATION_NVP(pas);
71    BOOST_CHECK(pas->count == 1);
72    oa << BOOST_SERIALIZATION_NVP(paa) << BOOST_SERIALIZATION_NVP(paa);
73    BOOST_CHECK(paa->count == 1);
74    delete pan;
75    delete pas;
76    delete paa;
77}
78
79void in(const char *testfile)
80{
81    test_istream is(testfile, TEST_STREAM_FLAGS);
82    test_iarchive ia(is);
83    // read object twice to check tracking
84    AN an;
85    AS as;
86    AA aa;
87
88    AN::count = 0;
89    AS::count = 0;
90    AA::count = 0;
91
92    ia >> BOOST_SERIALIZATION_NVP(an) >> BOOST_SERIALIZATION_NVP(an);
93    BOOST_CHECK(an.count == 2);
94    ia >> BOOST_SERIALIZATION_NVP(as) >> BOOST_SERIALIZATION_NVP(as);
95    BOOST_CHECK(as.count == 2);
96    ia >> BOOST_SERIALIZATION_NVP(aa) >> BOOST_SERIALIZATION_NVP(aa);
97    BOOST_CHECK(aa.count == 1);
98
99    PAN::count = 0;
100    PAS::count = 0;
101    PAA::count = 0;
102
103    PAN *pan = NULL;
104    PAS *pas = NULL;
105    PAA *paa = NULL;
106    ia >> BOOST_SERIALIZATION_NVP(pan);
107    ia >> BOOST_SERIALIZATION_NVP(pan);
108    BOOST_CHECK(pan->count == 2);
109    ia >> BOOST_SERIALIZATION_NVP(pas);
110    ia >> BOOST_SERIALIZATION_NVP(pas);
111    BOOST_CHECK(pas->count == 1);
112    ia >> BOOST_SERIALIZATION_NVP(paa);
113    ia >> BOOST_SERIALIZATION_NVP(paa);
114    BOOST_CHECK(paa->count == 1);
115    delete pan;
116    delete pas;
117    delete paa;
118}
119
120int
121test_main( int /* argc */, char* /* argv */[] )
122{
123    const char * testfile = boost::archive::tmpnam(NULL);
124    BOOST_REQUIRE(NULL != testfile);
125
126    out(testfile);
127    in(testfile);
128    std::remove(testfile);
129    return EXIT_SUCCESS;
130}
131
132// EOF
Note: See TracBrowser for help on using the repository browser.