]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/detail/variadic/split_at.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / hana / test / detail / variadic / split_at.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/split_at.hpp>
6
7 #include <boost/hana/assert.hpp>
8 #include <boost/hana/equal.hpp>
9 #include <boost/hana/pair.hpp>
10 #include <boost/hana/tuple.hpp>
11
12 #include <laws/base.hpp>
13 namespace hana = boost::hana;
14 namespace vd = hana::detail::variadic;
15 using hana::test::ct_eq;
16
17
18 auto check = [](auto split, auto xs, auto ys) {
19 auto result = split([](auto ...xs) {
20 return [=](auto ...ys) {
21 return hana::make_pair(hana::make_tuple(xs...), hana::make_tuple(ys...));
22 };
23 });
24
25 BOOST_HANA_CONSTANT_CHECK(hana::equal(xs, hana::first(result)));
26 BOOST_HANA_CONSTANT_CHECK(hana::equal(ys, hana::second(result)));
27 };
28
29 int main() {
30 {
31 check(
32 vd::split_at<0>(),
33 hana::make_tuple(),
34 hana::make_tuple()
35 );
36
37 check(
38 vd::split_at<0>(ct_eq<1>{}),
39 hana::make_tuple(),
40 hana::make_tuple(ct_eq<1>{})
41 );
42
43 check(
44 vd::split_at<0>(ct_eq<1>{}, ct_eq<2>{}),
45 hana::make_tuple(),
46 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{})
47 );
48
49 check(
50 vd::split_at<0>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
51 hana::make_tuple(),
52 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})
53 );
54 }
55 {
56 check(
57 vd::split_at<1>(ct_eq<1>{}),
58 hana::make_tuple(ct_eq<1>{}),
59 hana::make_tuple()
60 );
61
62 check(
63 vd::split_at<1>(ct_eq<1>{}, ct_eq<2>{}),
64 hana::make_tuple(ct_eq<1>{}),
65 hana::make_tuple(ct_eq<2>{})
66 );
67
68 check(
69 vd::split_at<1>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
70 hana::make_tuple(ct_eq<1>{}),
71 hana::make_tuple(ct_eq<2>{}, ct_eq<3>{})
72 );
73
74 check(
75 vd::split_at<1>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
76 hana::make_tuple(ct_eq<1>{}),
77 hana::make_tuple(ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{})
78 );
79 }
80 {
81 check(
82 vd::split_at<2>(ct_eq<1>{}, ct_eq<2>{}),
83 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}),
84 hana::make_tuple()
85 );
86
87 check(
88 vd::split_at<2>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
89 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}),
90 hana::make_tuple(ct_eq<3>{})
91 );
92
93 check(
94 vd::split_at<2>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
95 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}),
96 hana::make_tuple(ct_eq<3>{}, ct_eq<4>{})
97 );
98
99 check(
100 vd::split_at<2>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}),
101 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}),
102 hana::make_tuple(ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{})
103 );
104 }
105 {
106 check(
107 vd::split_at<7>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}),
108 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}),
109 hana::make_tuple()
110 );
111
112 check(
113 vd::split_at<7>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}),
114 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}),
115 hana::make_tuple(ct_eq<8>{})
116 );
117
118 check(
119 vd::split_at<7>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
120 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}),
121 hana::make_tuple(ct_eq<8>{}, ct_eq<9>{})
122 );
123
124 check(
125 vd::split_at<7>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}, ct_eq<10>{}),
126 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}),
127 hana::make_tuple(ct_eq<8>{}, ct_eq<9>{}, ct_eq<10>{})
128 );
129 }
130 {
131 check(
132 vd::split_at<8>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}),
133 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}),
134 hana::make_tuple()
135 );
136
137 check(
138 vd::split_at<8>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
139 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}),
140 hana::make_tuple(ct_eq<9>{})
141 );
142
143 check(
144 vd::split_at<8>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}, ct_eq<10>{}),
145 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}),
146 hana::make_tuple(ct_eq<9>{}, ct_eq<10>{})
147 );
148 }
149 {
150 check(
151 vd::split_at<9>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
152 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
153 hana::make_tuple()
154 );
155
156 check(
157 vd::split_at<9>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}, ct_eq<10>{}),
158 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
159 hana::make_tuple(ct_eq<10>{})
160 );
161
162 check(
163 vd::split_at<9>(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}, ct_eq<10>{}, ct_eq<11>{}),
164 hana::make_tuple(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}, ct_eq<6>{}, ct_eq<7>{}, ct_eq<8>{}, ct_eq<9>{}),
165 hana::make_tuple(ct_eq<10>{}, ct_eq<11>{})
166 );
167 }
168 }