]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/hana/test/_include/auto/cartesian_product.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / hana / test / _include / auto / cartesian_product.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_CARTESIAN_PRODUCT_HPP
6#define BOOST_HANA_TEST_AUTO_CARTESIAN_PRODUCT_HPP
7
8#include <boost/hana/assert.hpp>
9#include <boost/hana/cartesian_product.hpp>
10#include <boost/hana/equal.hpp>
11
12#include <laws/base.hpp>
13#include "test_case.hpp"
14
15
16TestCase test_cartesian_product{[]{
17 namespace hana = boost::hana;
18 using hana::test::ct_eq;
19
20 // 0 lists
21 BOOST_HANA_CONSTANT_CHECK(hana::equal(
22 hana::cartesian_product(MAKE_TUPLE()),
23 MAKE_TUPLE()
24 ));
25
26 // 1 list
27 BOOST_HANA_CONSTANT_CHECK(hana::equal(
28 hana::cartesian_product(MAKE_TUPLE(
29 MAKE_TUPLE()
30 )),
31 MAKE_TUPLE()
32 ));
33
34 BOOST_HANA_CONSTANT_CHECK(hana::equal(
35 hana::cartesian_product(MAKE_TUPLE(
36 MAKE_TUPLE(ct_eq<0>{})
37 )),
38 MAKE_TUPLE(
39 MAKE_TUPLE(ct_eq<0>{})
40 )
41 ));
42
43 BOOST_HANA_CONSTANT_CHECK(hana::equal(
44 hana::cartesian_product(MAKE_TUPLE(
45 MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})
46 )),
47 MAKE_TUPLE(
48 MAKE_TUPLE(ct_eq<0>{}),
49 MAKE_TUPLE(ct_eq<1>{})
50 )
51 ));
52
53 BOOST_HANA_CONSTANT_CHECK(hana::equal(
54 hana::cartesian_product(MAKE_TUPLE(
55 MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})
56 )),
57 MAKE_TUPLE(
58 MAKE_TUPLE(ct_eq<0>{}),
59 MAKE_TUPLE(ct_eq<1>{}),
60 MAKE_TUPLE(ct_eq<2>{})
61 )
62 ));
63
64 BOOST_HANA_CONSTANT_CHECK(hana::equal(
65 hana::cartesian_product(MAKE_TUPLE(
66 MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<3>{})
67 )),
68 MAKE_TUPLE(
69 MAKE_TUPLE(ct_eq<0>{}),
70 MAKE_TUPLE(ct_eq<1>{}),
71 MAKE_TUPLE(ct_eq<2>{}),
72 MAKE_TUPLE(ct_eq<3>{})
73 )
74 ));
75
76 // 2 lists
77 BOOST_HANA_CONSTANT_CHECK(hana::equal(
78 hana::cartesian_product(MAKE_TUPLE(
79 MAKE_TUPLE(),
80 MAKE_TUPLE()
81 )),
82 MAKE_TUPLE()
83 ));
84
85 BOOST_HANA_CONSTANT_CHECK(hana::equal(
86 hana::cartesian_product(MAKE_TUPLE(
87 MAKE_TUPLE(ct_eq<00>{}),
88 MAKE_TUPLE()
89 )),
90 MAKE_TUPLE()
91 ));
92
93 BOOST_HANA_CONSTANT_CHECK(hana::equal(
94 hana::cartesian_product(MAKE_TUPLE(
95 MAKE_TUPLE(ct_eq<00>{}),
96 MAKE_TUPLE(ct_eq<10>{})
97 )),
98 MAKE_TUPLE(
99 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{})
100 )
101 ));
102
103 BOOST_HANA_CONSTANT_CHECK(hana::equal(
104 hana::cartesian_product(MAKE_TUPLE(
105 MAKE_TUPLE(ct_eq<00>{}, ct_eq<01>{}),
106 MAKE_TUPLE(ct_eq<10>{})
107 )),
108 MAKE_TUPLE(
109 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}),
110 MAKE_TUPLE(ct_eq<01>{}, ct_eq<10>{})
111 )
112 ));
113
114 BOOST_HANA_CONSTANT_CHECK(hana::equal(
115 hana::cartesian_product(MAKE_TUPLE(
116 MAKE_TUPLE(ct_eq<00>{}),
117 MAKE_TUPLE(ct_eq<10>{}, ct_eq<11>{})
118 )),
119 MAKE_TUPLE(
120 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}),
121 MAKE_TUPLE(ct_eq<00>{}, ct_eq<11>{})
122 )
123 ));
124
125 BOOST_HANA_CONSTANT_CHECK(hana::equal(
126 hana::cartesian_product(MAKE_TUPLE(
127 MAKE_TUPLE(ct_eq<00>{}, ct_eq<01>{}),
128 MAKE_TUPLE(ct_eq<10>{}, ct_eq<11>{})
129 )),
130 MAKE_TUPLE(
131 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}),
132 MAKE_TUPLE(ct_eq<00>{}, ct_eq<11>{}),
133 MAKE_TUPLE(ct_eq<01>{}, ct_eq<10>{}),
134 MAKE_TUPLE(ct_eq<01>{}, ct_eq<11>{})
135 )
136 ));
137
138 // misc
139 BOOST_HANA_CONSTANT_CHECK(hana::equal(
140 hana::cartesian_product(MAKE_TUPLE(
141 MAKE_TUPLE(ct_eq<00>{}),
142 MAKE_TUPLE(ct_eq<10>{}),
143 MAKE_TUPLE(ct_eq<20>{}),
144 MAKE_TUPLE(ct_eq<30>{}, ct_eq<31>{})
145 )),
146 MAKE_TUPLE(
147 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}, ct_eq<20>{}, ct_eq<30>{}),
148 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}, ct_eq<20>{}, ct_eq<31>{})
149 )
150 ));
151
152 BOOST_HANA_CONSTANT_CHECK(hana::equal(
153 hana::cartesian_product(MAKE_TUPLE(
154 MAKE_TUPLE(ct_eq<00>{}),
155 MAKE_TUPLE(ct_eq<10>{}),
156 MAKE_TUPLE(ct_eq<20>{}, ct_eq<21>{}),
157 MAKE_TUPLE(ct_eq<30>{}, ct_eq<31>{})
158 )),
159 MAKE_TUPLE(
160 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}, ct_eq<20>{}, ct_eq<30>{}),
161 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}, ct_eq<20>{}, ct_eq<31>{}),
162 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}, ct_eq<21>{}, ct_eq<30>{}),
163 MAKE_TUPLE(ct_eq<00>{}, ct_eq<10>{}, ct_eq<21>{}, ct_eq<31>{})
164 )
165 ));
166
167
168 // cartesian_product in a constexpr context
169#ifndef MAKE_TUPLE_NO_CONSTEXPR
170 static_assert(hana::equal(
171 hana::cartesian_product(MAKE_TUPLE(
172 MAKE_TUPLE(1),
173 MAKE_TUPLE('a', 'b')
174 )),
175 MAKE_TUPLE(
176 MAKE_TUPLE(1, 'a'),
177 MAKE_TUPLE(1, 'b')
178 )
179 ), "");
180
181 static_assert(hana::equal(
182 hana::cartesian_product(MAKE_TUPLE(
183 MAKE_TUPLE(1, 2),
184 MAKE_TUPLE('a')
185 )),
186 MAKE_TUPLE(
187 MAKE_TUPLE(1, 'a'),
188 MAKE_TUPLE(2, 'a')
189 )
190 ), "");
191
192 static_assert(hana::equal(
193 hana::cartesian_product(MAKE_TUPLE(
194 MAKE_TUPLE(1, 2),
195 MAKE_TUPLE('a', 'b')
196 )),
197 MAKE_TUPLE(
198 MAKE_TUPLE(1, 'a'),
199 MAKE_TUPLE(1, 'b'),
200 MAKE_TUPLE(2, 'a'),
201 MAKE_TUPLE(2, 'b')
202 )
203 ), "");
204
205 static_assert(hana::equal(
206 hana::cartesian_product(MAKE_TUPLE(
207 MAKE_TUPLE(1),
208 MAKE_TUPLE('a'),
209 MAKE_TUPLE(1.f),
210 MAKE_TUPLE(1l, 2l)
211 )),
212 MAKE_TUPLE(
213 MAKE_TUPLE(1, 'a', 1.f, 1l),
214 MAKE_TUPLE(1, 'a', 1.f, 2l)
215 )
216 ), "");
217
218 static_assert(hana::equal(
219 hana::cartesian_product(MAKE_TUPLE(
220 MAKE_TUPLE(1),
221 MAKE_TUPLE('a'),
222 MAKE_TUPLE(1.f),
223 MAKE_TUPLE(1l, 2l),
224 MAKE_TUPLE(nullptr)
225 )),
226 MAKE_TUPLE(
227 MAKE_TUPLE(1, 'a', 1.f, 1l, nullptr),
228 MAKE_TUPLE(1, 'a', 1.f, 2l, nullptr)
229 )
230 ), "");
231#endif
232}};
233
234#endif // !BOOST_HANA_TEST_AUTO_CARTESIAN_PRODUCT_HPP