diff --git a/test/test_collate.cpp b/test/test_collate.cpp index e63ee85..50bdad2 100644 --- a/test/test_collate.cpp +++ b/test/test_collate.cpp @@ -12,12 +12,15 @@ #include template -void test_comp(std::locale l, std::basic_string left, std::basic_string right, int ilevel, int expected) +void test_comp(const std::locale& l, + const std::basic_string& left, + const std::basic_string& right, + const boost::locale::collate_level level, + const int expected) { typedef std::basic_string string_type; - boost::locale::collate_level level = static_cast(ilevel); TEST_EQ(boost::locale::comparator(l, level)(left, right), expected < 0); - if(ilevel == 4) { + if(level == boost::locale::collate_level::identical) { const std::collate& coll = std::use_facet>(l); string_type lt = coll.transform(left.c_str(), left.c_str() + left.size()); string_type rt = coll.transform(right.c_str(), right.c_str() + right.size()); @@ -57,11 +60,15 @@ void test_comp(std::locale l, std::basic_string left, std::basic_string(l, _l, _r, level, expected) -void compare(std::string left, std::string right, int level, int expected) +void compare(const std::string left, + const std::string right, + const boost::locale::collate_level level, + const int expected) { + using boost::locale::collate_level; boost::locale::generator gen; std::locale l = gen("en_US.UTF-8"); - if(level == 4) + if(level == collate_level::identical) TEST_EQ(l(left, right), (expected < 0)); TEST_COMP(char, left, right); TEST_COMP(wchar_t, to(left), to(right)); @@ -72,31 +79,33 @@ void compare(std::string left, std::string right, int level, int expected) TEST_COMP(char32_t, to(left), to(right)); #endif l = gen("en_US.ISO8859-1"); - if(level == 4) + if(level == collate_level::identical) TEST_EQ(l(to(left), to(right)), (expected < 0)); TEST_COMP(char, to(left), to(right)); } void test_collate() { - int primary = 0, secondary = 1, tertiary = 2, quaternary = 3, identical = 4; - int le = -1, gt = 1, eq = 0; + constexpr int le = -1, gt = 1, eq = 0; + using boost::locale::collate_level; - compare("a", "A", primary, eq); - compare("a", "A", secondary, eq); - compare("A", "a", tertiary, gt); - compare("a", "A", tertiary, le); - compare("a", "A", quaternary, le); - compare("A", "a", quaternary, gt); - compare("a", "A", identical, le); - compare("A", "a", identical, gt); - compare("a", "ä", primary, eq); // a , ä - compare("a", "ä", secondary, le); // a , ä - compare("ä", "a", secondary, gt); // a , ä - compare("a", "ä", quaternary, le); // a , ä - compare("ä", "a", quaternary, gt); // a , ä - compare("a", "ä", identical, le); // a , ä - compare("ä", "a", identical, gt); // a , ä + compare("a", "A", collate_level::primary, eq); + compare("a", "A", collate_level::secondary, eq); + compare("A", "a", collate_level::tertiary, gt); + compare("a", "A", collate_level::tertiary, le); + compare("a", "A", collate_level::quaternary, le); + compare("A", "a", collate_level::quaternary, gt); + compare("a", "A", collate_level::identical, le); + compare("A", "a", collate_level::identical, gt); + compare("a", "ä", collate_level::primary, eq); + compare("a", "ä", collate_level::secondary, le); + compare("ä", "a", collate_level::secondary, gt); + compare("a", "ä", collate_level::quaternary, le); + compare("ä", "a", collate_level::quaternary, gt); + compare("a", "ä", collate_level::identical, le); + compare("ä", "a", collate_level::identical, gt); + compare("a", "a", collate_level::identical, eq); + compare("ä", "ä", collate_level::identical, eq); } BOOST_LOCALE_DISABLE_UNREACHABLE_CODE_WARNING diff --git a/test/test_posix_collate.cpp b/test/test_posix_collate.cpp index fbc8d15..0f16307 100644 --- a/test/test_posix_collate.cpp +++ b/test/test_posix_collate.cpp @@ -56,12 +56,13 @@ void test_char() std::cout << "- Testing at least C" << std::endl; std::locale l = gen("C.UTF-8"); test_one(l, "a", "b", -1); + test_one(l, "b", "a", 1); test_one(l, "a", "a", 0); #if !defined(__APPLE__) && !defined(__FreeBSD__) for(const std::string locale_name : {"en_US.UTF-8", "en_US.ISO8859-1"}) { if(!has_posix_locale(locale_name)) - std::cout << "- " << locale_name << " not supported, skipping" << std::endl; + std::cout << "- " << locale_name << " not supported, skipping" << std::endl; // LCOV_EXCL_LINE else { std::cout << "- Testing " << locale_name << std::endl; l = gen(locale_name); diff --git a/test/test_std_collate.cpp b/test/test_std_collate.cpp index 8e1b39a..f4cc080 100644 --- a/test/test_std_collate.cpp +++ b/test/test_std_collate.cpp @@ -57,6 +57,7 @@ void test_char() std::locale l = gen("en_US.UTF-8"); test_one(l, "a", "b", -1); + test_one(l, "b", "a", 1); test_one(l, "a", "a", 0); #if defined(_LIBCPP_VERSION) && (defined(__APPLE__) || defined(__FreeBSD__)) @@ -76,7 +77,7 @@ void test_char() test_one(l, "ängel", "år", info.language() == "sv" ? 1 : -1); } } else - std::cout << "- " << name << " not supported, skipping" << std::endl; + std::cout << "- " << name << " not supported, skipping" << std::endl; // LCOV_EXCL_LINE } #endif } diff --git a/test/test_winapi_collate.cpp b/test/test_winapi_collate.cpp index b470ae4..a05eb5e 100644 --- a/test/test_winapi_collate.cpp +++ b/test/test_winapi_collate.cpp @@ -12,12 +12,15 @@ #include template -void test_comp(std::locale l, std::basic_string left, std::basic_string right, int ilevel, int expected) +void test_comp(const std::locale& l, + const std::basic_string& left, + const std::basic_string& right, + const boost::locale::collate_level level, + const int expected) { typedef std::basic_string string_type; - boost::locale::collate_level level = static_cast(ilevel); TEST_EQ(boost::locale::comparator(l, level)(left, right), (expected < 0)); - if(ilevel == 4) { + if(level == boost::locale::collate_level::identical) { const std::collate& coll = std::use_facet>(l); string_type lt = coll.transform(left.c_str(), left.c_str() + left.size()); string_type rt = coll.transform(right.c_str(), right.c_str() + right.size()); @@ -57,36 +60,47 @@ void test_comp(std::locale l, std::basic_string left, std::basic_string(l, _l, _r, level, expected) -void compare(std::string left, std::string right, int level, int expected) +void compare(const std::string left, + const std::string right, + const boost::locale::collate_level level, + const int expected) { boost::locale::generator gen; std::locale l = gen("en_US.UTF-8"); - if(level == 4) + if(level == boost::locale::collate_level::identical) TEST_EQ(l(left, right), (expected < 0)); TEST_COMP(char, left, right); TEST_COMP(wchar_t, to(left), to(right)); +#ifdef BOOST_LOCALE_ENABLE_CHAR16_T + TEST_COMP(char16_t, to(left), to(right)); +#endif +#ifdef BOOST_LOCALE_ENABLE_CHAR32_T + TEST_COMP(char32_t, to(left), to(right)); +#endif } void test_collate() { - int primary = 0, secondary = 1, tertiary = 2, quaternary = 3, identical = 4; - int le = -1, gt = 1, eq = 0; + constexpr int le = -1, gt = 1, eq = 0; + using boost::locale::collate_level; - compare("a", "A", primary, eq); - compare("a", "A", secondary, eq); - compare("A", "a", tertiary, gt); - compare("a", "A", tertiary, le); - compare("a", "A", quaternary, le); - compare("A", "a", quaternary, gt); - compare("a", "A", identical, le); - compare("A", "a", identical, gt); - compare("a", "ä", primary, eq); // a , ä - compare("a", "ä", secondary, le); // a , ä - compare("ä", "a", secondary, gt); // a , ä - compare("a", "ä", quaternary, le); // a , ä - compare("ä", "a", quaternary, gt); // a , ä - compare("a", "ä", identical, le); // a , ä - compare("ä", "a", identical, gt); // a , ä + compare("a", "A", collate_level::primary, eq); + compare("a", "A", collate_level::secondary, eq); + compare("A", "a", collate_level::tertiary, gt); + compare("a", "A", collate_level::tertiary, le); + compare("a", "A", collate_level::quaternary, le); + compare("A", "a", collate_level::quaternary, gt); + compare("a", "A", collate_level::identical, le); + compare("A", "a", collate_level::identical, gt); + compare("a", "ä", collate_level::primary, eq); + compare("a", "ä", collate_level::secondary, le); + compare("ä", "a", collate_level::secondary, gt); + compare("a", "ä", collate_level::quaternary, le); + compare("ä", "a", collate_level::quaternary, gt); + compare("a", "ä", collate_level::identical, le); + compare("ä", "a", collate_level::identical, gt); + compare("a", "a", collate_level::identical, eq); + compare("ä", "ä", collate_level::identical, eq); } BOOST_LOCALE_DISABLE_UNREACHABLE_CODE_WARNING