]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/detail/variadic/reverse_apply.cpp
update sources to v12.2.3
[ceph.git] / 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)
4
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>
8
9 #include <boost/hana/assert.hpp>
10 #include <boost/hana/equal.hpp>
11
12 #include <laws/base.hpp>
13 namespace hana = boost::hana;
14 using hana::test::ct_eq;
15
16
17 auto check = [](auto reverse_apply) {
18 hana::test::_injection<0> f{};
19
20 BOOST_HANA_CONSTANT_CHECK(hana::equal(
21 reverse_apply(f),
22 f()
23 ));
24 BOOST_HANA_CONSTANT_CHECK(hana::equal(
25 reverse_apply(f, ct_eq<0>{}),
26 f(ct_eq<0>{})
27 ));
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>{})
31 ));
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>{})
35 ));
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>{})
39 ));
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>{})
43 ));
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>{})
47 ));
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>{})
51 ));
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>{})
55 ));
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>{})
59 ));
60 };
61
62 int main() {
63 check(hana::detail::variadic::reverse_apply);
64 check([](auto f, auto ...x) {
65 return hana::detail::variadic::reverse_apply_flat(f, x...);
66 });
67 check([](auto f, auto ...x) {
68 return hana::detail::variadic::reverse_apply_unrolled(f, x...);
69 });
70 }