]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/tr1/test/test_tuple.cpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / tr1 / test / test_tuple.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 <tuple>
8#include <functional>
9#include <utility>
10#else
11#include <boost/tr1/tuple.hpp>
12#include <boost/tr1/functional.hpp>
13#include <boost/tr1/utility.hpp>
14#endif
15
16#include <boost/static_assert.hpp>
17#include <boost/type_traits/is_same.hpp>
18
19#include "verify_return.hpp"
20
21int main()
22{
23 std::tr1::tuple<int> t1a;
24 std::tr1::tuple<int> t1b(0);
25 std::tr1::tuple<int> t1c(t1b);
26 t1a = t1c;
27 std::tr1::tuple<int> t1d(std::tr1::tuple<short>(0));
28 t1a = std::tr1::tuple<short>(0);
29
30 std::tr1::tuple<int, long> t2a;
31 std::tr1::tuple<int, long> t2b(0, 0);
32 std::tr1::tuple<int, long> t2c(t2b);
33 t2a = t2c;
34 std::tr1::tuple<int, long> t2d(std::tr1::tuple<short, int>(0, 0));
35 t2a = std::tr1::tuple<short, int>(0, 0);
36 //std::tr1::tuple<int, long> t2e(std::make_pair(0, 0L));
37 //t2e = std::make_pair(0, 0L);
38
39 // check implementation limits:
40 std::tr1::tuple<int, long, float, int, int, int, int, int, int> t10(0, 0, 0, 0, 0, 0, 0, 0, 0);
41
42 // make_tuple:
43 verify_return_type(std::tr1::make_tuple(0, 0, 0L), std::tr1::tuple<int, int, long>());
44 int i = 0;
45 std::tr1::tuple<int&, int, long> t3a(std::tr1::make_tuple(std::tr1::ref(i), 0, 0L));
46 verify_return_type(std::tr1::make_tuple(std::tr1::ref(i), 0, 0L), t3a);
47 std::tr1::tuple<const int&, int, long> t3b(std::tr1::make_tuple(std::tr1::cref(i), 0, 0L));
48 verify_return_type(std::tr1::make_tuple(std::tr1::cref(i), 0, 0L), t3b);
49 long j = 0;
50 std::tr1::tuple<int&, long&> tt(std::tr1::tie(i,j));
51
52 BOOST_STATIC_ASSERT((::std::tr1::tuple_size<std::tr1::tuple<int, long> >::value == 2));
53 BOOST_STATIC_ASSERT((::std::tr1::tuple_size<std::tr1::tuple<int, long, float, int, int, int, int, int, int> >::value == 9));
54
55 BOOST_STATIC_ASSERT((::boost::is_same< ::std::tr1::tuple_element<0, std::tr1::tuple<int, long> >::type, int>::value));
56 BOOST_STATIC_ASSERT((::boost::is_same< ::std::tr1::tuple_element<1, std::tr1::tuple<int, long> >::type, long>::value));
57 BOOST_STATIC_ASSERT((::boost::is_same< ::std::tr1::tuple_element<0, std::tr1::tuple<int&, long> >::type, int&>::value));
58 BOOST_STATIC_ASSERT((::boost::is_same< ::std::tr1::tuple_element<0, std::tr1::tuple<const int&, long> >::type, const int&>::value));
59
60 // get:
61 verify_return_type(&::std::tr1::get<0>(t1a), static_cast<int*>(0));
62 verify_return_type(&::std::tr1::get<1>(t2d), static_cast<long*>(0));
63 verify_return_type(&::std::tr1::get<0>(t3a), static_cast<int*>(0));
64 verify_return_type(&::std::tr1::get<0>(t3b), static_cast<const int*>(0));
65 const std::tr1::tuple<int>& cr1 = t1a;
66 verify_return_type(&::std::tr1::get<0>(cr1), static_cast<const int*>(0));
67 const std::tr1::tuple<int&, int, long>& cr2 = t3a;
68 verify_return_type(&::std::tr1::get<0>(cr2), static_cast<int*>(0));
69 const std::tr1::tuple<const int&, int, long>& cr3 = t3b;
70 // comparison:
71 verify_return_type(cr2 == cr3, false);
72 verify_return_type(cr2 != cr3, false);
73 verify_return_type(cr2 < cr3, false);
74 verify_return_type(cr2 > cr3, false);
75 verify_return_type(cr2 <= cr3, false);
76 verify_return_type(cr2 >= cr3, false);
77
78 // pair interface:
79 BOOST_STATIC_ASSERT((::std::tr1::tuple_size<std::pair<int, long> >::value == 2));
80 BOOST_STATIC_ASSERT((::std::tr1::tuple_size<std::pair<int, float> >::value == 2));
81 BOOST_STATIC_ASSERT((::boost::is_same< ::std::tr1::tuple_element<0, std::pair<int, long> >::type, int>::value));
82 BOOST_STATIC_ASSERT((::boost::is_same< ::std::tr1::tuple_element<1, std::pair<int, long> >::type, long>::value));
83
84 std::pair<int, long> p1;
85 const std::pair<int, long>& p2 = p1;
86 verify_return_type(&std::tr1::get<0>(p1), static_cast<int*>(0));
87 verify_return_type(&std::tr1::get<1>(p1), static_cast<long*>(0));
88 verify_return_type(&std::tr1::get<0>(p2), static_cast<const int*>(0));
89 verify_return_type(&std::tr1::get<1>(p2), static_cast<const long*>(0));
90
91 return 0;
92}
93