mirror of
https://github.com/boostorg/locale.git
synced 2026-01-19 04:22:08 +00:00
Refactor collation test and add missing case
Test of identical level with equal values was missing.
This commit is contained in:
committed by
Alexander Grund
parent
aac343b6e0
commit
15dcfb797d
@@ -12,12 +12,15 @@
|
||||
#include <iostream>
|
||||
|
||||
template<typename Char>
|
||||
void test_comp(std::locale l, std::basic_string<Char> left, std::basic_string<Char> right, int ilevel, int expected)
|
||||
void test_comp(const std::locale& l,
|
||||
const std::basic_string<Char>& left,
|
||||
const std::basic_string<Char>& right,
|
||||
const boost::locale::collate_level level,
|
||||
const int expected)
|
||||
{
|
||||
typedef std::basic_string<Char> string_type;
|
||||
boost::locale::collate_level level = static_cast<boost::locale::collate_level>(ilevel);
|
||||
TEST_EQ(boost::locale::comparator<Char>(l, level)(left, right), expected < 0);
|
||||
if(ilevel == 4) {
|
||||
if(level == boost::locale::collate_level::identical) {
|
||||
const std::collate<Char>& coll = std::use_facet<std::collate<Char>>(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<Char> left, std::basic_string<Ch
|
||||
|
||||
#define TEST_COMP(c, _l, _r) test_comp<c>(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<wchar_t>(left), to<wchar_t>(right));
|
||||
@@ -72,31 +79,33 @@ void compare(std::string left, std::string right, int level, int expected)
|
||||
TEST_COMP(char32_t, to<char32_t>(left), to<char32_t>(right));
|
||||
#endif
|
||||
l = gen("en_US.ISO8859-1");
|
||||
if(level == 4)
|
||||
if(level == collate_level::identical)
|
||||
TEST_EQ(l(to<char>(left), to<char>(right)), (expected < 0));
|
||||
TEST_COMP(char, to<char>(left), to<char>(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
|
||||
|
||||
@@ -56,12 +56,13 @@ void test_char()
|
||||
std::cout << "- Testing at least C" << std::endl;
|
||||
std::locale l = gen("C.UTF-8");
|
||||
test_one<CharType>(l, "a", "b", -1);
|
||||
test_one<CharType>(l, "b", "a", 1);
|
||||
test_one<CharType>(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);
|
||||
|
||||
@@ -57,6 +57,7 @@ void test_char()
|
||||
std::locale l = gen("en_US.UTF-8");
|
||||
|
||||
test_one<CharType>(l, "a", "b", -1);
|
||||
test_one<CharType>(l, "b", "a", 1);
|
||||
test_one<CharType>(l, "a", "a", 0);
|
||||
|
||||
#if defined(_LIBCPP_VERSION) && (defined(__APPLE__) || defined(__FreeBSD__))
|
||||
@@ -76,7 +77,7 @@ void test_char()
|
||||
test_one<CharType>(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
|
||||
}
|
||||
|
||||
@@ -12,12 +12,15 @@
|
||||
#include <iomanip>
|
||||
|
||||
template<typename Char>
|
||||
void test_comp(std::locale l, std::basic_string<Char> left, std::basic_string<Char> right, int ilevel, int expected)
|
||||
void test_comp(const std::locale& l,
|
||||
const std::basic_string<Char>& left,
|
||||
const std::basic_string<Char>& right,
|
||||
const boost::locale::collate_level level,
|
||||
const int expected)
|
||||
{
|
||||
typedef std::basic_string<Char> string_type;
|
||||
boost::locale::collate_level level = static_cast<boost::locale::collate_level>(ilevel);
|
||||
TEST_EQ(boost::locale::comparator<Char>(l, level)(left, right), (expected < 0));
|
||||
if(ilevel == 4) {
|
||||
if(level == boost::locale::collate_level::identical) {
|
||||
const std::collate<Char>& coll = std::use_facet<std::collate<Char>>(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<Char> left, std::basic_string<Ch
|
||||
|
||||
#define TEST_COMP(c, _l, _r) test_comp<c>(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<wchar_t>(left), to<wchar_t>(right));
|
||||
#ifdef BOOST_LOCALE_ENABLE_CHAR16_T
|
||||
TEST_COMP(char16_t, to<char16_t>(left), to<char16_t>(right));
|
||||
#endif
|
||||
#ifdef BOOST_LOCALE_ENABLE_CHAR32_T
|
||||
TEST_COMP(char32_t, to<char32_t>(left), to<char32_t>(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
|
||||
|
||||
Reference in New Issue
Block a user