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)
19 namespace 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
31 template <class T>
test_std_array()32 int 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(testfile);
74 return EXIT_SUCCESS;
75 }
76
test_main(int,char * [])77 int 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