symmetric_difference.cpp 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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/map.hpp>
  7. #include <boost/hana/symmetric_difference.hpp>
  8. #include <laws/base.hpp>
  9. #include <support/minimal_product.hpp>
  10. namespace hana = boost::hana;
  11. using hana::test::ct_eq;
  12. template <int i>
  13. auto key() { return hana::test::ct_eq<i>{}; }
  14. template <int i>
  15. auto val() { return hana::test::ct_eq<-i>{}; }
  16. template <int i, int j>
  17. auto p() { return ::minimal_product(key<i>(), val<j>()); }
  18. int main() {
  19. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  20. hana::symmetric_difference(
  21. hana::make_map(),
  22. hana::make_map()
  23. ),
  24. hana::make_map()
  25. ));
  26. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  27. hana::symmetric_difference(
  28. hana::make_map(p<1, 1>()),
  29. hana::make_map(p<1, 1>())
  30. ),
  31. hana::make_map()
  32. ));
  33. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  34. hana::symmetric_difference(
  35. hana::make_map(p<1, 2>()),
  36. hana::make_map(p<2, 4>())
  37. ),
  38. hana::make_map(p<1, 2>(),
  39. p<2, 4>())
  40. ));
  41. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  42. hana::symmetric_difference(
  43. hana::make_map(p<1, 2>(),
  44. p<2, 22>()),
  45. hana::make_map(p<2, 4>(),
  46. p<3, 33>())
  47. ),
  48. hana::make_map(p<1, 2>(),
  49. p<3, 33>())
  50. ));
  51. BOOST_HANA_CONSTANT_CHECK(hana::equal(
  52. hana::symmetric_difference(
  53. hana::make_map(p<1, 2>(),
  54. p<2, 22>(),
  55. p<3, 33>(),
  56. p<5, 55>(),
  57. p<8, 88>()),
  58. hana::make_map(p<2, 4>(),
  59. p<3, 33>(),
  60. p<4, 44>(),
  61. p<9, 99>())
  62. ),
  63. hana::make_map(p<1, 2>(),
  64. p<5, 55>(),
  65. p<8, 88>(),
  66. p<4, 44>(),
  67. p<9, 99>())
  68. ));
  69. }