• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2 // test_set.cpp
3 
4 // (C) Copyright 2002 Robert Ramey - http://www.rrsd.com .
5 // (C) Copyright 2014 Jim Bell
6 // Use, modification and distribution is subject to the Boost Software
7 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
8 // http://www.boost.org/LICENSE_1_0.txt)
9 
10 // should pass compilation and execution
11 
12 #include <cstddef> // NULLsize_t
13 #include <cstdio> // remove
14 #include <fstream>
15 
16 #include <algorithm> // std::copy
17 #include <vector>
18 
19 #include <boost/config.hpp>
20 #if defined(BOOST_NO_STDC_NAMESPACE)
21 namespace std{
22     using ::size_t;
23 }
24 #endif
25 
26 #include <boost/detail/workaround.hpp>
27 #if defined(BOOST_NO_STDC_NAMESPACE)
28 namespace std{
29     using ::remove;
30 }
31 #endif
32 
33 #include <boost/archive/archive_exception.hpp>
34 
35 #include "test_tools.hpp"
36 
37 #include <boost/serialization/nvp.hpp>
38 #include <boost/serialization/set.hpp>
39 
40 #include "A.hpp"
41 #include "A.ipp"
42 
43 void
test_set()44 test_set(){
45     const char * testfile = boost::archive::tmpnam(NULL);
46     BOOST_REQUIRE(NULL != testfile);
47 
48     // test array of objects
49     std::set<A> aset;
50     aset.insert(A());
51     aset.insert(A());
52     const A * a_ptr = & * aset.begin();
53     {
54         test_ostream os(testfile, TEST_STREAM_FLAGS);
55         test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
56         oa << boost::serialization::make_nvp("aset", aset);
57         // serialize a pointer into the set
58         oa << boost::serialization::make_nvp("a_ptr", a_ptr);
59     }
60     std::set<A> aset1;
61     A * a_ptr1;
62     {
63         test_istream is(testfile, TEST_STREAM_FLAGS);
64         test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
65         ia >> boost::serialization::make_nvp("aset", aset1);
66         // deserialize a pointer into the set
67         ia >> boost::serialization::make_nvp("a_ptr1", a_ptr1);
68     }
69     BOOST_CHECK_EQUAL(aset, aset1);
70     BOOST_CHECK_EQUAL(*a_ptr1, * aset1.begin());
71     BOOST_CHECK_EQUAL(a_ptr1, & * aset1.begin());
72     std::remove(testfile);
73 }
74 
75 void
test_multiset()76 test_multiset(){
77     const char * testfile = boost::archive::tmpnam(NULL);
78     BOOST_REQUIRE(NULL != testfile);
79 
80     std::multiset<A> amultiset;
81     amultiset.insert(A());
82     amultiset.insert(A());
83     const A * a_ptr = & * amultiset.begin();
84     {
85         test_ostream os(testfile, TEST_STREAM_FLAGS);
86         test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
87         oa << boost::serialization::make_nvp("amultiset", amultiset);
88         // serialize a pointer into the set
89         oa << boost::serialization::make_nvp("a_ptr", a_ptr);
90     }
91     std::multiset<A> amultiset1;
92     A * a_ptr1;
93     {
94         test_istream is(testfile, TEST_STREAM_FLAGS);
95         test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
96         ia >> boost::serialization::make_nvp("amultiset", amultiset1);
97         // deserialize a pointer into the set
98         ia >> boost::serialization::make_nvp("a_ptr1", a_ptr1);
99     }
100     BOOST_CHECK(amultiset == amultiset1);
101     BOOST_CHECK_EQUAL(*a_ptr1, * amultiset1.begin());
102     BOOST_CHECK_EQUAL(a_ptr1, & * amultiset1.begin());
103     std::remove(testfile);
104 }
105 
test_main(int,char * [])106 int test_main( int /* argc */, char* /* argv */[] ){
107     test_set();
108     test_multiset();
109 
110     return EXIT_SUCCESS;
111 }
112