]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mp11/test/tuple_transform.cpp
22ed0ea0cb5b027ce7a2a337fe603b92f106395b
2 // Copyright 2020 Hans Dembinski.
4 // Distributed under the Boost Software License, Version 1.0.
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
9 #include <boost/mp11/tuple.hpp>
10 #include <boost/core/lightweight_test.hpp>
11 #include <boost/core/lightweight_test_trait.hpp>
16 // family of test types with state
21 explicit T(int n
) : value
{n
} {}
25 std::ostream
& operator<<( std::ostream
& os
, T
<N
> const& t
)
31 // test function changes type and value
33 template<int N
, int M
=1> T
<N
+M
> operator()( T
<N
> a
, T
<M
> b
={} ) const
35 return T
<N
+M
>{a
.value
+ b
.value
+ 1};
41 using boost::mp11::tuple_transform
;
44 std::tuple
<T
<1>, T
<2>, T
<3>> tp
;
45 std::tuple
<T
<4>, T
<5>, T
<6>> tp2
;
48 std::tuple
<T
<2>, T
<3>, T
<4>> s
= tuple_transform( F
{}, tp
);
49 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
50 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
51 BOOST_TEST_EQ( std::get
<2>(s
).value
, 5 );
55 std::tuple
<T
<2>, T
<3>, T
<4>> s
= tuple_transform( F
{}, std::move(tp
) );
56 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
57 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
58 BOOST_TEST_EQ( std::get
<2>(s
).value
, 5 );
62 std::tuple
<T
<5>, T
<7>, T
<9>> s
= tuple_transform( F
{}, tp
, tp2
);
63 BOOST_TEST_EQ( std::get
<0>(s
).value
, 6 );
64 BOOST_TEST_EQ( std::get
<1>(s
).value
, 8 );
65 BOOST_TEST_EQ( std::get
<2>(s
).value
, 10 );
69 std::tuple
<T
<5>, T
<7>, T
<9>> s
= tuple_transform(
70 F
{}, std::move(tp
), std::move(tp2
)
72 BOOST_TEST_EQ( std::get
<0>(s
).value
, 6 );
73 BOOST_TEST_EQ( std::get
<1>(s
).value
, 8 );
74 BOOST_TEST_EQ( std::get
<2>(s
).value
, 10 );
79 std::tuple
<T
<1>, T
<2>, T
<3>> const tp
;
80 std::tuple
<T
<4>, T
<5>, T
<6>> const tp2
;
83 std::tuple
<T
<2>, T
<3>, T
<4>> s
= tuple_transform( F
{}, tp
);
84 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
85 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
86 BOOST_TEST_EQ( std::get
<2>(s
).value
, 5 );
90 std::tuple
<T
<2>, T
<3>, T
<4>> s
= tuple_transform( F
{}, std::move(tp
) );
91 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
92 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
93 BOOST_TEST_EQ( std::get
<2>(s
).value
, 5 );
97 std::tuple
<T
<5>, T
<7>, T
<9>> s
= tuple_transform( F
{}, tp
, tp2
);
98 BOOST_TEST_EQ( std::get
<0>(s
).value
, 6 );
99 BOOST_TEST_EQ( std::get
<1>(s
).value
, 8 );
100 BOOST_TEST_EQ( std::get
<2>(s
).value
, 10 );
104 std::tuple
<T
<5>, T
<7>, T
<9>> s
= tuple_transform(
105 F
{}, std::move(tp
), std::move(tp2
)
107 BOOST_TEST_EQ( std::get
<0>(s
).value
, 6 );
108 BOOST_TEST_EQ( std::get
<1>(s
).value
, 8 );
109 BOOST_TEST_EQ( std::get
<2>(s
).value
, 10 );
114 std::pair
<T
<1>, T
<2>> tp
;
115 std::pair
<T
<3>, T
<4>> tp2
;
118 std::tuple
<T
<2>, T
<3>> s
= tuple_transform( F
{}, tp
);
119 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
120 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
124 std::tuple
<T
<2>, T
<3>> s
= tuple_transform( F
{}, std::move(tp
) );
125 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
126 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
130 std::tuple
<T
<4>, T
<6>> s
= tuple_transform( F
{}, tp
, tp2
);
131 BOOST_TEST_EQ( std::get
<0>(s
).value
, 5 );
132 BOOST_TEST_EQ( std::get
<1>(s
).value
, 7 );
136 std::tuple
<T
<4>, T
<6>> s
= tuple_transform(
137 F
{}, std::move(tp
), std::move(tp2
)
139 BOOST_TEST_EQ( std::get
<0>(s
).value
, 5 );
140 BOOST_TEST_EQ( std::get
<1>(s
).value
, 7 );
145 std::pair
<T
<1>, T
<2>> const tp
;
146 std::pair
<T
<3>, T
<4>> const tp2
;
149 std::tuple
<T
<2>, T
<3>> s
= tuple_transform( F
{}, tp
);
150 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
151 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
155 std::tuple
<T
<2>, T
<3>> s
= tuple_transform( F
{}, std::move(tp
) );
156 BOOST_TEST_EQ( std::get
<0>(s
).value
, 3 );
157 BOOST_TEST_EQ( std::get
<1>(s
).value
, 4 );
161 std::tuple
<T
<4>, T
<6>> s
= tuple_transform( F
{}, tp
, tp2
);
162 BOOST_TEST_EQ( std::get
<0>(s
).value
, 5 );
163 BOOST_TEST_EQ( std::get
<1>(s
).value
, 7 );
167 std::tuple
<T
<4>, T
<6>> s
= tuple_transform(
168 F
{}, std::move(tp
), std::move(tp2
)
170 BOOST_TEST_EQ( std::get
<0>(s
).value
, 5 );
171 BOOST_TEST_EQ( std::get
<1>(s
).value
, 7 );
179 auto s
= tuple_transform( F
{}, tp
);
180 BOOST_TEST_TRAIT_TRUE((std::is_same
<decltype(s
), std::tuple
<>>));
184 auto s
= tuple_transform( F
{}, std::move(tp
) );
185 BOOST_TEST_TRAIT_TRUE((std::is_same
<decltype(s
), std::tuple
<>>));
189 return boost::report_errors();