1/////////1/////////2/////////3/////////4/////////5/////////6/////////7/////////8
2// test_array.cpp
3
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)
8
9// should pass compilation and execution
10
11#include <stdlib.h>
12
13#include <boost/config.hpp>
14#include <cstddef>
15#include <fstream>
16#include <algorithm> // equal
17#include <cstdio> // remove
18#if defined(BOOST_NO_STDC_NAMESPACE)
19namespace std{
20 using ::remove;
21}
22#endif
23#include "test_tools.hpp"
24#include <boost/serialization/array.hpp>
25#include <boost/core/no_exceptions_support.hpp>
26#include <boost/archive/archive_exception.hpp>
27
28#include "A.hpp"
29#include "A.ipp"
30
31template <class T>
32int test_std_array(){
33 const char * testfile = boost::archive::tmpnam(NULL);
34 BOOST_REQUIRE(NULL != testfile);
35
36 // test array of objects
37 const std::array<T, 10> a_array = {{T(),T(),T(),T(),T(),T(),T(),T(),T(),T()}};
38 {
39 test_ostream os(testfile, TEST_STREAM_FLAGS);
40 test_oarchive oa(os, TEST_ARCHIVE_FLAGS);
41 oa << boost::serialization::make_nvp("a_array", a_array);
42 }
43 {
44 std::array<T, 10> a_array1;
45 test_istream is(testfile, TEST_STREAM_FLAGS);
46 {
47 test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
48 ia >> boost::serialization::make_nvp("a_array", a_array1);
49 }
50 BOOST_CHECK(std::equal(a_array.begin(), a_array.end(), a_array1.begin()));
51 }
52 {
53 std::array<T, 9> a_array1;
54 test_istream is(testfile, TEST_STREAM_FLAGS);
55 {
56 test_iarchive ia(is, TEST_ARCHIVE_FLAGS);
57 bool exception_invoked = false;
58 BOOST_TRY {
59 ia >> boost::serialization::make_nvp("a_array", a_array1);
60 }
61 BOOST_CATCH (boost::archive::archive_exception const& ae){
62 BOOST_CHECK(
63 boost::archive::archive_exception::array_size_too_short
64 == ae.code
65 );
66 exception_invoked = true;
67 }
68 BOOST_CATCH_END
69 BOOST_CHECK(exception_invoked);
70 }
71 is.close();
72 }
73 std::remove(filename: testfile);
74 return EXIT_SUCCESS;
75}
76
77int test_main( int /* argc */, char* /* argv */[] ){
78 int res;
79
80 // std array
81 res = test_std_array<A>();
82 if (res != EXIT_SUCCESS)
83 return EXIT_FAILURE;
84 // test an int array for which optimized versions should be available
85 res = test_std_array<int>();
86 if (res != EXIT_SUCCESS)
87 return EXIT_FAILURE;
88
89 return EXIT_SUCCESS;
90}
91
92// EOF
93

source code of boost/libs/serialization/test/test_array.cpp