flip.cpp 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. {
  12. BOOST_HOF_TEST_CHECK(3 == boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5));
  13. BOOST_HOF_STATIC_TEST_CHECK(3 == boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5));
  14. }
  15. BOOST_HOF_TEST_CASE()
  16. {
  17. typedef std::integral_constant<int, 1> one;
  18. typedef std::integral_constant<int, 2> two;
  19. typedef std::integral_constant<int, 3> three;
  20. BOOST_HOF_TEST_CHECK(1 == boost::hof::arg(one{})(1, 2, 3, 4));
  21. BOOST_HOF_STATIC_TEST_CHECK(1 == boost::hof::arg(one{})(1, 2, 3, 4));
  22. BOOST_HOF_TEST_CHECK(2 == boost::hof::flip(boost::hof::arg(one{}))(1, 2, 3, 4));
  23. BOOST_HOF_STATIC_TEST_CHECK(2 == boost::hof::flip(boost::hof::arg(one{}))(1, 2, 3, 4));
  24. BOOST_HOF_TEST_CHECK(2 == boost::hof::arg(two{})(1, 2, 3, 4));
  25. BOOST_HOF_STATIC_TEST_CHECK(2 == boost::hof::arg(two{})(1, 2, 3, 4));
  26. BOOST_HOF_TEST_CHECK(1 == boost::hof::flip(boost::hof::arg(two{}))(1, 2, 3, 4));
  27. BOOST_HOF_STATIC_TEST_CHECK(1 == boost::hof::flip(boost::hof::arg(two{}))(1, 2, 3, 4));
  28. BOOST_HOF_TEST_CHECK(3 == boost::hof::arg(three{})(1, 2, 3, 4));
  29. BOOST_HOF_STATIC_TEST_CHECK(3 == boost::hof::arg(three{})(1, 2, 3, 4));
  30. BOOST_HOF_TEST_CHECK(3 == boost::hof::flip(boost::hof::arg(three{}))(1, 2, 3, 4));
  31. BOOST_HOF_STATIC_TEST_CHECK(3 == boost::hof::flip(boost::hof::arg(three{}))(1, 2, 3, 4));
  32. }
  33. #if defined(__GNUC__) && !defined (__clang__) && __GNUC__ == 4 && __GNUC_MINOR__ < 7
  34. #define FINAL
  35. #else
  36. #define FINAL final
  37. #endif
  38. struct f FINAL {
  39. int operator()(int i, void *) const {
  40. return i;
  41. }
  42. };
  43. #if BOOST_HOF_HAS_NOEXCEPT_DEDUCTION
  44. BOOST_HOF_TEST_CASE()
  45. {
  46. static_assert(boost::hof::flip(boost::hof::_ - boost::hof::_)(2, 5), "noexcept flip");
  47. }
  48. #endif
  49. BOOST_HOF_TEST_CASE()
  50. {
  51. BOOST_HOF_TEST_CHECK(boost::hof::flip(f())(nullptr, 2) == 2);
  52. }