laws.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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/string.hpp>
  5. #include <boost/hana/tuple.hpp>
  6. #include <laws/comparable.hpp>
  7. #include <laws/foldable.hpp>
  8. #include <laws/hashable.hpp>
  9. #include <laws/iterable.hpp>
  10. #include <laws/monoid.hpp>
  11. #include <laws/orderable.hpp>
  12. #include <laws/searchable.hpp>
  13. namespace hana = boost::hana;
  14. int main() {
  15. // Comparable and Hashable
  16. {
  17. auto strings = hana::make_tuple(
  18. BOOST_HANA_STRING(""),
  19. BOOST_HANA_STRING("a"),
  20. BOOST_HANA_STRING("ab"),
  21. BOOST_HANA_STRING("abc"),
  22. BOOST_HANA_STRING("abcd"),
  23. BOOST_HANA_STRING("abcde"),
  24. BOOST_HANA_STRING("ba")
  25. );
  26. hana::test::TestComparable<hana::string_tag>{strings};
  27. hana::test::TestHashable<hana::string_tag>{strings};
  28. }
  29. // Monoid
  30. {
  31. auto strings = hana::make_tuple(
  32. BOOST_HANA_STRING(""),
  33. BOOST_HANA_STRING("a"),
  34. BOOST_HANA_STRING("ab"),
  35. BOOST_HANA_STRING("abc"),
  36. BOOST_HANA_STRING("abcd"),
  37. BOOST_HANA_STRING("abcde"),
  38. BOOST_HANA_STRING("ba")
  39. );
  40. hana::test::TestMonoid<hana::string_tag>{strings};
  41. }
  42. // Foldable and Iterable
  43. {
  44. auto strings = hana::make_tuple(
  45. BOOST_HANA_STRING(""),
  46. BOOST_HANA_STRING("a"),
  47. BOOST_HANA_STRING("ab"),
  48. BOOST_HANA_STRING("abc"),
  49. BOOST_HANA_STRING("abcd"),
  50. BOOST_HANA_STRING("abcde"),
  51. BOOST_HANA_STRING("ba"),
  52. BOOST_HANA_STRING("afcd")
  53. );
  54. hana::test::TestFoldable<hana::string_tag>{strings};
  55. hana::test::TestIterable<hana::string_tag>{strings};
  56. }
  57. // Orderable
  58. {
  59. auto strings = hana::make_tuple(
  60. BOOST_HANA_STRING(""),
  61. BOOST_HANA_STRING("a"),
  62. BOOST_HANA_STRING("ab"),
  63. BOOST_HANA_STRING("abc"),
  64. BOOST_HANA_STRING("ba"),
  65. BOOST_HANA_STRING("abd")
  66. );
  67. hana::test::TestOrderable<hana::string_tag>{strings};
  68. }
  69. // Searchable
  70. {
  71. auto keys = hana::tuple_c<char, 'a', 'f'>;
  72. auto strings = hana::make_tuple(
  73. BOOST_HANA_STRING(""),
  74. BOOST_HANA_STRING("a"),
  75. BOOST_HANA_STRING("ab"),
  76. BOOST_HANA_STRING("abcd"),
  77. BOOST_HANA_STRING("ba"),
  78. BOOST_HANA_STRING("afcd")
  79. );
  80. hana::test::TestSearchable<hana::string_tag>{strings, keys};
  81. }
  82. }