]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/detail/variadic/reverse_apply.cpp
1 // Copyright Louis Dionne 2013-2017
2 // Distributed under the Boost Software License, Version 1.0.
3 // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
5 #include <boost/hana/detail/variadic/reverse_apply.hpp>
6 #include <boost/hana/detail/variadic/reverse_apply/flat.hpp>
7 #include <boost/hana/detail/variadic/reverse_apply/unrolled.hpp>
9 #include <boost/hana/assert.hpp>
10 #include <boost/hana/equal.hpp>
12 #include <laws/base.hpp>
13 namespace hana
= boost::hana
;
14 using hana::test::ct_eq
;
17 auto check
= [](auto reverse_apply
) {
18 hana::test::_injection
<0> f
{};
20 BOOST_HANA_CONSTANT_CHECK(hana::equal(
24 BOOST_HANA_CONSTANT_CHECK(hana::equal(
25 reverse_apply(f
, ct_eq
<0>{}),
28 BOOST_HANA_CONSTANT_CHECK(hana::equal(
29 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}),
30 f(ct_eq
<1>{}, ct_eq
<0>{})
32 BOOST_HANA_CONSTANT_CHECK(hana::equal(
33 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}),
34 f(ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
36 BOOST_HANA_CONSTANT_CHECK(hana::equal(
37 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}, ct_eq
<3>{}),
38 f(ct_eq
<3>{}, ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
40 BOOST_HANA_CONSTANT_CHECK(hana::equal(
41 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}, ct_eq
<3>{}, ct_eq
<4>{}),
42 f(ct_eq
<4>{}, ct_eq
<3>{}, ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
44 BOOST_HANA_CONSTANT_CHECK(hana::equal(
45 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}, ct_eq
<3>{}, ct_eq
<4>{}, ct_eq
<5>{}),
46 f(ct_eq
<5>{}, ct_eq
<4>{}, ct_eq
<3>{}, ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
48 BOOST_HANA_CONSTANT_CHECK(hana::equal(
49 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}, ct_eq
<3>{}, ct_eq
<4>{}, ct_eq
<5>{}, ct_eq
<6>{}),
50 f(ct_eq
<6>{}, ct_eq
<5>{}, ct_eq
<4>{}, ct_eq
<3>{}, ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
52 BOOST_HANA_CONSTANT_CHECK(hana::equal(
53 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}, ct_eq
<3>{}, ct_eq
<4>{}, ct_eq
<5>{}, ct_eq
<6>{}, ct_eq
<7>{}),
54 f(ct_eq
<7>{}, ct_eq
<6>{}, ct_eq
<5>{}, ct_eq
<4>{}, ct_eq
<3>{}, ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
56 BOOST_HANA_CONSTANT_CHECK(hana::equal(
57 reverse_apply(f
, ct_eq
<0>{}, ct_eq
<1>{}, ct_eq
<2>{}, ct_eq
<3>{}, ct_eq
<4>{}, ct_eq
<5>{}, ct_eq
<6>{}, ct_eq
<7>{}, ct_eq
<8>{}),
58 f(ct_eq
<8>{}, ct_eq
<7>{}, ct_eq
<6>{}, ct_eq
<5>{}, ct_eq
<4>{}, ct_eq
<3>{}, ct_eq
<2>{}, ct_eq
<1>{}, ct_eq
<0>{})
63 check(hana::detail::variadic::reverse_apply
);
64 check([](auto f
, auto ...x
) {
65 return hana::detail::variadic::reverse_apply_flat(f
, x
...);
67 check([](auto f
, auto ...x
) {
68 return hana::detail::variadic::reverse_apply_unrolled(f
, x
...);