lexicographical_compare.hpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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_LEXICOGRAPHICAL_COMPARE_HPP
  5. #define BOOST_HANA_TEST_AUTO_LEXICOGRAPHICAL_COMPARE_HPP
  6. #include <boost/hana/assert.hpp>
  7. #include <boost/hana/equal.hpp>
  8. #include <boost/hana/lexicographical_compare.hpp>
  9. #include <boost/hana/not.hpp>
  10. #include <laws/base.hpp>
  11. #include "test_case.hpp"
  12. TestCase test_lexicographical_compare{[]{
  13. namespace hana = boost::hana;
  14. using hana::test::ct_ord;
  15. struct undefined { };
  16. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  17. MAKE_TUPLE(),
  18. MAKE_TUPLE()
  19. )));
  20. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  21. MAKE_TUPLE(),
  22. MAKE_TUPLE(undefined{})
  23. ));
  24. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  25. MAKE_TUPLE(undefined{}),
  26. MAKE_TUPLE()
  27. )));
  28. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  29. MAKE_TUPLE(ct_ord<0>{}),
  30. MAKE_TUPLE(ct_ord<0>{})
  31. )));
  32. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  33. MAKE_TUPLE(ct_ord<0>{}),
  34. MAKE_TUPLE(ct_ord<1>{})
  35. ));
  36. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  37. MAKE_TUPLE(ct_ord<1>{}),
  38. MAKE_TUPLE(ct_ord<0>{})
  39. )));
  40. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  41. MAKE_TUPLE(ct_ord<0>{}, undefined{}),
  42. MAKE_TUPLE(ct_ord<0>{})
  43. )));
  44. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  45. MAKE_TUPLE(ct_ord<0>{}),
  46. MAKE_TUPLE(ct_ord<0>{}, undefined{})
  47. ));
  48. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  49. MAKE_TUPLE(ct_ord<0>{}, ct_ord<0>{}),
  50. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{})
  51. ));
  52. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  53. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}),
  54. MAKE_TUPLE(ct_ord<0>{}, ct_ord<0>{})
  55. )));
  56. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  57. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}),
  58. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{})
  59. )));
  60. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  61. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{}),
  62. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{})
  63. )));
  64. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  65. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}),
  66. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{})
  67. ));
  68. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  69. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{}, undefined{}),
  70. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{})
  71. )));
  72. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  73. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{}),
  74. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{}, undefined{})
  75. ));
  76. BOOST_HANA_CONSTANT_CHECK(hana::lexicographical_compare(
  77. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{}),
  78. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{})
  79. ));
  80. BOOST_HANA_CONSTANT_CHECK(hana::not_(hana::lexicographical_compare(
  81. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<3>{}),
  82. MAKE_TUPLE(ct_ord<0>{}, ct_ord<1>{}, ct_ord<2>{}, undefined{})
  83. )));
  84. }};
  85. #endif // !BOOST_HANA_TEST_AUTO_LEXICOGRAPHICAL_COMPARE_HPP