]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/tr1/test/test_array.cpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / tr1 / test / test_array.cpp
CommitLineData
7c673cae
FG
1// (C) Copyright John Maddock 2005.
2// Use, modification and distribution are subject to the
3// Boost Software License, Version 1.0. (See accompanying file
4// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#ifdef TEST_STD_HEADERS
7#include <array>
8#else
9#include <boost/tr1/array.hpp>
10#endif
11
12#include <string>
13#include <boost/static_assert.hpp>
14#include <boost/type_traits/is_same.hpp>
15
16#include "verify_return.hpp"
17
18template <class T>
19void check_array(T& a)
20{
21 typedef typename T::reference reference;
22 typedef typename T::const_reference const_reference;
23 typedef typename T::iterator iterator;
24 typedef typename T::const_iterator const_iterator;
25 typedef typename T::size_type size_type;
26 typedef typename T::difference_type difference_type;
27 typedef typename T::value_type value_type;
28 typedef typename T::reverse_iterator reverse_iterator;
29 typedef typename T::const_reverse_iterator const_reverse_iterator;
30
31 BOOST_STATIC_ASSERT((::boost::is_same<value_type&, reference>::value));
32 BOOST_STATIC_ASSERT((::boost::is_same<value_type const&, const_reference>::value));
33 BOOST_STATIC_ASSERT((::boost::is_same<std::size_t, size_type>::value));
34 BOOST_STATIC_ASSERT((::boost::is_same<std::ptrdiff_t, difference_type>::value));
35 BOOST_STATIC_ASSERT((::boost::is_same<std::reverse_iterator<iterator>, reverse_iterator>::value));
36 BOOST_STATIC_ASSERT((::boost::is_same<std::reverse_iterator<const_iterator>, const_reverse_iterator>::value));
37
38 const T& ca = a;
39 const T& ca2 = a;
40 verify_return_type(a.begin(), iterator());
41 verify_return_type(ca.begin(), const_iterator());
42 verify_return_type(a.end(), iterator());
43 verify_return_type(ca.end(), const_iterator());
44 verify_return_type(a.rbegin(), reverse_iterator());
45 verify_return_type(ca.rbegin(), const_reverse_iterator());
46 verify_return_type(a.rend(), reverse_iterator());
47 verify_return_type(ca.rend(), const_reverse_iterator());
48
49 verify_return_type(ca.size(), size_type(0));
50 verify_return_type(ca.max_size(), size_type(0));
51 verify_return_type(ca.empty(), false);
52
53 verify_return_type(&a[0], static_cast<value_type*>(0));
54 verify_return_type(&ca[0], static_cast<const value_type*>(0));
55 verify_return_type(&a.at(0), static_cast<value_type*>(0));
56 verify_return_type(&ca.at(0), static_cast<const value_type*>(0));
57 verify_return_type(&a.front(), static_cast<value_type*>(0));
58 verify_return_type(&ca.front(), static_cast<const value_type*>(0));
59 verify_return_type(&a.back(), static_cast<value_type*>(0));
60 verify_return_type(&ca.back(), static_cast<const value_type*>(0));
61 //verify_return_type(a.data(), static_cast<value_type*>(0));
62 verify_return_type(ca.data(), static_cast<const value_type*>(0));
63
64 // swap:
65 std::tr1::swap(a, a);
66 verify_return_type(ca == ca2, false);
67 verify_return_type(ca != ca2, false);
68 verify_return_type(ca < ca2, false);
69 verify_return_type(ca > ca2, false);
70 verify_return_type(ca <= ca2, false);
71 verify_return_type(ca >= ca2, false);
72
73 BOOST_STATIC_ASSERT((::boost::is_same< typename std::tr1::tuple_element<0,T>::type, value_type>::value));
74 verify_return_type(&std::tr1::get<0>(a), static_cast<value_type*>(0));
75 verify_return_type(&std::tr1::get<0>(ca), static_cast<const value_type*>(0));
76}
77
78int main()
79{
80 std::tr1::array<int,2> a1 = {};
81 check_array(a1);
82 BOOST_STATIC_ASSERT((std::tr1::tuple_size<std::tr1::array<int,2> >::value == 2));
83
84 std::tr1::array<std::string,4> a2 = { "abc", "def", "", "y", };
85 check_array(a2);
86 BOOST_STATIC_ASSERT((std::tr1::tuple_size<std::tr1::array<std::string,4> >::value == 4));
87 return 0;
88}
89