1/*=============================================================================
2 Copyright (c) 2017 Paul Fultz II
3 limit.cpp
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/limit.hpp>
8#include <boost/hof/is_invocable.hpp>
9#include <boost/hof/pack.hpp>
10#include "test.hpp"
11
12BOOST_HOF_TEST_CASE()
13{
14 auto f = boost::hof::limit(std::integral_constant<int, 2>())(binary_class());
15 BOOST_HOF_TEST_CHECK(f(1, 2) == 3);
16 static_assert(boost::hof::function_param_limit<decltype(f)>::value == 2, "Function limit is 2");
17}
18
19BOOST_HOF_TEST_CASE()
20{
21 auto f = boost::hof::limit_c<2>(f: binary_class());
22 BOOST_HOF_TEST_CHECK(f(1, 2) == 3);
23 static_assert(boost::hof::function_param_limit<decltype(f)>::value == 2, "Function limit is 2");
24}
25
26BOOST_HOF_TEST_CASE()
27{
28 auto f = boost::hof::limit_c<2>(f: boost::hof::always(3));
29 BOOST_HOF_TEST_CHECK(f(1, 2) == 3);
30 BOOST_HOF_TEST_CHECK(f(1) == 3);
31 BOOST_HOF_TEST_CHECK(f() == 3);
32 static_assert(boost::hof::function_param_limit<decltype(f)>::value == 2, "Function limit is 2");
33 static_assert(boost::hof::is_invocable<decltype(f), int>::value, "Invocable");
34 static_assert(boost::hof::is_invocable<decltype(f), int, int>::value, "Invocable");
35 static_assert(!boost::hof::is_invocable<decltype(f), int, int, int>::value, "Not Invocable");
36}
37
38BOOST_HOF_TEST_CASE()
39{
40 static_assert(!boost::hof::is_invocable<decltype(boost::hof::limit), int>::value, "Not integral constant");
41}
42
43BOOST_HOF_TEST_CASE()
44{
45 static_assert(boost::hof::function_param_limit<decltype(boost::hof::pack())>::value == 0, "Failed limit on pack");
46 static_assert(boost::hof::function_param_limit<decltype(boost::hof::pack(1))>::value == 1, "Failed limit on pack");
47 static_assert(boost::hof::function_param_limit<decltype(boost::hof::pack(1, 2))>::value == 2, "Failed limit on pack");
48}
49
50

source code of boost/libs/hof/test/limit.cpp