]>
Commit | Line | Data |
---|---|---|
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 | ||
19 | TestCase 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 | ||
152 | TestCase 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 | ||
254 | TestCase 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 | ||
297 | TestCase 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 |