mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-11 02:29:21 +00:00
AK+LibUnicode: Provide Unicode-aware caseless String matching
The Unicode spec defines much more complicated caseless matching algorithms in its Collation spec. This implements the "basic" case folding comparison.
This commit is contained in:
parent
8f2589b3b0
commit
537fcaf59e
Notes:
sideshowbarker
2024-07-17 20:58:35 +09:00
Author: https://github.com/trflynn89
Commit: 537fcaf59e
Pull-request: https://github.com/SerenityOS/serenity/pull/17060
Reviewed-by: https://github.com/linusg ✅
3 changed files with 79 additions and 0 deletions
|
@ -187,6 +187,66 @@ TEST_CASE(to_titlecase)
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE(equals_ignoring_case)
|
||||
{
|
||||
{
|
||||
String string1 {};
|
||||
String string2 {};
|
||||
|
||||
EXPECT(MUST(string1.equals_ignoring_case(string2)));
|
||||
}
|
||||
{
|
||||
auto string1 = MUST(String::from_utf8("abcd"sv));
|
||||
auto string2 = MUST(String::from_utf8("ABCD"sv));
|
||||
auto string3 = MUST(String::from_utf8("AbCd"sv));
|
||||
auto string4 = MUST(String::from_utf8("dcba"sv));
|
||||
|
||||
EXPECT(MUST(string1.equals_ignoring_case(string2)));
|
||||
EXPECT(MUST(string1.equals_ignoring_case(string3)));
|
||||
EXPECT(!MUST(string1.equals_ignoring_case(string4)));
|
||||
|
||||
EXPECT(MUST(string2.equals_ignoring_case(string1)));
|
||||
EXPECT(MUST(string2.equals_ignoring_case(string3)));
|
||||
EXPECT(!MUST(string2.equals_ignoring_case(string4)));
|
||||
|
||||
EXPECT(MUST(string3.equals_ignoring_case(string1)));
|
||||
EXPECT(MUST(string3.equals_ignoring_case(string2)));
|
||||
EXPECT(!MUST(string3.equals_ignoring_case(string4)));
|
||||
}
|
||||
{
|
||||
auto string1 = MUST(String::from_utf8("\u00DF"sv)); // LATIN SMALL LETTER SHARP S
|
||||
auto string2 = MUST(String::from_utf8("SS"sv));
|
||||
auto string3 = MUST(String::from_utf8("Ss"sv));
|
||||
auto string4 = MUST(String::from_utf8("ss"sv));
|
||||
auto string5 = MUST(String::from_utf8("S"sv));
|
||||
auto string6 = MUST(String::from_utf8("s"sv));
|
||||
|
||||
EXPECT(MUST(string1.equals_ignoring_case(string2)));
|
||||
EXPECT(MUST(string1.equals_ignoring_case(string3)));
|
||||
EXPECT(MUST(string1.equals_ignoring_case(string4)));
|
||||
EXPECT(!MUST(string1.equals_ignoring_case(string5)));
|
||||
EXPECT(!MUST(string1.equals_ignoring_case(string6)));
|
||||
|
||||
EXPECT(MUST(string2.equals_ignoring_case(string1)));
|
||||
EXPECT(MUST(string2.equals_ignoring_case(string3)));
|
||||
EXPECT(MUST(string2.equals_ignoring_case(string4)));
|
||||
EXPECT(!MUST(string2.equals_ignoring_case(string5)));
|
||||
EXPECT(!MUST(string2.equals_ignoring_case(string6)));
|
||||
|
||||
EXPECT(MUST(string3.equals_ignoring_case(string1)));
|
||||
EXPECT(MUST(string3.equals_ignoring_case(string2)));
|
||||
EXPECT(MUST(string3.equals_ignoring_case(string4)));
|
||||
EXPECT(!MUST(string3.equals_ignoring_case(string5)));
|
||||
EXPECT(!MUST(string3.equals_ignoring_case(string6)));
|
||||
|
||||
EXPECT(MUST(string4.equals_ignoring_case(string1)));
|
||||
EXPECT(MUST(string4.equals_ignoring_case(string2)));
|
||||
EXPECT(MUST(string4.equals_ignoring_case(string3)));
|
||||
EXPECT(!MUST(string4.equals_ignoring_case(string5)));
|
||||
EXPECT(!MUST(string4.equals_ignoring_case(string6)));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE(is_one_of)
|
||||
{
|
||||
auto foo = MUST(String::from_utf8("foo"sv));
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue