diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 42e07b84..529b766f 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -16,6 +16,7 @@ project /boost/iterator//boost_iterator /boost/utility//boost_utility /boost/tuple//boost_tuple + /boost/container_hash//boost_container_hash shared:BOOST_CONTAINER_DYN_LINK=1 gcc-cygwin:static diff --git a/test/string_view_compat_test.cpp b/test/string_view_compat_test.cpp index f786b96c..452e6e44 100644 --- a/test/string_view_compat_test.cpp +++ b/test/string_view_compat_test.cpp @@ -13,38 +13,46 @@ #include +#if defined(__cpp_lib_string_view) && (__cpp_lib_string_view >= 201606L) +#define BOOST_CONTAINER_TEST_HAS_STD_STRING_VIEW +#include +#endif + +template void conversion_test() { #ifndef BOOST_CONTAINER_TEMPLATED_CONVERSION_OPERATOR_BROKEN { const boost::container::string s = "some text"; - boost::string_view sv(s); + StringViewType sv(s); BOOST_TEST(s.data() == sv.data() && s.size() == sv.size()); - boost::string_view sv2; + StringViewType sv2; sv2 = s; BOOST_TEST(s.data() == sv2.data() && s.size() == sv2.size()); - const boost::string_view csv(s); + const StringViewType csv(s); BOOST_TEST(s.data() == sv.data() && s.size() == csv.size()); } #endif } +template void to_view_test() { const boost::container::string s = "some text"; - boost::string_view sv(s.to_view()); + StringViewType sv(s.to_view()); BOOST_TEST(s.data() == sv.data() && s.size() == sv.size()); - boost::string_view sv2; - sv2 = s.to_view(); + StringViewType sv2; + sv2 = s.to_view(); BOOST_TEST(s.data() == sv2.data() && s.size() == sv2.size()); - const boost::string_view csv(s.to_view()); + const StringViewType csv(s.to_view()); BOOST_TEST(s.data() == csv.data() && s.size() == csv.size()); } +template void equal_test() { - const boost::string_view sv = "same text"; - const boost::string_view svd = "different text"; + const StringViewType sv = "same text"; + const StringViewType svd = "different text"; const boost::container::string s = "same text"; BOOST_TEST(sv == s); BOOST_TEST(s == sv); @@ -52,10 +60,11 @@ void equal_test() BOOST_TEST(!(s == svd)); } +template void unequal_test() { - const boost::string_view sv = "same text"; - const boost::string_view svd = "different text"; + const StringViewType sv = "same text"; + const StringViewType svd = "different text"; const boost::container::string s = "same text"; BOOST_TEST(!(sv != s)); BOOST_TEST(!(s != sv)); @@ -63,9 +72,10 @@ void unequal_test() BOOST_TEST(s != svd); } +template void less_test() { - boost::string_view sv = "0123456"; + StringViewType sv = "0123456"; boost::container::string s = "0123459"; BOOST_TEST(sv < s); BOOST_TEST(!(s < sv)); @@ -80,9 +90,10 @@ void less_test() BOOST_TEST(!(s < sv)); } +template void greater_test() { - boost::string_view sv = "0123459"; + StringViewType sv = "0123459"; boost::container::string s = "0123456"; BOOST_TEST(sv > s); BOOST_TEST(!(s > sv)); @@ -97,9 +108,10 @@ void greater_test() BOOST_TEST(!(s > sv)); } +template void less_equal_test() { - boost::string_view sv = "0123456"; + StringViewType sv = "0123456"; boost::container::string s = "0123459"; BOOST_TEST(sv <= s); BOOST_TEST(!(s <= sv)); @@ -114,9 +126,10 @@ void less_equal_test() BOOST_TEST(s <= sv); } +template void greater_equal_test() { - boost::string_view sv = "0123459"; + StringViewType sv = "0123459"; boost::container::string s = "0123456"; BOOST_TEST(sv >= s); BOOST_TEST(!(s >= sv)); @@ -131,58 +144,65 @@ void greater_equal_test() BOOST_TEST(s >= sv); } +template void constructor_test() { - boost::string_view sv = "0123459"; + StringViewType sv = "0123459"; boost::container::string s(sv); BOOST_TEST(sv == s); boost::container::string s2(sv, s.get_allocator()); BOOST_TEST(sv == s); } +template void assignment_test() { - boost::string_view sv = "0123459"; + StringViewType sv = "0123459"; boost::container::string s; s = sv; BOOST_TEST(sv == s); } +template void assign_test() { - boost::string_view sv = "0123459"; + StringViewType sv = "0123459"; boost::container::string s; s.assign(sv); BOOST_TEST(sv == s); } +template void plus_equal_test() { - boost::string_view sv = "23459"; + StringViewType sv = "23459"; boost::container::string s("01"); s += sv; BOOST_TEST(s == "0123459"); } +template void append_test() { - boost::string_view sv = "23459"; + StringViewType sv = "23459"; boost::container::string s("01"); s.append(sv); BOOST_TEST(s == "0123459"); } +template void insert_test() { - boost::string_view sv = "34"; + StringViewType sv = "34"; boost::container::string s("01259"); s.insert(3u, sv); BOOST_TEST(s == "0123459"); } +template void replace_test() { - boost::string_view sv = "5678"; + StringViewType sv = "5678"; boost::container::string s("01259"); s.replace(2u, 2u, sv); BOOST_TEST(s == "0156789"); @@ -192,83 +212,122 @@ void replace_test() BOOST_TEST(s == "0155678"); } +template void find_test() { - const boost::string_view sv = "25"; + const StringViewType sv = "25"; boost::container::string s("0125925123"); BOOST_TEST(s.find(sv,4) == 5); } +template void rfind_test() { - const boost::string_view sv = "25"; + const StringViewType sv = "25"; boost::container::string s("0125925123"); BOOST_TEST(s.rfind(sv,4) == 2); } +template void find_first_of_test() { - const boost::string_view sv = "52"; + const StringViewType sv = "52"; boost::container::string s("0125925123"); BOOST_TEST(s.find_first_of(sv,4) == 5); } +template void find_last_of_test() { - const boost::string_view sv = "52"; + const StringViewType sv = "52"; boost::container::string s("520125925123"); BOOST_TEST(s.find_last_of(sv,6) == 5); } +template void find_first_not_of_test() { - const boost::string_view sv = "52"; + const StringViewType sv = "52"; boost::container::string s("0125925123"); BOOST_TEST(s.find_first_not_of(sv,2) == 4); } +template void find_last_not_of_test() { - const boost::string_view sv = "52"; + const StringViewType sv = "52"; boost::container::string s("0125925123"); BOOST_TEST(s.find_last_not_of(sv,6) == 4); } +template void compare_test() { - const boost::string_view sv = "52"; + const StringViewType sv = "52"; boost::container::string s("0125925123"); BOOST_TEST(s.compare(sv) < 0); - BOOST_TEST(s.compare(boost::string_view("0125925123")) == 0); - BOOST_TEST(s.compare(2u, s.size() - 2u, boost::string_view("25925123")) == 0); - boost::string_view sv2("5212592512389"); + BOOST_TEST(s.compare(StringViewType("0125925123")) == 0); + BOOST_TEST(s.compare(2u, s.size() - 2u, StringViewType("25925123")) == 0); + StringViewType sv2("5212592512389"); BOOST_TEST(s.compare(2u, s.size() - 2u, sv2, 3, sv2.size()-5u) == 0); } +#if BOOST_CXX_VERSION >= 201103L +#include + +template +void hash_test() +{ + + const boost::container::string s1 = "0125925123"; + const boost::container::string s2 = "25925123"; + + BOOST_TEST(boost::hash_value(s1) == boost::hash_value(StringViewType(s1))); + BOOST_TEST(boost::hash_value(s2) == boost::hash_value(StringViewType(s2))); +} + +#else + +template +void hash_test() +{} + +#endif + +template +void test_all() +{ + conversion_test(); + to_view_test(); + equal_test(); + unequal_test(); + less_test(); + greater_test(); + less_equal_test(); + greater_equal_test(); + constructor_test(); + assignment_test(); + assign_test(); + plus_equal_test(); + append_test(); + insert_test(); + replace_test(); + find_test(); + rfind_test(); + find_first_of_test(); + find_last_of_test(); + find_first_not_of_test(); + find_last_not_of_test(); + compare_test(); + hash_test(); +} + int main() { - conversion_test(); - to_view_test(); - equal_test(); - unequal_test(); - less_test(); - greater_test(); - less_equal_test(); - greater_equal_test(); - constructor_test(); - assignment_test(); - assign_test(); - plus_equal_test(); - append_test(); - insert_test(); - replace_test(); - find_test(); - rfind_test(); - find_first_of_test(); - find_last_of_test(); - find_first_not_of_test(); - find_last_not_of_test(); - compare_test(); + test_all(); + #ifdef BOOST_CONTAINER_TEST_HAS_STD_STRING_VIEW + test_all(); + #endif return boost::report_errors(); }