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
11BOOST_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
17BOOST_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
45struct f FINAL {
46 int operator()(int i, void *) const {
47 return i;
48 }
49};
50
51#if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
52BOOST_HOF_TEST_CASE()
53{
54 static_assert(boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5), "noexcept flip");
55}
56#endif
57
58BOOST_HOF_TEST_CASE()
59{
60 BOOST_HOF_TEST_CHECK(boost::hof::flip(f())(nullptr, 2) == 2);
61}
62

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