1 /*=============================================================================
2 Copyright (c) 2017 Paul Fultz II
3 flip.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/flip.hpp>
8 #include <boost/hof/placeholders.hpp>
9 #include "test.hpp"
10
BOOST_HOF_TEST_CASE()11 BOOST_HOF_TEST_CASE()
12 {
13 BOOST_HOF_TEST_CHECK(3 == boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5));
14 BOOST_HOF_STATIC_TEST_CHECK(3 == boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5));
15 }
16
BOOST_HOF_TEST_CASE()17 BOOST_HOF_TEST_CASE()
18 {
19 typedef std::integral_constant<int, 1> one;
20 typedef std::integral_constant<int, 2> two;
21 typedef std::integral_constant<int, 3> three;
22 BOOST_HOF_TEST_CHECK(1 == boost::hof::arg(one{})(1, 2, 3, 4));
23 BOOST_HOF_STATIC_TEST_CHECK(1 == boost::hof::arg(one{})(1, 2, 3, 4));
24 BOOST_HOF_TEST_CHECK(2 == boost::hof::flip(boost::hof::arg(one{}))(1, 2, 3, 4));
25 BOOST_HOF_STATIC_TEST_CHECK(2 == boost::hof::flip(boost::hof::arg(one{}))(1, 2, 3, 4));
26
27 BOOST_HOF_TEST_CHECK(2 == boost::hof::arg(two{})(1, 2, 3, 4));
28 BOOST_HOF_STATIC_TEST_CHECK(2 == boost::hof::arg(two{})(1, 2, 3, 4));
29 BOOST_HOF_TEST_CHECK(1 == boost::hof::flip(boost::hof::arg(two{}))(1, 2, 3, 4));
30 BOOST_HOF_STATIC_TEST_CHECK(1 == boost::hof::flip(boost::hof::arg(two{}))(1, 2, 3, 4));
31
32 BOOST_HOF_TEST_CHECK(3 == boost::hof::arg(three{})(1, 2, 3, 4));
33 BOOST_HOF_STATIC_TEST_CHECK(3 == boost::hof::arg(three{})(1, 2, 3, 4));
34 BOOST_HOF_TEST_CHECK(3 == boost::hof::flip(boost::hof::arg(three{}))(1, 2, 3, 4));
35 BOOST_HOF_STATIC_TEST_CHECK(3 == boost::hof::flip(boost::hof::arg(three{}))(1, 2, 3, 4));
36 }
37
38 #if defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
39 #define FINAL
40 #else
41 #define FINAL final
42 #endif
43
44
45 struct f FINAL {
operator ()FINAL46 int operator()(int i, void *) const {
47 return i;
48 }
49 };
50
51 #if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
BOOST_HOF_TEST_CASE()52 BOOST_HOF_TEST_CASE()
53 {
54 static_assert(boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5), "noexcept flip");
55 }
56 #endif
57
BOOST_HOF_TEST_CASE()58 BOOST_HOF_TEST_CASE()
59 {
60 BOOST_HOF_TEST_CHECK(boost::hof::flip(f())(nullptr, 2) == 2);
61 }
62