]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/concept/constant/logical.cpp
1 // Copyright Louis Dionne 2013-2016
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)
7 #include <boost/hana/and.hpp>
8 #include <boost/hana/equal.hpp>
9 #include <boost/hana/eval_if.hpp>
10 #include <boost/hana/if.hpp>
11 #include <boost/hana/not.hpp>
12 #include <boost/hana/not_equal.hpp>
13 #include <boost/hana/or.hpp>
14 #include <boost/hana/tuple.hpp>
15 #include <boost/hana/while.hpp>
17 #include <laws/base.hpp>
18 #include <laws/logical.hpp>
19 namespace hana
= boost::hana
;
25 constexpr auto bools
= hana::make_tuple(
26 minimal_constant
<bool, false>{},
27 minimal_constant
<bool, true>{}
30 hana::test::TestLogical
<minimal_constant_tag
<bool>>{bools
};
33 constexpr auto true_
= minimal_constant
<bool, true>{};
34 constexpr auto false_
= minimal_constant
<bool, false>{};
38 BOOST_HANA_CONSTANT_CHECK(hana::equal(hana::not_(true_
), false_
));
39 BOOST_HANA_CONSTANT_CHECK(hana::equal(hana::not_(false_
), true_
));
44 BOOST_HANA_CONSTANT_CHECK(hana::equal(
48 BOOST_HANA_CONSTANT_CHECK(hana::equal(
53 BOOST_HANA_CONSTANT_CHECK(hana::equal(
54 hana::and_(true_
, true_
),
57 BOOST_HANA_CONSTANT_CHECK(hana::equal(
58 hana::and_(true_
, false_
),
61 BOOST_HANA_CONSTANT_CHECK(hana::equal(
62 hana::and_(false_
, invalid
{}),
66 BOOST_HANA_CONSTANT_CHECK(hana::equal(
67 hana::and_(true_
, true_
, true_
),
70 BOOST_HANA_CONSTANT_CHECK(hana::equal(
71 hana::and_(true_
, true_
, false_
),
74 BOOST_HANA_CONSTANT_CHECK(hana::equal(
75 hana::and_(true_
, false_
, invalid
{}),
78 BOOST_HANA_CONSTANT_CHECK(hana::equal(
79 hana::and_(false_
, invalid
{}, invalid
{}),
86 BOOST_HANA_CONSTANT_CHECK(hana::equal(
90 BOOST_HANA_CONSTANT_CHECK(hana::equal(
95 BOOST_HANA_CONSTANT_CHECK(hana::equal(
96 hana::or_(false_
, false_
),
99 BOOST_HANA_CONSTANT_CHECK(hana::equal(
100 hana::or_(false_
, true_
),
103 BOOST_HANA_CONSTANT_CHECK(hana::equal(
104 hana::or_(true_
, invalid
{}),
108 BOOST_HANA_CONSTANT_CHECK(hana::equal(
109 hana::or_(false_
, false_
, false_
),
112 BOOST_HANA_CONSTANT_CHECK(hana::equal(
113 hana::or_(false_
, false_
, true_
),
116 BOOST_HANA_CONSTANT_CHECK(hana::equal(
117 hana::or_(false_
, true_
, invalid
{}),
120 BOOST_HANA_CONSTANT_CHECK(hana::equal(
121 hana::or_(true_
, invalid
{}, invalid
{}),
128 BOOST_HANA_CONSTANT_CHECK(hana::equal(
129 hana::if_(true_
, hana::test::ct_eq
<3>{}, hana::test::ct_eq
<4>{}),
130 hana::test::ct_eq
<3>{}
133 BOOST_HANA_CONSTANT_CHECK(hana::equal(
134 hana::if_(false_
, hana::test::ct_eq
<3>{}, hana::test::ct_eq
<4>{}),
135 hana::test::ct_eq
<4>{}
141 auto t
= [](auto) { return hana::test::ct_eq
<2>{}; };
142 auto e
= [](auto) { return hana::test::ct_eq
<3>{}; };
144 BOOST_HANA_CONSTANT_CHECK(hana::equal(
145 hana::eval_if(true_
, t
, invalid
{}),
146 hana::test::ct_eq
<2>{}
149 BOOST_HANA_CONSTANT_CHECK(hana::equal(
150 hana::eval_if(false_
, invalid
{}, e
),
151 hana::test::ct_eq
<3>{}
157 hana::test::_injection
<0> f
{};
159 BOOST_HANA_CONSTANT_CHECK(hana::equal(
160 hana::while_(hana::not_equal
.to(hana::test::ct_eq
<0>{}), hana::test::ct_eq
<0>{}, invalid
{}),
161 hana::test::ct_eq
<0>{}
164 BOOST_HANA_CONSTANT_CHECK(hana::equal(
165 hana::while_(hana::not_equal
.to(f(hana::test::ct_eq
<0>{})), hana::test::ct_eq
<0>{}, f
),
166 f(hana::test::ct_eq
<0>{})
169 BOOST_HANA_CONSTANT_CHECK(hana::equal(
170 hana::while_(hana::not_equal
.to(f(f(hana::test::ct_eq
<0>{}))), hana::test::ct_eq
<0>{}, f
),
171 f(f(hana::test::ct_eq
<0>{}))
174 BOOST_HANA_CONSTANT_CHECK(hana::equal(
175 hana::while_(hana::not_equal
.to(f(f(f(hana::test::ct_eq
<0>{})))), hana::test::ct_eq
<0>{}, f
),
176 f(f(f(hana::test::ct_eq
<0>{})))
179 BOOST_HANA_CONSTANT_CHECK(hana::equal(
180 hana::while_(hana::not_equal
.to(f(f(f(f(hana::test::ct_eq
<0>{}))))), hana::test::ct_eq
<0>{}, f
),
181 f(f(f(f(hana::test::ct_eq
<0>{}))))
184 // Make sure it can be called with an lvalue state:
185 auto state
= hana::test::ct_eq
<0>{};
186 BOOST_HANA_CONSTANT_CHECK(hana::equal(
187 hana::while_(hana::not_equal
.to(f(f(f(f(hana::test::ct_eq
<0>{}))))), state
, f
),
188 f(f(f(f(hana::test::ct_eq
<0>{}))))