Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/tr1/test/test_tuple.cpp @ 45

Last change on this file since 45 was 29, checked in by landauf, 17 years ago

updated boost from 1_33_1 to 1_34_1

File size: 4.1 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.