]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/dynamic_bitset/test/dyn_bitset_unit_tests5.cpp
update source to Ceph Pacific 16.2.2
[ceph.git] / ceph / src / boost / libs / dynamic_bitset / test / dyn_bitset_unit_tests5.cpp
CommitLineData
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
41namespace {
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
94template <typename Block>
95void run_test_cases( BOOST_EXPLICIT_TEMPLATE_TYPE(Block) )
96{
97 test_binary_archive<Block>();
98 test_xml_archive<Block>();
99}
100
92f5a8d4 101int 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}