• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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