File: dyn_bitset_unit_tests5.cpp

package info (click to toggle)
boost1.90 1.90.0-1
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 593,120 kB
  • sloc: cpp: 4,190,908; xml: 196,648; python: 34,618; ansic: 23,145; asm: 5,468; sh: 3,774; makefile: 1,161; perl: 1,020; sql: 728; ruby: 676; yacc: 478; java: 77; lisp: 24; csh: 6
file content (110 lines) | stat: -rw-r--r-- 2,556 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// -----------------------------------------------------------
//              Copyright (c) 2001 Jeremy Siek
//         Copyright (c) 2003-2006, 2025 Gennaro Prota
//
// Copyright (c) 2015 Seth Heeren
//
// Distributed under the Boost Software License, Version 1.0.
//    (See accompanying file LICENSE_1_0.txt or copy at
//          http://www.boost.org/LICENSE_1_0.txt)
//
// -----------------------------------------------------------

#include "bitset_test.hpp"
#include "boost/archive/binary_iarchive.hpp"
#include "boost/archive/binary_oarchive.hpp"
#include "boost/archive/xml_iarchive.hpp"
#include "boost/archive/xml_oarchive.hpp"
#include "boost/config.hpp"
#include "boost/dynamic_bitset/serialization.hpp"
#include "boost/serialization/vector.hpp"

#if ! defined( BOOST_NO_STRINGSTREAM )
#    include <sstream>
#endif

#if defined BOOST_NO_STD_WSTRING
#    define BOOST_DYNAMIC_BITSET_NO_WCHAR_T_TESTS
#endif

namespace {
template< typename Block >
struct SerializableType
{
    boost::dynamic_bitset< Block > x;

private:
    friend class boost::serialization::access;
    template< class Archive >
    void
    serialize( Archive & ar, unsigned int )
    {
        ar & BOOST_SERIALIZATION_NVP( x );
    }
};

template< typename Block, typename IArchive, typename OArchive >
void
test_serialization()
{
    SerializableType< Block > a;

    for ( int i = 0; i < 128; ++i )
        a.x.resize( 11 * i, i % 2 );

#if ! defined( BOOST_NO_STRINGSTREAM )
    std::stringstream ss;

    // test serialization
    {
        OArchive oa( ss );
        oa << BOOST_SERIALIZATION_NVP( a );
    }

    // test de-serialization
    {
        IArchive                  ia( ss );
        SerializableType< Block > b;
        ia >> BOOST_SERIALIZATION_NVP( b );

        BOOST_TEST( a.x == b.x );
    }
#else
#    error "TODO implement file-based test path?"
#endif
}

template< typename Block >
void
test_binary_archive()
{
    test_serialization< Block, boost::archive::binary_iarchive, boost::archive::binary_oarchive >();
}

template< typename Block >
void
test_xml_archive()
{
    test_serialization< Block, boost::archive::xml_iarchive, boost::archive::xml_oarchive >();
}
}

template< typename Block >
void
run_test_cases()
{
    test_binary_archive< Block >();
    test_xml_archive< Block >();
}

int
main()
{
    run_test_cases< unsigned char >();
    run_test_cases< unsigned short >();
    run_test_cases< unsigned int >();
    run_test_cases< unsigned long >();
    run_test_cases< unsigned long long >();

    return boost::report_errors();
}