]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hana/test/orderable.cpp
1 // Copyright Louis Dionne 2013-2017
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)
5 #include <boost/hana/assert.hpp>
6 #include <boost/hana/concept/orderable.hpp>
7 #include <boost/hana/greater.hpp>
8 #include <boost/hana/greater_equal.hpp>
9 #include <boost/hana/less.hpp>
10 #include <boost/hana/less_equal.hpp>
11 #include <boost/hana/max.hpp>
12 #include <boost/hana/min.hpp>
13 #include <boost/hana/not.hpp>
14 #include <boost/hana/tuple.hpp>
16 #include <laws/base.hpp>
17 #include <laws/comparable.hpp>
18 #include <laws/orderable.hpp>
21 #include <type_traits>
22 namespace hana
= boost::hana
;
23 using namespace std::literals
;
26 // Minimal LessThanComparable types
27 struct ord1
{ int value
; };
30 constexpr operator ord1() const { return {value
}; }
33 template <typename T
, typename U
, typename
= std::enable_if_t
<
34 (std::is_same
<T
, ord1
>{} || std::is_same
<T
, ord2
>{}) &&
35 (std::is_same
<U
, ord1
>{} || std::is_same
<U
, ord2
>{})
37 constexpr bool operator<(T a
, U b
)
38 { return a
.value
< b
.value
; }
40 namespace boost
{ namespace hana
{
41 template <typename T
, typename U
>
42 struct equal_impl
<T
, U
, when
<
43 (std::is_same
<T
, ord1
>{} || std::is_same
<T
, ord2
>{}) &&
44 (std::is_same
<U
, ord1
>{} || std::is_same
<U
, ord2
>{})
46 static constexpr bool apply(T a
, U b
)
47 { return a
.value
== b
.value
; }
53 hana::test::TestOrderable
<int>{hana::make_tuple(0,1,2,3,4,5)};
54 hana::test::TestOrderable
<unsigned int>{hana::make_tuple(0u,1u,2u,3u,4u,5u)};
55 hana::test::TestOrderable
<long>{hana::make_tuple(0l,1l,2l,3l,4l,5l)};
56 hana::test::TestOrderable
<unsigned long>{hana::make_tuple(0ul,1ul,2ul,3ul,4ul,5ul)};
57 hana::test::TestOrderable
<ord1
>{hana::make_tuple(ord1
{0}, ord1
{1}, ord1
{2}, ord1
{3}, ord1
{4})};
59 // Orderable => Comparable
60 hana::test::TestComparable
<ord1
>{hana::make_tuple(ord1
{0}, ord1
{1}, ord1
{2}, ord1
{3}, ord1
{4})};
64 BOOST_HANA_CONSTEXPR_CHECK(hana::less(5, 6));
65 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(6, 6)));
66 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(7, 6)));
68 // Provided model for LessThanComparable types
69 BOOST_HANA_CONSTEXPR_CHECK(hana::less(ord1
{0}, ord1
{1}));
70 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(ord1
{0}, ord1
{0})));
71 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(ord1
{1}, ord1
{0})));
73 BOOST_HANA_CONSTEXPR_CHECK(hana::less(ord1
{0}, ord2
{1}));
74 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(ord1
{0}, ord2
{0})));
75 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(ord1
{1}, ord2
{0})));
77 BOOST_HANA_CONSTEXPR_CHECK(hana::less(ord2
{0}, ord1
{1}));
78 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(ord2
{0}, ord1
{0})));
79 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less(ord2
{1}, ord1
{0})));
81 BOOST_HANA_RUNTIME_CHECK(hana::less("ab", "abc"s
));
82 BOOST_HANA_RUNTIME_CHECK(hana::less("abc"s
, "abcde"));
87 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::greater(5, 6)));
88 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::greater(6, 6)));
89 BOOST_HANA_CONSTEXPR_CHECK(hana::greater(7, 6));
91 BOOST_HANA_RUNTIME_CHECK(hana::greater("abcd", "ab"s
));
92 BOOST_HANA_RUNTIME_CHECK(hana::greater("abc"s
, "abb"));
97 BOOST_HANA_CONSTEXPR_CHECK(hana::less_equal(5, 6));
98 BOOST_HANA_CONSTEXPR_CHECK(hana::less_equal(6, 6));
99 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::less_equal(7, 6)));
101 BOOST_HANA_RUNTIME_CHECK(hana::less_equal("ab", "abcd"s
));
102 BOOST_HANA_RUNTIME_CHECK(hana::less_equal("abc"s
, "abc"));
107 BOOST_HANA_CONSTEXPR_CHECK(hana::not_(hana::greater_equal(5, 6)));
108 BOOST_HANA_CONSTEXPR_CHECK(hana::greater_equal(6, 6));
109 BOOST_HANA_CONSTEXPR_CHECK(hana::greater_equal(7, 6));
111 BOOST_HANA_RUNTIME_CHECK(hana::greater_equal("abcd", "ab"s
));
112 BOOST_HANA_RUNTIME_CHECK(hana::greater_equal("abc"s
, "abc"));
117 BOOST_HANA_CONSTEXPR_CHECK(hana::equal(hana::min(5, 6), 5));
118 BOOST_HANA_CONSTEXPR_CHECK(hana::equal(hana::min(6, 5), 5));
123 BOOST_HANA_CONSTEXPR_CHECK(hana::equal(hana::max(5, 6), 6));
124 BOOST_HANA_CONSTEXPR_CHECK(hana::equal(hana::max(6, 5), 6));