]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/hof/test/fold.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/fold.hpp>
12 template<class T
, class U
>
13 constexpr T
operator()(T x
, U y
) const noexcept
21 template<class T
, class U
>
22 constexpr T
operator()(T x
, U y
) const BOOST_HOF_RETURNS_DEDUCE_NOEXCEPT(x
+y
)
28 #if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
31 static_assert(noexcept(boost::hof::fold(max_f(), 0)(2, 3, 4, 5)), "noexcept fold");
32 static_assert(noexcept(boost::hof::fold(sum_f(), 0)(2, 3, 4, 5)), "noexcept fold");
33 static_assert(!noexcept(boost::hof::fold(sum_f(), std::string())("hello", "-", "world")), "noexcept fold");
39 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f(), 0)(2, 3, 4, 5) == 5);
40 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f(), 0)(5, 4, 3, 2) == 5);
41 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f(), 0)(2, 3, 5, 4) == 5);
43 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f(), 0)(2, 3, 4, 5) == 5);
44 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f(), 0)(5, 4, 3, 2) == 5);
45 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f(), 0)(2, 3, 5, 4) == 5);
50 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f(), 0)() == 0);
51 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f(), 0)(5) == 5);
53 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f(), 0)() == 0);
54 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f(), 0)(5) == 5);
58 constexpr auto find_positive_max(Ts
... xs
) BOOST_HOF_RETURNS
60 boost::hof::fold(max_f(), 0)(xs
...)
65 BOOST_HOF_TEST_CHECK(find_positive_max() == 0);
66 BOOST_HOF_TEST_CHECK(find_positive_max(5) == 5);
68 BOOST_HOF_STATIC_TEST_CHECK(find_positive_max() == 0);
69 BOOST_HOF_STATIC_TEST_CHECK(find_positive_max(5) == 5);
74 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f())(5) == 5);
76 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f())(5) == 5);
81 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f())(2, 3, 4, 5) == 5);
82 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f())(5, 4, 3, 2) == 5);
83 BOOST_HOF_TEST_CHECK(boost::hof::fold(max_f())(2, 3, 5, 4) == 5);
85 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f())(2, 3, 4, 5) == 5);
86 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f())(5, 4, 3, 2) == 5);
87 BOOST_HOF_STATIC_TEST_CHECK(boost::hof::fold(max_f())(2, 3, 5, 4) == 5);
92 BOOST_HOF_TEST_CHECK(boost::hof::fold(sum_f(), std::string())("hello", "-", "world") == "hello-world");