]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/hana/test/_include/auto/zips.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / hana / test / _include / auto / zips.hpp
CommitLineData
b32b8144 1// Copyright Louis Dionne 2013-2017
7c673cae
FG
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#ifndef BOOST_HANA_TEST_AUTO_ZIPS_HPP
6#define BOOST_HANA_TEST_AUTO_ZIPS_HPP
7
8#include <boost/hana/assert.hpp>
9#include <boost/hana/equal.hpp>
10#include <boost/hana/zip.hpp>
11#include <boost/hana/zip_shortest.hpp>
12#include <boost/hana/zip_shortest_with.hpp>
13#include <boost/hana/zip_with.hpp>
14
15#include <laws/base.hpp>
16#include "test_case.hpp"
17
18
19TestCase test_zip_shortest_with{[]{
20 namespace hana = boost::hana;
21 using hana::test::ct_eq;
22
23 hana::test::_injection<0> f{};
24 auto zip = hana::zip_shortest_with;
25 struct undefined { };
26
27 // zip 1
28 BOOST_HANA_CONSTANT_CHECK(hana::equal(
29 zip(undefined{}, MAKE_TUPLE()),
30 MAKE_TUPLE()
31 ));
32 BOOST_HANA_CONSTANT_CHECK(hana::equal(
33 zip(f, MAKE_TUPLE(ct_eq<0>{})),
34 MAKE_TUPLE(f(ct_eq<0>{}))
35 ));
36 BOOST_HANA_CONSTANT_CHECK(hana::equal(
37 zip(f, MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
38 MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}))
39 ));
40 BOOST_HANA_CONSTANT_CHECK(hana::equal(
41 zip(f, MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
42 MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}), f(ct_eq<2>{}))
43 ));
44
45 // zip 2
46 BOOST_HANA_CONSTANT_CHECK(hana::equal(
47 zip(undefined{}, MAKE_TUPLE(), MAKE_TUPLE()),
48 MAKE_TUPLE()
49 ));
50 BOOST_HANA_CONSTANT_CHECK(hana::equal(
51 zip(undefined{}, MAKE_TUPLE(undefined{}), MAKE_TUPLE()),
52 MAKE_TUPLE()
53 ));
54 BOOST_HANA_CONSTANT_CHECK(hana::equal(
55 zip(undefined{}, MAKE_TUPLE(), MAKE_TUPLE(undefined{})),
56 MAKE_TUPLE()
57 ));
58 BOOST_HANA_CONSTANT_CHECK(hana::equal(
59 zip(f, MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<-1>{})),
60 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}))
61 ));
62 BOOST_HANA_CONSTANT_CHECK(hana::equal(
63 zip(f, MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}), MAKE_TUPLE(ct_eq<-1>{})),
64 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}))
65 ));
66 BOOST_HANA_CONSTANT_CHECK(hana::equal(
67 zip(f, MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{})),
68 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}))
69 ));
70 BOOST_HANA_CONSTANT_CHECK(hana::equal(
71 zip(f, MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}), MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{})),
72 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}), f(ct_eq<2>{}, ct_eq<-2>{}))
73 ));
74 BOOST_HANA_CONSTANT_CHECK(hana::equal(
75 zip(f, MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}, ct_eq<4>{}),
76 MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<-3>{})),
77 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}),
78 f(ct_eq<2>{}, ct_eq<-2>{}),
79 f(ct_eq<3>{}, ct_eq<-3>{}))
80 ));
81
82 // zip 3
83 BOOST_HANA_CONSTANT_CHECK(hana::equal(
84 zip(undefined{}, MAKE_TUPLE(), MAKE_TUPLE(), MAKE_TUPLE()),
85 MAKE_TUPLE()
86 ));
87
88 BOOST_HANA_CONSTANT_CHECK(hana::equal(
89 zip(undefined{}, MAKE_TUPLE(undefined{}), MAKE_TUPLE(), MAKE_TUPLE()),
90 MAKE_TUPLE()
91 ));
92 BOOST_HANA_CONSTANT_CHECK(hana::equal(
93 zip(undefined{}, MAKE_TUPLE(), MAKE_TUPLE(undefined{}), MAKE_TUPLE()),
94 MAKE_TUPLE()
95 ));
96 BOOST_HANA_CONSTANT_CHECK(hana::equal(
97 zip(undefined{}, MAKE_TUPLE(), MAKE_TUPLE(), MAKE_TUPLE(undefined{})),
98 MAKE_TUPLE()
99 ));
100
101 BOOST_HANA_CONSTANT_CHECK(hana::equal(
102 zip(undefined{}, MAKE_TUPLE(), MAKE_TUPLE(undefined{}), MAKE_TUPLE(undefined{})),
103 MAKE_TUPLE()
104 ));
105 BOOST_HANA_CONSTANT_CHECK(hana::equal(
106 zip(undefined{}, MAKE_TUPLE(undefined{}), MAKE_TUPLE(), MAKE_TUPLE(undefined{})),
107 MAKE_TUPLE()
108 ));
109 BOOST_HANA_CONSTANT_CHECK(hana::equal(
110 zip(undefined{}, MAKE_TUPLE(undefined{}), MAKE_TUPLE(undefined{}), MAKE_TUPLE()),
111 MAKE_TUPLE()
112 ));
113
114 BOOST_HANA_CONSTANT_CHECK(hana::equal(
115 zip(f, MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<2>{})),
116 MAKE_TUPLE(f(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}))
117 ));
118
119 // zip 4
120 BOOST_HANA_CONSTANT_CHECK(hana::equal(
121 zip(f,
122 MAKE_TUPLE(ct_eq<11>{}, ct_eq<12>{}, ct_eq<13>{}, ct_eq<14>{}),
123 MAKE_TUPLE(ct_eq<21>{}, ct_eq<22>{}, ct_eq<23>{}),
124 MAKE_TUPLE(ct_eq<31>{}, ct_eq<32>{}, ct_eq<33>{}, ct_eq<34>{}),
125 MAKE_TUPLE(ct_eq<41>{}, ct_eq<42>{}, ct_eq<43>{}, ct_eq<44>{}, ct_eq<45>{})
126 ),
127 MAKE_TUPLE(
128 f(ct_eq<11>{}, ct_eq<21>{}, ct_eq<31>{}, ct_eq<41>{}),
129 f(ct_eq<12>{}, ct_eq<22>{}, ct_eq<32>{}, ct_eq<42>{}),
130 f(ct_eq<13>{}, ct_eq<23>{}, ct_eq<33>{}, ct_eq<43>{})
131 )
132 ));
133
134 // zip 5
135 BOOST_HANA_CONSTANT_CHECK(hana::equal(
136 zip(f,
137 MAKE_TUPLE(ct_eq<11>{}, ct_eq<12>{}, ct_eq<13>{}, ct_eq<14>{}),
138 MAKE_TUPLE(ct_eq<21>{}, ct_eq<22>{}, ct_eq<23>{}, ct_eq<24>{}, ct_eq<25>{}),
139 MAKE_TUPLE(ct_eq<31>{}, ct_eq<32>{}, ct_eq<33>{}, ct_eq<34>{}),
140 MAKE_TUPLE(ct_eq<41>{}, ct_eq<42>{}, ct_eq<43>{}, ct_eq<44>{}, ct_eq<45>{}, ct_eq<46>{}),
141 MAKE_TUPLE(ct_eq<51>{}, ct_eq<52>{}, ct_eq<53>{}, ct_eq<54>{}, ct_eq<55>{})
142 ),
143 MAKE_TUPLE(
144 f(ct_eq<11>{}, ct_eq<21>{}, ct_eq<31>{}, ct_eq<41>{}, ct_eq<51>{}),
145 f(ct_eq<12>{}, ct_eq<22>{}, ct_eq<32>{}, ct_eq<42>{}, ct_eq<52>{}),
146 f(ct_eq<13>{}, ct_eq<23>{}, ct_eq<33>{}, ct_eq<43>{}, ct_eq<53>{}),
147 f(ct_eq<14>{}, ct_eq<24>{}, ct_eq<34>{}, ct_eq<44>{}, ct_eq<54>{})
148 )
149 ));
150}};
151
152TestCase test_zip_with{[]{
153 namespace hana = boost::hana;
154 using hana::test::ct_eq;
155
156 hana::test::_injection<0> f{};
157 struct undefined { };
158
159 // zip 1
160 BOOST_HANA_CONSTANT_CHECK(hana::equal(
161 hana::zip_with(undefined{}, MAKE_TUPLE()),
162 MAKE_TUPLE()
163 ));
164 BOOST_HANA_CONSTANT_CHECK(hana::equal(
165 hana::zip_with(f, MAKE_TUPLE(ct_eq<0>{})),
166 MAKE_TUPLE(f(ct_eq<0>{}))
167 ));
168 BOOST_HANA_CONSTANT_CHECK(hana::equal(
169 hana::zip_with(f, MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
170 MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}))
171 ));
172 BOOST_HANA_CONSTANT_CHECK(hana::equal(
173 hana::zip_with(f, MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
174 MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}), f(ct_eq<2>{}))
175 ));
176
177 // zip 2
178 BOOST_HANA_CONSTANT_CHECK(hana::equal(
179 hana::zip_with(undefined{}, MAKE_TUPLE(), MAKE_TUPLE()),
180 MAKE_TUPLE()
181 ));
182 BOOST_HANA_CONSTANT_CHECK(hana::equal(
183 hana::zip_with(f, MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<-1>{})),
184 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}))
185 ));
186 BOOST_HANA_CONSTANT_CHECK(hana::equal(
187 hana::zip_with(f, MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}), MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{})),
188 MAKE_TUPLE(f(ct_eq<1>{}, ct_eq<-1>{}), f(ct_eq<2>{}, ct_eq<-2>{}))
189 ));
190 BOOST_HANA_CONSTANT_CHECK(hana::equal(
191 hana::zip_with(f,
192 MAKE_TUPLE(ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{}),
193 MAKE_TUPLE(ct_eq<-1>{}, ct_eq<-2>{}, ct_eq<-3>{})),
194 MAKE_TUPLE(
195 f(ct_eq<1>{}, ct_eq<-1>{}),
196 f(ct_eq<2>{}, ct_eq<-2>{}),
197 f(ct_eq<3>{}, ct_eq<-3>{}))
198 ));
199
200 // zip 3
201 BOOST_HANA_CONSTANT_CHECK(hana::equal(
202 hana::zip_with(undefined{}, MAKE_TUPLE(), MAKE_TUPLE(), MAKE_TUPLE()),
203 MAKE_TUPLE()
204 ));
205 BOOST_HANA_CONSTANT_CHECK(hana::equal(
206 hana::zip_with(f, MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<2>{})),
207 MAKE_TUPLE(f(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}))
208 ));
209 BOOST_HANA_CONSTANT_CHECK(hana::equal(
210 hana::zip_with(f,
211 MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}),
212 MAKE_TUPLE(ct_eq<2>{}, ct_eq<3>{}),
213 MAKE_TUPLE(ct_eq<4>{}, ct_eq<5>{})
214 ),
215 MAKE_TUPLE(
216 f(ct_eq<0>{}, ct_eq<2>{}, ct_eq<4>{}),
217 f(ct_eq<1>{}, ct_eq<3>{}, ct_eq<5>{})
218 )
219 ));
220
221 // zip 4
222 BOOST_HANA_CONSTANT_CHECK(hana::equal(
223 hana::zip_with(f,
224 MAKE_TUPLE(ct_eq<11>{}, ct_eq<12>{}, ct_eq<13>{}),
225 MAKE_TUPLE(ct_eq<21>{}, ct_eq<22>{}, ct_eq<23>{}),
226 MAKE_TUPLE(ct_eq<31>{}, ct_eq<32>{}, ct_eq<33>{}),
227 MAKE_TUPLE(ct_eq<41>{}, ct_eq<42>{}, ct_eq<43>{})
228 ),
229 MAKE_TUPLE(
230 f(ct_eq<11>{}, ct_eq<21>{}, ct_eq<31>{}, ct_eq<41>{}),
231 f(ct_eq<12>{}, ct_eq<22>{}, ct_eq<32>{}, ct_eq<42>{}),
232 f(ct_eq<13>{}, ct_eq<23>{}, ct_eq<33>{}, ct_eq<43>{})
233 )
234 ));
235
236 // zip 5
237 BOOST_HANA_CONSTANT_CHECK(hana::equal(
238 hana::zip_with(f,
239 MAKE_TUPLE(ct_eq<11>{}, ct_eq<12>{}, ct_eq<13>{}, ct_eq<14>{}),
240 MAKE_TUPLE(ct_eq<21>{}, ct_eq<22>{}, ct_eq<23>{}, ct_eq<24>{}),
241 MAKE_TUPLE(ct_eq<31>{}, ct_eq<32>{}, ct_eq<33>{}, ct_eq<34>{}),
242 MAKE_TUPLE(ct_eq<41>{}, ct_eq<42>{}, ct_eq<43>{}, ct_eq<44>{}),
243 MAKE_TUPLE(ct_eq<51>{}, ct_eq<52>{}, ct_eq<53>{}, ct_eq<54>{})
244 ),
245 MAKE_TUPLE(
246 f(ct_eq<11>{}, ct_eq<21>{}, ct_eq<31>{}, ct_eq<41>{}, ct_eq<51>{}),
247 f(ct_eq<12>{}, ct_eq<22>{}, ct_eq<32>{}, ct_eq<42>{}, ct_eq<52>{}),
248 f(ct_eq<13>{}, ct_eq<23>{}, ct_eq<33>{}, ct_eq<43>{}, ct_eq<53>{}),
249 f(ct_eq<14>{}, ct_eq<24>{}, ct_eq<34>{}, ct_eq<44>{}, ct_eq<54>{})
250 )
251 ));
252}};
253
254TestCase test_zip{[]{
255 namespace hana = boost::hana;
256 using hana::test::ct_eq;
257
258 BOOST_HANA_CONSTANT_CHECK(hana::equal(
259 hana::zip(MAKE_TUPLE()),
260 MAKE_TUPLE()
261 ));
262 BOOST_HANA_CONSTANT_CHECK(hana::equal(
263 hana::zip(MAKE_TUPLE(ct_eq<0>{})),
264 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}))
265 ));
266 BOOST_HANA_CONSTANT_CHECK(hana::equal(
267 hana::zip(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
268 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}))
269 ));
270 BOOST_HANA_CONSTANT_CHECK(hana::equal(
271 hana::zip(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
272 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<2>{}))
273 ));
274
275 BOOST_HANA_CONSTANT_CHECK(hana::equal(
276 hana::zip(MAKE_TUPLE(), MAKE_TUPLE()),
277 MAKE_TUPLE()
278 ));
279 BOOST_HANA_CONSTANT_CHECK(hana::equal(
280 hana::zip(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{})),
281 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}))
282 ));
283
284 BOOST_HANA_CONSTANT_CHECK(hana::equal(
285 hana::zip(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<2>{})),
286 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}))
287 ));
288 BOOST_HANA_CONSTANT_CHECK(hana::equal(
289 hana::zip(MAKE_TUPLE(ct_eq<0>{}, ct_eq<3>{}),
290 MAKE_TUPLE(ct_eq<1>{}, ct_eq<4>{}),
291 MAKE_TUPLE(ct_eq<2>{}, ct_eq<5>{})),
292 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
293 MAKE_TUPLE(ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}))
294 ));
295}};
296
297TestCase test_zip_shortest{[]{
298 namespace hana = boost::hana;
299 using hana::test::ct_eq;
300
301 BOOST_HANA_CONSTANT_CHECK(hana::equal(
302 hana::zip_shortest(MAKE_TUPLE()),
303 MAKE_TUPLE()
304 ));
305 BOOST_HANA_CONSTANT_CHECK(hana::equal(
306 hana::zip_shortest(MAKE_TUPLE(ct_eq<0>{})),
307 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}))
308 ));
309 BOOST_HANA_CONSTANT_CHECK(hana::equal(
310 hana::zip_shortest(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
311 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}))
312 ));
313 BOOST_HANA_CONSTANT_CHECK(hana::equal(
314 hana::zip_shortest(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
315 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{}), MAKE_TUPLE(ct_eq<2>{}))
316 ));
317
318 BOOST_HANA_CONSTANT_CHECK(hana::equal(
319 hana::zip_shortest(MAKE_TUPLE(), MAKE_TUPLE()),
320 MAKE_TUPLE()
321 ));
322 BOOST_HANA_CONSTANT_CHECK(hana::equal(
323 hana::zip_shortest(MAKE_TUPLE(ct_eq<0>{}), MAKE_TUPLE(ct_eq<1>{})),
324 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}))
325 ));
326
327 BOOST_HANA_CONSTANT_CHECK(hana::equal(
328 hana::zip_shortest(MAKE_TUPLE(ct_eq<0>{}),
329 MAKE_TUPLE(ct_eq<1>{}),
330 MAKE_TUPLE(ct_eq<2>{})),
331 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}))
332 ));
333 BOOST_HANA_CONSTANT_CHECK(hana::equal(
334 hana::zip_shortest(MAKE_TUPLE(ct_eq<0>{}, ct_eq<3>{}),
335 MAKE_TUPLE(ct_eq<1>{}, ct_eq<4>{}),
336 MAKE_TUPLE(ct_eq<2>{}, ct_eq<5>{}, ct_eq<8>{})),
337 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}),
338 MAKE_TUPLE(ct_eq<3>{}, ct_eq<4>{}, ct_eq<5>{}))
339 ));
340}};
341
342#endif // !BOOST_HANA_TEST_AUTO_ZIPS_HPP