intersection.cpp 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. #include <boost/hana/assert.hpp>
  5. #include <boost/hana/equal.hpp>
  6. #include <boost/hana/intersection.hpp>
  7. #include <boost/hana/map.hpp>
  8. #include <laws/base.hpp>
  9. #include <support/minimal_product.hpp>
  10. namespace hana = boost::hana;
  11. template <int i>
  12. auto key() { return hana::test::ct_eq<i>{}; }
  13. template <int i>
  14. auto val() { return hana::test::ct_eq<-i>{}; }
  15. template <int i, int j>
  16. auto p() { return ::minimal_product(key<i>(), val<j>()); }
  17. int main() {
  18. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  19. hana::intersection(
  20. hana::make_map(),
  21. hana::make_map()
  22. ),
  23. hana::make_map()
  24. ));
  25. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  26. hana::intersection(
  27. hana::make_map(p<1, 1>()),
  28. hana::make_map()
  29. ),
  30. hana::make_map()
  31. ));
  32. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  33. hana::intersection(
  34. hana::make_map(),
  35. hana::make_map(p<1, 1>())
  36. ),
  37. hana::make_map()
  38. ));
  39. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  40. hana::intersection(
  41. hana::make_map(p<1, 1>()),
  42. hana::make_map(p<1, 2>())
  43. ),
  44. hana::make_map(p<1, 1>())
  45. ));
  46. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  47. hana::intersection(
  48. hana::make_map(
  49. p<1, 2>(),
  50. p<2, 3>()),
  51. hana::make_map(
  52. p<1, 3>(),
  53. p<2, 4>(),
  54. p<3, 5>())
  55. ),
  56. hana::make_map(
  57. p<1, 2>(),
  58. p<2, 3>())
  59. ));
  60. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  61. hana::intersection(
  62. hana::make_map(
  63. p<1, 3>(),
  64. p<2, 4>(),
  65. p<3, 5>()),
  66. hana::make_map(
  67. p<1, 2>(),
  68. p<2, 3>())
  69. ),
  70. hana::make_map(
  71. p<1, 3>(),
  72. p<2, 4>())
  73. ));
  74. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  75. hana::intersection(
  76. hana::make_map(
  77. p<1, 100>(),
  78. p<2, 200>()),
  79. hana::make_map(
  80. p<3, 300>(),
  81. p<4, 400>())
  82. ),
  83. hana::make_map()
  84. ));
  85. }