@@ -14,13 +14,10 @@ export module containers.algorithms.set;
14
14
import containers.algorithms.sort.is_sorted;
15
15
16
16
import containers.algorithms.advance;
17
- import containers.algorithms.compare;
18
- import containers.array;
19
17
import containers.begin_end;
20
18
import containers.common_iterator_functions;
21
19
import containers.forward_range;
22
20
import containers.iter_difference_t ;
23
- import containers.iter_value_t ;
24
21
25
22
import bounded;
26
23
import numeric_traits;
@@ -191,226 +188,3 @@ template<typename Range1, typename Range2>
191
188
set_intersection_pair (Range1 &&, Range2 &&) -> set_intersection_pair<Range1, Range2, std::compare_three_way>;
192
189
193
190
} // namespace containers
194
-
195
- using namespace bounded ::literal;
196
-
197
- struct compares_address {
198
- constexpr explicit compares_address (int const & first, int const & second):
199
- m_first(first),
200
- m_second(second)
201
- {
202
- }
203
- constexpr explicit compares_address (std::pair<int const &, int const &> other):
204
- m_first(other.first),
205
- m_second(other.second)
206
- {
207
- }
208
-
209
- friend constexpr auto operator ==(compares_address const lhs, compares_address const rhs) -> bool {
210
- return
211
- std::addressof (lhs.m_first ) == std::addressof (rhs.m_first ) and
212
- std::addressof (lhs.m_second ) == std::addressof (rhs.m_second );
213
- }
214
-
215
- friend constexpr auto operator ==(compares_address const lhs, std::pair<int const &, int const &> rhs) -> bool {
216
- return lhs == compares_address (rhs);
217
- }
218
-
219
- private:
220
- int const & m_first;
221
- int const & m_second;
222
- };
223
-
224
- using init_list = std::initializer_list<compares_address>;
225
-
226
- constexpr auto empty = containers::array<int , 0_bi>{};
227
-
228
- static_assert (containers::equal(
229
- containers::set_intersection_pair (empty, empty),
230
- init_list{}
231
- ));
232
-
233
- constexpr auto one_one = containers::array{1 };
234
- constexpr auto one_two = containers::array{2 };
235
-
236
- static_assert (containers::equal(
237
- containers::set_intersection_pair (empty, one_one),
238
- init_list{}
239
- ));
240
- static_assert (containers::equal(
241
- containers::set_intersection_pair (empty, one_two),
242
- init_list{}
243
- ));
244
-
245
- static_assert (containers::equal(
246
- containers::set_intersection_pair (one_one, one_one),
247
- init_list{compares_address (one_one[0_bi], one_one[0_bi])}
248
- ));
249
- static_assert (containers::equal(
250
- containers::set_intersection_pair (one_one, one_two),
251
- init_list{}
252
- ));
253
- static_assert (containers::equal(
254
- containers::set_intersection_pair (one_two, one_one),
255
- init_list{}
256
- ));
257
- static_assert (containers::equal(
258
- containers::set_intersection_pair (one_two, one_two),
259
- init_list{compares_address (one_two[0_bi], one_two[0_bi])}
260
- ));
261
-
262
- constexpr auto two_forward = containers::array{1 , 2 };
263
- constexpr auto two_ones = containers::array{1 , 1 };
264
-
265
- static_assert (containers::equal(
266
- containers::set_intersection_pair (empty, two_forward),
267
- init_list{}
268
- ));
269
-
270
- static_assert (containers::equal(
271
- containers::set_intersection_pair (one_one, two_forward),
272
- init_list{compares_address (one_one[0_bi], two_forward[0_bi])}
273
- ));
274
- static_assert (containers::equal(
275
- containers::set_intersection_pair (two_forward, one_two),
276
- init_list{compares_address (two_forward[1_bi], one_two[0_bi])}
277
- ));
278
- static_assert (containers::equal(
279
- containers::set_intersection_pair (two_ones, one_one),
280
- init_list{compares_address (two_ones[0_bi], one_one[0_bi])}
281
- ));
282
-
283
- static_assert (containers::equal(
284
- containers::set_intersection_pair (two_forward, two_forward),
285
- init_list{
286
- compares_address (two_forward[0_bi], two_forward[0_bi]),
287
- compares_address (two_forward[1_bi], two_forward[1_bi])
288
- }
289
- ));
290
- static_assert (containers::equal(
291
- containers::set_intersection_pair (two_forward, two_ones),
292
- init_list{compares_address (two_forward[0_bi], two_ones[0_bi])}
293
- ));
294
- static_assert (containers::equal(
295
- containers::set_intersection_pair (two_ones, two_forward),
296
- init_list{compares_address (two_ones[0_bi], two_forward[0_bi])}
297
- ));
298
-
299
- constexpr auto all_ones = containers::array{1 , 1 , 1 , 1 , 1 , 1 , 1 };
300
- constexpr auto prefix = containers::array{-4 , -3 , -2 , 1 , 1 , 1 };
301
- constexpr auto suffix = containers::array{1 , 1 , 1 , 2 , 3 , 4 };
302
- constexpr auto prefix_suffix = containers::array{-4 , -3 , -2 , 1 , 1 , 1 , 2 , 3 , 4 };
303
-
304
- static_assert (containers::equal(
305
- containers::set_intersection_pair (empty, all_ones),
306
- init_list{}
307
- ));
308
-
309
- static_assert (containers::equal(
310
- containers::set_intersection_pair (one_one, all_ones),
311
- init_list{compares_address (one_one[0_bi], all_ones[0_bi])}
312
- ));
313
- static_assert (containers::equal(
314
- containers::set_intersection_pair (all_ones, one_one),
315
- init_list{compares_address (all_ones[0_bi], one_one[0_bi])}
316
- ));
317
- static_assert (containers::equal(
318
- containers::set_intersection_pair (two_ones, all_ones),
319
- init_list{
320
- compares_address (two_ones[0_bi], all_ones[0_bi]),
321
- compares_address (two_ones[1_bi], all_ones[1_bi])
322
- }
323
- ));
324
- static_assert (containers::equal(
325
- containers::set_intersection_pair (all_ones, two_ones),
326
- init_list{
327
- compares_address (all_ones[0_bi], two_ones[0_bi]),
328
- compares_address (all_ones[1_bi], two_ones[1_bi])
329
- }
330
- ));
331
-
332
- static_assert (containers::equal(
333
- containers::set_intersection_pair (all_ones, prefix),
334
- init_list{
335
- compares_address (all_ones[0_bi], prefix[3_bi]),
336
- compares_address (all_ones[1_bi], prefix[4_bi]),
337
- compares_address (all_ones[2_bi], prefix[5_bi]),
338
- }
339
- ));
340
- static_assert (containers::equal(
341
- containers::set_intersection_pair (prefix, all_ones),
342
- init_list{
343
- compares_address (prefix[3_bi], all_ones[0_bi]),
344
- compares_address (prefix[4_bi], all_ones[1_bi]),
345
- compares_address (prefix[5_bi], all_ones[2_bi]),
346
- }
347
- ));
348
-
349
- static_assert (containers::equal(
350
- containers::set_intersection_pair (all_ones, suffix),
351
- init_list{
352
- compares_address (all_ones[0_bi], suffix[0_bi]),
353
- compares_address (all_ones[1_bi], suffix[1_bi]),
354
- compares_address (all_ones[2_bi], suffix[2_bi]),
355
- }
356
- ));
357
- static_assert (containers::equal(
358
- containers::set_intersection_pair (suffix, all_ones),
359
- init_list{
360
- compares_address (suffix[0_bi], all_ones[0_bi]),
361
- compares_address (suffix[1_bi], all_ones[1_bi]),
362
- compares_address (suffix[2_bi], all_ones[2_bi]),
363
- }
364
- ));
365
-
366
- static_assert (containers::equal(
367
- containers::set_intersection_pair (all_ones, prefix_suffix),
368
- init_list{
369
- compares_address (all_ones[0_bi], prefix_suffix[3_bi]),
370
- compares_address (all_ones[1_bi], prefix_suffix[4_bi]),
371
- compares_address (all_ones[2_bi], prefix_suffix[5_bi]),
372
- }
373
- ));
374
- static_assert (containers::equal(
375
- containers::set_intersection_pair (prefix_suffix, all_ones),
376
- init_list{
377
- compares_address (prefix_suffix[3_bi], all_ones[0_bi]),
378
- compares_address (prefix_suffix[4_bi], all_ones[1_bi]),
379
- compares_address (prefix_suffix[5_bi], all_ones[2_bi]),
380
- }
381
- ));
382
-
383
- static_assert (containers::equal(
384
- containers::set_intersection_pair (suffix, prefix),
385
- init_list{
386
- compares_address (suffix[0_bi], prefix[3_bi]),
387
- compares_address (suffix[1_bi], prefix[4_bi]),
388
- compares_address (suffix[2_bi], prefix[5_bi]),
389
- }
390
- ));
391
- static_assert (containers::equal(
392
- containers::set_intersection_pair (prefix, suffix),
393
- init_list{
394
- compares_address (prefix[3_bi], suffix[0_bi]),
395
- compares_address (prefix[4_bi], suffix[1_bi]),
396
- compares_address (prefix[5_bi], suffix[2_bi]),
397
- }
398
- ));
399
-
400
- constexpr auto squares = containers::array{1 , 4 , 9 , 16 , 25 , 36 , 49 , 64 };
401
- constexpr auto evens = containers::array{2 , 4 , 6 , 8 , 10 , 12 , 14 , 16 , 18 , 20 };
402
-
403
- static_assert (containers::equal(
404
- containers::set_intersection_pair (squares, evens),
405
- init_list{
406
- compares_address (squares[1_bi], evens[1_bi]),
407
- compares_address (squares[3_bi], evens[7_bi]),
408
- }
409
- ));
410
- static_assert (containers::equal(
411
- containers::set_intersection_pair (evens, squares),
412
- init_list{
413
- compares_address (evens[1_bi], squares[1_bi]),
414
- compares_address (evens[7_bi], squares[3_bi]),
415
- }
416
- ));
0 commit comments