]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/hana/test/_include/auto/group.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / hana / test / _include / auto / group.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_GROUP_HPP
6#define BOOST_HANA_TEST_AUTO_GROUP_HPP
7
8#include <boost/hana/assert.hpp>
9#include <boost/hana/equal.hpp>
10#include <boost/hana/group.hpp>
11
12#include "test_case.hpp"
13#include <laws/base.hpp>
14#include <support/equivalence_class.hpp>
15
16
17TestCase test_group{[]{
18 namespace hana = boost::hana;
19 using hana::test::ct_eq;
20
21 struct undefined { };
22
23 // Test without a custom predicate
24 {
25 BOOST_HANA_CONSTANT_CHECK(hana::equal(
26 hana::group(MAKE_TUPLE()),
27 MAKE_TUPLE()
28 ));
29
30 BOOST_HANA_CONSTANT_CHECK(hana::equal(
31 hana::group(MAKE_TUPLE(ct_eq<0>{})),
32 MAKE_TUPLE(
33 MAKE_TUPLE(ct_eq<0>{}))
34 ));
35
36 BOOST_HANA_CONSTANT_CHECK(hana::equal(
37 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{})),
38 MAKE_TUPLE(
39 MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}))
40 ));
41 BOOST_HANA_CONSTANT_CHECK(hana::equal(
42 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
43 MAKE_TUPLE(
44 MAKE_TUPLE(ct_eq<0>{}),
45 MAKE_TUPLE(ct_eq<1>{}))
46 ));
47
48 BOOST_HANA_CONSTANT_CHECK(hana::equal(
49 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}, ct_eq<0>{})),
50 MAKE_TUPLE(
51 MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}, ct_eq<0>{}))
52 ));
53 BOOST_HANA_CONSTANT_CHECK(hana::equal(
54 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}, ct_eq<1>{})),
55 MAKE_TUPLE(
56 MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}),
57 MAKE_TUPLE(ct_eq<1>{}))
58 ));
59 BOOST_HANA_CONSTANT_CHECK(hana::equal(
60 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<0>{})),
61 MAKE_TUPLE(
62 MAKE_TUPLE(ct_eq<0>{}),
63 MAKE_TUPLE(ct_eq<1>{}),
64 MAKE_TUPLE(ct_eq<0>{}))
65 ));
66 BOOST_HANA_CONSTANT_CHECK(hana::equal(
67 hana::group(MAKE_TUPLE(ct_eq<1>{}, ct_eq<0>{}, ct_eq<0>{})),
68 MAKE_TUPLE(
69 MAKE_TUPLE(ct_eq<1>{}),
70 MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}))
71 ));
72
73 BOOST_HANA_CONSTANT_CHECK(hana::equal(
74 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}, ct_eq<1>{}, ct_eq<1>{})),
75 MAKE_TUPLE(MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}),
76 MAKE_TUPLE(ct_eq<1>{}, ct_eq<1>{}))
77 ));
78 BOOST_HANA_CONSTANT_CHECK(hana::equal(
79 hana::group(MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}, ct_eq<1>{}, ct_eq<1>{}, ct_eq<2>{}, ct_eq<2>{}, ct_eq<2>{})),
80 MAKE_TUPLE(
81 MAKE_TUPLE(ct_eq<0>{}, ct_eq<0>{}),
82 MAKE_TUPLE(ct_eq<1>{}, ct_eq<1>{}),
83 MAKE_TUPLE(ct_eq<2>{}, ct_eq<2>{}, ct_eq<2>{}))
84 ));
85 }
86
87 // Test with a custom predicate
88 {
89 auto a = [](auto z) { return ::equivalence_class(ct_eq<999>{}, z); };
90 auto b = [](auto z) { return ::equivalence_class(ct_eq<888>{}, z); };
91
92 auto pred = [](auto x, auto y) {
93 return hana::equal(x.unwrap, y.unwrap);
94 };
95
96 BOOST_HANA_CONSTANT_CHECK(hana::equal(
97 hana::group(MAKE_TUPLE(), undefined{}),
98 MAKE_TUPLE()
99 ));
100
101 BOOST_HANA_CONSTANT_CHECK(hana::equal(
102 hana::group(MAKE_TUPLE(a(ct_eq<0>{})), pred),
103 MAKE_TUPLE(
104 MAKE_TUPLE(a(ct_eq<0>{})))
105 ));
106 BOOST_HANA_CONSTANT_CHECK(hana::equal(
107 hana::group(MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})), pred),
108 MAKE_TUPLE(
109 MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})))
110 ));
111 BOOST_HANA_CONSTANT_CHECK(hana::equal(
112 hana::group(MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{}), a(ct_eq<1>{})), pred),
113 MAKE_TUPLE(
114 MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})),
115 MAKE_TUPLE(a(ct_eq<1>{})))
116 ));
117 BOOST_HANA_CONSTANT_CHECK(hana::equal(
118 hana::group(MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{}), a(ct_eq<1>{}), b(ct_eq<1>{})), pred),
119 MAKE_TUPLE(
120 MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})),
121 MAKE_TUPLE(a(ct_eq<1>{}), b(ct_eq<1>{})))
122 ));
123 BOOST_HANA_CONSTANT_CHECK(hana::equal(
124 hana::group(MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{}), a(ct_eq<1>{}), b(ct_eq<1>{}), b(ct_eq<0>{})), pred),
125 MAKE_TUPLE(
126 MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})),
127 MAKE_TUPLE(a(ct_eq<1>{}), b(ct_eq<1>{})),
128 MAKE_TUPLE(b(ct_eq<0>{})))
129 ));
130
131 // Test group.by syntactic sugar
132 BOOST_HANA_CONSTANT_CHECK(hana::equal(
133 hana::group.by(pred, MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{}), a(ct_eq<1>{}), b(ct_eq<1>{}), b(ct_eq<0>{}))),
134 MAKE_TUPLE(
135 MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})),
136 MAKE_TUPLE(a(ct_eq<1>{}), b(ct_eq<1>{})),
137 MAKE_TUPLE(b(ct_eq<0>{})))
138 ));
139
140 BOOST_HANA_CONSTANT_CHECK(hana::equal(
141 hana::group.by(pred)(MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{}), a(ct_eq<1>{}), b(ct_eq<1>{}), b(ct_eq<0>{}))),
142 MAKE_TUPLE(
143 MAKE_TUPLE(a(ct_eq<0>{}), b(ct_eq<0>{})),
144 MAKE_TUPLE(a(ct_eq<1>{}), b(ct_eq<1>{})),
145 MAKE_TUPLE(b(ct_eq<0>{})))
146 ));
147 }
148}};
149
150#endif // !BOOST_HANA_TEST_AUTO_GROUP_HPP