]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hof/test/if.cpp
1 /*=============================================================================
2 Copyright (c) 2017 Paul Fultz II
4 Distributed under the Boost Software License, Version 1.0. (See accompanying
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/
7 #include <boost/hof/if.hpp>
10 #include <boost/hof/first_of.hpp>
11 #include <boost/hof/placeholders.hpp>
17 constexpr bool operator()(T i
) const
26 constexpr bool operator()(T i
) const
36 constexpr bool operator()(T x
) const
38 return boost::hof::first_of(
39 boost::hof::if_(std::is_integral
<T
>())(F()),
40 boost::hof::always(true)
47 BOOST_HOF_TEST_CHECK(test_int
<is_5
>()(5));
48 BOOST_HOF_TEST_CHECK(test_int
<is_5
>()(5L));
49 BOOST_HOF_TEST_CHECK(test_int
<is_5
>()(5.0));
50 BOOST_HOF_TEST_CHECK(test_int
<is_5
>()(6.0));
52 BOOST_HOF_TEST_CHECK(test_int
<is_not_5
>()(6));
53 BOOST_HOF_TEST_CHECK(test_int
<is_not_5
>()(6L));
54 BOOST_HOF_TEST_CHECK(test_int
<is_not_5
>()(5.0));
55 BOOST_HOF_TEST_CHECK(test_int
<is_not_5
>()(6.0));
57 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_5
>()(5));
58 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_5
>()(5L));
59 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_5
>()(5.0));
60 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_5
>()(6.0));
62 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_not_5
>()(6));
63 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_not_5
>()(6L));
64 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_not_5
>()(5.0));
65 BOOST_HOF_STATIC_TEST_CHECK(test_int
<is_not_5
>()(6.0));
72 constexpr bool operator()(T x
) const
74 return boost::hof::first_of(
75 boost::hof::if_c
<std::is_integral
<T
>::value
>(F()),
76 boost::hof::always(true)
83 BOOST_HOF_TEST_CHECK(test_int_c
<is_5
>()(5));
84 BOOST_HOF_TEST_CHECK(test_int_c
<is_5
>()(5L));
85 BOOST_HOF_TEST_CHECK(test_int_c
<is_5
>()(5.0));
86 BOOST_HOF_TEST_CHECK(test_int_c
<is_5
>()(6.0));
88 BOOST_HOF_TEST_CHECK(test_int_c
<is_not_5
>()(6));
89 BOOST_HOF_TEST_CHECK(test_int_c
<is_not_5
>()(6L));
90 BOOST_HOF_TEST_CHECK(test_int_c
<is_not_5
>()(5.0));
91 BOOST_HOF_TEST_CHECK(test_int_c
<is_not_5
>()(6.0));
93 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_5
>()(5));
94 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_5
>()(5L));
95 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_5
>()(5.0));
96 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_5
>()(6.0));
98 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_not_5
>()(6));
99 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_not_5
>()(6L));
100 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_not_5
>()(5.0));
101 BOOST_HOF_STATIC_TEST_CHECK(test_int_c
<is_not_5
>()(6.0));
107 constexpr int operator()(T x
, T y
) const
109 return boost::hof::first_of(
110 boost::hof::if_(std::is_integral
<T
>())(boost::hof::_
+ boost::hof::_
),
111 boost::hof::always(0)
116 BOOST_HOF_TEST_CASE()
118 BOOST_HOF_TEST_CHECK(sum_f()(1, 2) == 3);
119 BOOST_HOF_TEST_CHECK(sum_f()(1.0, 2.0) == 0);
120 BOOST_HOF_TEST_CHECK(sum_f()("", "") == 0);
122 BOOST_HOF_STATIC_TEST_CHECK(sum_f()(1, 2) == 3);
123 BOOST_HOF_STATIC_TEST_CHECK(sum_f()("", "") == 0);
130 constexpr int operator()(T x
, T y
) const
132 return boost::hof::first_of(
133 boost::hof::if_c
<std::is_integral
<T
>::value
>(boost::hof::_
+ boost::hof::_
),
134 boost::hof::always(0)
139 BOOST_HOF_TEST_CASE()
141 BOOST_HOF_TEST_CHECK(sum_f_c()(1, 2) == 3);
142 BOOST_HOF_TEST_CHECK(sum_f_c()(1.0, 2.0) == 0);
143 BOOST_HOF_TEST_CHECK(sum_f_c()("", "") == 0);
145 BOOST_HOF_STATIC_TEST_CHECK(sum_f_c()(1, 2) == 3);
146 BOOST_HOF_STATIC_TEST_CHECK(sum_f_c()("", "") == 0);
149 #if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
150 BOOST_HOF_TEST_CASE()
152 static_assert(noexcept(boost::hof::if_(std::is_integral
<int>())(boost::hof::identity
)(1)), "noexcept if");