string: correct the lower comparator for cstrings
This commit is contained in:
parent
3e262f6aef
commit
a88fb9809d
@ -312,7 +312,7 @@ namespace cruft::string {
|
|||||||
struct less {
|
struct less {
|
||||||
bool operator() (char const *a, char const *b) const noexcept
|
bool operator() (char const *a, char const *b) const noexcept
|
||||||
{
|
{
|
||||||
for (; a && b; ++a, ++b) {
|
for (; *a && *b; ++a, ++b) {
|
||||||
auto const &a_val = TransformV (*a);
|
auto const &a_val = TransformV (*a);
|
||||||
auto const &b_val = TransformV (*b);
|
auto const &b_val = TransformV (*b);
|
||||||
|
|
||||||
@ -322,7 +322,7 @@ namespace cruft::string {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return a == nullptr && b != nullptr;
|
return *a == '\0' && *b != '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
bool operator() (std::string const &a, std::string const & b) const noexcept
|
bool operator() (std::string const &a, std::string const & b) const noexcept
|
||||||
|
@ -226,7 +226,46 @@ void test_comparator_less (cruft::TAP::logger &tap)
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
void test_comparator_lower (cruft::TAP::logger &tap)
|
void test_less_lower (cruft::TAP::logger &tap)
|
||||||
|
{
|
||||||
|
struct {
|
||||||
|
char const *a;
|
||||||
|
char const *b;
|
||||||
|
bool expected;
|
||||||
|
char const *message;
|
||||||
|
} const TESTS[] = {
|
||||||
|
{ "a", "b", true, "single letter lhs" },
|
||||||
|
{ "b", "a", false, "single letter rhs" },
|
||||||
|
|
||||||
|
{ "a", "a", false, "single lower equal" },
|
||||||
|
{ "a", "A", false, "lower, upper singles" },
|
||||||
|
{ "A", "a", false, "upper, lower singles" },
|
||||||
|
|
||||||
|
{ "a", "aa", true, "shorter lhs" },
|
||||||
|
{ "aa", "a", false, "shorter hhs" },
|
||||||
|
|
||||||
|
{ "date", "User-Agent", true, "lower lhs, upper rhs" },
|
||||||
|
};
|
||||||
|
|
||||||
|
cruft::string::less_lower cmp;
|
||||||
|
|
||||||
|
for (auto const &t: TESTS) {
|
||||||
|
tap.expect_eq (cmp (t.a, t.b), t.expected, "less::lower, pointers, {}", t.message);
|
||||||
|
tap.expect_eq (
|
||||||
|
cmp (
|
||||||
|
std::string_view {t.a},
|
||||||
|
std::string_view {t.b}
|
||||||
|
),
|
||||||
|
t.expected,
|
||||||
|
"less::lower, string_view, {}",
|
||||||
|
t.message
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
void test_equality_lower (cruft::TAP::logger &tap)
|
||||||
{
|
{
|
||||||
struct {
|
struct {
|
||||||
char const *a;
|
char const *a;
|
||||||
@ -243,9 +282,8 @@ void test_comparator_lower (cruft::TAP::logger &tap)
|
|||||||
|
|
||||||
cruft::string::equality::lower cmp;
|
cruft::string::equality::lower cmp;
|
||||||
|
|
||||||
for (auto const &t: TESTS) {
|
for (auto const &t: TESTS)
|
||||||
tap.expect_eq (cmp (t.a, t.b), t.equal, "equality::lower, pointers, {}", t.message);
|
tap.expect_eq (cmp (t.a, t.b), t.equal, "equality::lower, pointers, {}", t.message);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -261,7 +299,8 @@ main (int, char**)
|
|||||||
test_position (tap);
|
test_position (tap);
|
||||||
test_contains (tap);
|
test_contains (tap);
|
||||||
test_comparator_less (tap);
|
test_comparator_less (tap);
|
||||||
test_comparator_lower (tap);
|
test_less_lower (tap);
|
||||||
|
test_equality_lower (tap);
|
||||||
|
|
||||||
return tap.status ();
|
return tap.status ();
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user