]>
Commit | Line | Data |
---|---|---|
b32b8144 FG |
1 | // ----------------------------------------------------------- |
2 | // Copyright (c) 2001 Jeremy Siek | |
3 | // Copyright (c) 2003-2006 Gennaro Prota | |
4 | // | |
5 | // Copyright (c) 2015 Seth Heeren | |
6 | // | |
7 | // Distributed under the Boost Software License, Version 1.0. | |
8 | // (See accompanying file LICENSE_1_0.txt or copy at | |
9 | // http://www.boost.org/LICENSE_1_0.txt) | |
10 | // | |
11 | // ----------------------------------------------------------- | |
12 | ||
13 | #include "boost/config.hpp" | |
14 | #if !defined (BOOST_NO_STRINGSTREAM) | |
15 | # include <sstream> | |
16 | #endif | |
17 | ||
18 | #include "bitset_test.hpp" | |
92f5a8d4 TL |
19 | #include <boost/dynamic_bitset/serialization.hpp> |
20 | #include <boost/config/workaround.hpp> | |
b32b8144 FG |
21 | |
22 | ||
23 | // Codewarrior 8.3 for Win fails without this. | |
24 | // Thanks Howard Hinnant ;) | |
25 | #if defined __MWERKS__ && BOOST_WORKAROUND(__MWERKS__, <= 0x3003) // 8.x | |
26 | # pragma parse_func_templ off | |
27 | #endif | |
28 | ||
29 | ||
30 | #if defined BOOST_NO_STD_WSTRING || defined BOOST_NO_STD_LOCALE | |
31 | # define BOOST_DYNAMIC_BITSET_NO_WCHAR_T_TESTS | |
32 | #endif | |
33 | ||
f67539c2 | 34 | #include <boost/serialization/vector.hpp> |
b32b8144 FG |
35 | #include <boost/archive/binary_oarchive.hpp> |
36 | #include <boost/archive/binary_iarchive.hpp> | |
37 | #include <boost/archive/xml_oarchive.hpp> | |
38 | #include <boost/archive/xml_iarchive.hpp> | |
39 | #include <sstream> | |
40 | ||
41 | namespace { | |
42 | template <typename Block> | |
43 | struct SerializableType { | |
44 | boost::dynamic_bitset<Block> x; | |
45 | ||
46 | private: | |
47 | friend class boost::serialization::access; | |
48 | template <class Archive> void serialize(Archive &ar, const unsigned int) { | |
49 | ar & BOOST_SERIALIZATION_NVP(x); | |
50 | } | |
51 | }; | |
52 | ||
53 | template <typename Block, typename IArchive, typename OArchive> | |
54 | void test_serialization( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) | |
55 | { | |
56 | SerializableType<Block> a; | |
57 | ||
58 | for (int i=0; i<128; ++i) | |
59 | a.x.resize(11*i, i%2); | |
60 | ||
61 | #if !defined (BOOST_NO_STRINGSTREAM) | |
62 | std::stringstream ss; | |
63 | ||
64 | // test serialization | |
65 | { | |
66 | OArchive oa(ss); | |
67 | oa << BOOST_SERIALIZATION_NVP(a); | |
68 | } | |
69 | ||
70 | // test de-serialization | |
71 | { | |
72 | IArchive ia(ss); | |
73 | SerializableType<Block> b; | |
74 | ia >> BOOST_SERIALIZATION_NVP(b); | |
75 | ||
76 | assert(a.x == b.x); | |
77 | } | |
78 | #else | |
79 | # error "TODO implement file-based test path?" | |
80 | #endif | |
81 | } | |
82 | ||
83 | template <typename Block> | |
84 | void test_binary_archive( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) { | |
85 | test_serialization<Block, boost::archive::binary_iarchive, boost::archive::binary_oarchive>(); | |
86 | } | |
87 | ||
88 | template <typename Block> | |
89 | void test_xml_archive( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) { | |
90 | test_serialization<Block, boost::archive::xml_iarchive, boost::archive::xml_oarchive>(); | |
91 | } | |
92 | } | |
93 | ||
94 | template <typename Block> | |
95 | void run_test_cases( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) ) | |
96 | { | |
97 | test_binary_archive<Block>(); | |
98 | test_xml_archive<Block>(); | |
99 | } | |
100 | ||
92f5a8d4 | 101 | int main() |
b32b8144 FG |
102 | { |
103 | run_test_cases<unsigned char>(); | |
104 | run_test_cases<unsigned short>(); | |
105 | run_test_cases<unsigned int>(); | |
106 | run_test_cases<unsigned long>(); | |
107 | # ifdef BOOST_HAS_LONG_LONG | |
108 | run_test_cases< ::boost::ulong_long_type>(); | |
109 | # endif | |
110 | ||
92f5a8d4 | 111 | return boost::report_errors(); |
b32b8144 | 112 | } |