/* @copyright Louis Dionne 2015 Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE.md or copy at http://boost.org/LICENSE_1_0.txt) */ #include #include #include #include #include #include #include using namespace boost::hana; int main() { ////////////////////////////////////////////////////////////////////////// // Setup for the laws below ////////////////////////////////////////////////////////////////////////// auto strings = make( BOOST_HANA_STRING(""), BOOST_HANA_STRING("a"), BOOST_HANA_STRING("ab"), BOOST_HANA_STRING("abc"), BOOST_HANA_STRING("abcd"), BOOST_HANA_STRING("abcde"), BOOST_HANA_STRING("ba"), BOOST_HANA_STRING("afcd") ); ////////////////////////////////////////////////////////////////////////// // Comparable ////////////////////////////////////////////////////////////////////////// { // equal BOOST_HANA_CONSTANT_CHECK(equal( BOOST_HANA_STRING("abcd"), BOOST_HANA_STRING("abcd") )); BOOST_HANA_CONSTANT_CHECK(not_(equal( BOOST_HANA_STRING("abcd"), BOOST_HANA_STRING("abcde") ))); BOOST_HANA_CONSTANT_CHECK(not_(equal( BOOST_HANA_STRING("abcd"), BOOST_HANA_STRING("") ))); BOOST_HANA_CONSTANT_CHECK(not_(equal( BOOST_HANA_STRING(""), BOOST_HANA_STRING("abcde") ))); BOOST_HANA_CONSTANT_CHECK(equal( BOOST_HANA_STRING(""), BOOST_HANA_STRING("") )); // operators static_assert(has_operator{}, ""); static_assert(has_operator{}, ""); // laws test::TestComparable{strings}; } ////////////////////////////////////////////////////////////////////////// // Orderable ////////////////////////////////////////////////////////////////////////// { // less BOOST_HANA_CONSTANT_CHECK(not_(less( BOOST_HANA_STRING(""), BOOST_HANA_STRING("") ))); BOOST_HANA_CONSTANT_CHECK(less( BOOST_HANA_STRING(""), BOOST_HANA_STRING("a") )); BOOST_HANA_CONSTANT_CHECK(not_(less( BOOST_HANA_STRING("a"), BOOST_HANA_STRING("") ))); BOOST_HANA_CONSTANT_CHECK(less( BOOST_HANA_STRING("a"), BOOST_HANA_STRING("ab") )); BOOST_HANA_CONSTANT_CHECK(not_(less( BOOST_HANA_STRING("ab"), BOOST_HANA_STRING("ab") ))); BOOST_HANA_CONSTANT_CHECK(less( BOOST_HANA_STRING("abc"), BOOST_HANA_STRING("abcde") )); BOOST_HANA_CONSTANT_CHECK(less( BOOST_HANA_STRING("abcde"), BOOST_HANA_STRING("abfde") )); // operators static_assert(has_operator{}, ""); static_assert(has_operator{}, ""); static_assert(has_operator{}, ""); static_assert(has_operator{}, ""); // laws test::TestOrderable{strings}; } }