]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/serialization/test/test_tracking.cpp
1 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2 // test_tracking_save.cpp
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)
9 // should pass compilation and execution
11 #include <cstddef> // NULL
14 #include <boost/config.hpp>
15 #include <cstdio> // remove
16 #if defined(BOOST_NO_STDC_NAMESPACE)
22 #include "test_tools.hpp"
23 #include <boost/serialization/tracking.hpp>
24 #include <boost/serialization/nvp.hpp>
26 #define TEST_CLASS(N, TRACKING) \
29 friend class boost::serialization::access; \
30 template<class Archive> \
31 void serialize(Archive & /* ar */, const unsigned int /* file_version */){ \
35 static unsigned int count; \
37 unsigned int N::count = 0;\
38 BOOST_CLASS_TRACKING(N, TRACKING)
40 TEST_CLASS(AN
, ::boost::serialization::track_never
)
41 TEST_CLASS(AS
, ::boost::serialization::track_selectively
)
42 TEST_CLASS(AA
, ::boost::serialization::track_always
)
45 TEST_CLASS(PAN
, ::boost::serialization::track_never
)
46 TEST_CLASS(PAS
, ::boost::serialization::track_selectively
)
47 TEST_CLASS(PAA
, ::boost::serialization::track_always
)
49 void out(const char *testfile
)
51 test_ostream
os(testfile
, TEST_STREAM_FLAGS
);
52 test_oarchive
oa(os
, TEST_ARCHIVE_FLAGS
);
53 // write object twice to check tracking
57 oa
<< BOOST_SERIALIZATION_NVP(an
) << BOOST_SERIALIZATION_NVP(an
);
58 BOOST_CHECK(an
.count
== 2);
59 oa
<< BOOST_SERIALIZATION_NVP(as
) << BOOST_SERIALIZATION_NVP(as
);
60 BOOST_CHECK(as
.count
== 2);
61 oa
<< BOOST_SERIALIZATION_NVP(aa
) << BOOST_SERIALIZATION_NVP(aa
);
62 BOOST_CHECK(aa
.count
== 1);
67 oa
<< BOOST_SERIALIZATION_NVP(pan
) << BOOST_SERIALIZATION_NVP(pan
);
68 BOOST_CHECK(pan
->count
== 2);
69 oa
<< BOOST_SERIALIZATION_NVP(pas
) << BOOST_SERIALIZATION_NVP(pas
);
70 BOOST_CHECK(pas
->count
== 1);
71 oa
<< BOOST_SERIALIZATION_NVP(paa
) << BOOST_SERIALIZATION_NVP(paa
);
72 BOOST_CHECK(paa
->count
== 1);
78 void in(const char *testfile
)
80 test_istream
is(testfile
, TEST_STREAM_FLAGS
);
81 test_iarchive
ia(is
, TEST_ARCHIVE_FLAGS
);
82 // read object twice to check tracking
91 ia
>> BOOST_SERIALIZATION_NVP(an
) >> BOOST_SERIALIZATION_NVP(an
);
92 BOOST_CHECK(an
.count
== 2);
93 ia
>> BOOST_SERIALIZATION_NVP(as
) >> BOOST_SERIALIZATION_NVP(as
);
94 BOOST_CHECK(as
.count
== 2);
95 ia
>> BOOST_SERIALIZATION_NVP(aa
) >> BOOST_SERIALIZATION_NVP(aa
);
96 BOOST_CHECK(aa
.count
== 1);
105 ia
>> BOOST_SERIALIZATION_NVP(pan
);
106 ia
>> BOOST_SERIALIZATION_NVP(pan
);
107 BOOST_CHECK(pan
->count
== 2);
108 ia
>> BOOST_SERIALIZATION_NVP(pas
);
109 ia
>> BOOST_SERIALIZATION_NVP(pas
);
110 BOOST_CHECK(pas
->count
== 1);
111 ia
>> BOOST_SERIALIZATION_NVP(paa
);
112 ia
>> BOOST_SERIALIZATION_NVP(paa
);
113 BOOST_CHECK(paa
->count
== 1);
120 test_main( int /* argc */, char* /* argv */[] )
122 const char * testfile
= boost::archive::tmpnam(NULL
);
123 BOOST_REQUIRE(NULL
!= testfile
);
127 std::remove(testfile
);