ap.hpp 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright Louis Dionne 2013-2017
  2. // Distributed under the Boost Software License, Version 1.0.
  3. // (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt)
  4. #ifndef BOOST_HANA_TEST_AUTO_AP_HPP
  5. #define BOOST_HANA_TEST_AUTO_AP_HPP
  6. #include <boost/hana/assert.hpp>
  7. #include <boost/hana/ap.hpp>
  8. #include <boost/hana/equal.hpp>
  9. #include "test_case.hpp"
  10. #include <laws/base.hpp>
  11. TestCase test_ap{[]{
  12. namespace hana = boost::hana;
  13. using hana::test::ct_eq;
  14. hana::test::_injection<0> f{};
  15. hana::test::_injection<1> g{};
  16. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  17. hana::ap(MAKE_TUPLE(), MAKE_TUPLE()),
  18. MAKE_TUPLE()
  19. ));
  20. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  21. hana::ap(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{})),
  22. MAKE_TUPLE()
  23. ));
  24. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  25. hana::ap(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
  26. MAKE_TUPLE()
  27. ));
  28. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  29. hana::ap(MAKE_TUPLE(), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
  30. MAKE_TUPLE()
  31. ));
  32. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  33. hana::ap(MAKE_TUPLE(f), MAKE_TUPLE()),
  34. MAKE_TUPLE()
  35. ));
  36. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  37. hana::ap(MAKE_TUPLE(f), MAKE_TUPLE(ct_eq<0>{})),
  38. MAKE_TUPLE(f(ct_eq<0>{}))
  39. ));
  40. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  41. hana::ap(MAKE_TUPLE(f), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
  42. MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}))
  43. ));
  44. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  45. hana::ap(MAKE_TUPLE(f), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
  46. MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}), f(ct_eq<2>{}))
  47. ));
  48. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  49. hana::ap(MAKE_TUPLE(f, g), MAKE_TUPLE()),
  50. MAKE_TUPLE()
  51. ));
  52. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  53. hana::ap(MAKE_TUPLE(f, g), MAKE_TUPLE(ct_eq<0>{})),
  54. MAKE_TUPLE(f(ct_eq<0>{}), g(ct_eq<0>{}))
  55. ));
  56. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  57. hana::ap(MAKE_TUPLE(f, g), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{})),
  58. MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}), g(ct_eq<0>{}), g(ct_eq<1>{}))
  59. ));
  60. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  61. hana::ap(MAKE_TUPLE(f, g), MAKE_TUPLE(ct_eq<0>{}, ct_eq<1>{}, ct_eq<2>{})),
  62. MAKE_TUPLE(f(ct_eq<0>{}), f(ct_eq<1>{}), f(ct_eq<2>{}),
  63. g(ct_eq<0>{}), g(ct_eq<1>{}), g(ct_eq<2>{}))
  64. ));
  65. }};
  66. #endif // !BOOST_HANA_TEST_AUTO_AP_HPP