mirror of
https://github.com/RGBCube/serenity
synced 2025-07-28 19:17:44 +00:00
AK: Make "foo"_string infallible
Stop worrying about tiny OOMs. Work towards #20405.
This commit is contained in:
parent
db2a8725c6
commit
34344120f2
181 changed files with 626 additions and 630 deletions
|
@ -22,13 +22,13 @@ TEST_CASE(empty_string)
|
|||
|
||||
TEST_CASE(short_string)
|
||||
{
|
||||
FlyString fly1 { MUST("foo"_string) };
|
||||
FlyString fly1 { "foo"_string };
|
||||
EXPECT_EQ(fly1, "foo"sv);
|
||||
|
||||
FlyString fly2 { MUST("foo"_string) };
|
||||
FlyString fly2 { "foo"_string };
|
||||
EXPECT_EQ(fly2, "foo"sv);
|
||||
|
||||
FlyString fly3 { MUST("bar"_string) };
|
||||
FlyString fly3 { "bar"_string };
|
||||
EXPECT_EQ(fly3, "bar"sv);
|
||||
|
||||
EXPECT_EQ(fly1, fly2);
|
||||
|
@ -45,15 +45,15 @@ TEST_CASE(short_string)
|
|||
|
||||
TEST_CASE(long_string)
|
||||
{
|
||||
FlyString fly1 { MUST("thisisdefinitelymorethan7bytes"_string) };
|
||||
FlyString fly1 { "thisisdefinitelymorethan7bytes"_string };
|
||||
EXPECT_EQ(fly1, "thisisdefinitelymorethan7bytes"sv);
|
||||
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);
|
||||
|
||||
FlyString fly2 { MUST("thisisdefinitelymorethan7bytes"_string) };
|
||||
FlyString fly2 { "thisisdefinitelymorethan7bytes"_string };
|
||||
EXPECT_EQ(fly2, "thisisdefinitelymorethan7bytes"sv);
|
||||
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);
|
||||
|
||||
FlyString fly3 { MUST("thisisalsoforsuremorethan7bytes"_string) };
|
||||
FlyString fly3 { "thisisalsoforsuremorethan7bytes"_string };
|
||||
EXPECT_EQ(fly3, "thisisalsoforsuremorethan7bytes"sv);
|
||||
EXPECT_EQ(FlyString::number_of_fly_strings(), 2u);
|
||||
|
||||
|
@ -91,7 +91,7 @@ TEST_CASE(fly_string_keep_string_data_alive)
|
|||
{
|
||||
FlyString fly {};
|
||||
{
|
||||
auto string = MUST("thisisdefinitelymorethan7bytes"_string);
|
||||
auto string = "thisisdefinitelymorethan7bytes"_string;
|
||||
fly = FlyString { string };
|
||||
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ TEST_CASE(moved_fly_string_becomes_empty)
|
|||
FlyString fly1 {};
|
||||
EXPECT(fly1.is_empty());
|
||||
|
||||
FlyString fly2 { MUST("thisisdefinitelymorethan7bytes"_string) };
|
||||
FlyString fly2 { "thisisdefinitelymorethan7bytes"_string };
|
||||
EXPECT_EQ(fly2, "thisisdefinitelymorethan7bytes"sv);
|
||||
EXPECT_EQ(FlyString::number_of_fly_strings(), 1u);
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ TEST_CASE(construct_empty)
|
|||
EXPECT_EQ(empty.bytes().size(), 0u);
|
||||
EXPECT_EQ(empty, ""sv);
|
||||
|
||||
auto empty2 = MUST(""_string);
|
||||
auto empty2 = ""_string;
|
||||
EXPECT(empty2.is_empty());
|
||||
EXPECT_EQ(empty, empty2);
|
||||
|
||||
|
@ -34,8 +34,8 @@ TEST_CASE(construct_empty)
|
|||
|
||||
TEST_CASE(move_assignment)
|
||||
{
|
||||
String string1 = MUST("hello"_string);
|
||||
string1 = MUST("friends!"_string);
|
||||
String string1 = "hello"_string;
|
||||
string1 = "friends!"_string;
|
||||
EXPECT_EQ(string1, "friends!"sv);
|
||||
}
|
||||
|
||||
|
@ -52,7 +52,7 @@ TEST_CASE(short_strings)
|
|||
EXPECT_EQ(string2.bytes().size(), 7u);
|
||||
EXPECT_EQ(string2, string1);
|
||||
|
||||
auto string3 = MUST("abcdefg"_string);
|
||||
auto string3 = "abcdefg"_string;
|
||||
EXPECT_EQ(string3.is_short_string(), true);
|
||||
EXPECT_EQ(string3.bytes().size(), 7u);
|
||||
EXPECT_EQ(string3, string1);
|
||||
|
@ -72,7 +72,7 @@ TEST_CASE(short_strings)
|
|||
EXPECT_EQ(string2.bytes().size(), 3u);
|
||||
EXPECT_EQ(string2, string1);
|
||||
|
||||
auto string3 = MUST("abc"_string);
|
||||
auto string3 = "abc"_string;
|
||||
EXPECT_EQ(string3.is_short_string(), true);
|
||||
EXPECT_EQ(string3.bytes().size(), 3u);
|
||||
EXPECT_EQ(string3, string1);
|
||||
|
@ -182,7 +182,7 @@ TEST_CASE(from_code_points)
|
|||
|
||||
TEST_CASE(substring)
|
||||
{
|
||||
auto superstring = MUST("Hello I am a long string"_string);
|
||||
auto superstring = "Hello I am a long string"_string;
|
||||
auto short_substring = MUST(superstring.substring_from_byte_offset(0, 5));
|
||||
EXPECT_EQ(short_substring, "Hello"sv);
|
||||
|
||||
|
@ -192,7 +192,7 @@ TEST_CASE(substring)
|
|||
|
||||
TEST_CASE(substring_with_shared_superstring)
|
||||
{
|
||||
auto superstring = MUST("Hello I am a long string"_string);
|
||||
auto superstring = "Hello I am a long string"_string;
|
||||
|
||||
auto substring1 = MUST(superstring.substring_from_byte_offset_with_shared_superstring(0, 5));
|
||||
EXPECT_EQ(substring1, "Hello"sv);
|
||||
|
@ -203,7 +203,7 @@ TEST_CASE(substring_with_shared_superstring)
|
|||
|
||||
TEST_CASE(code_points)
|
||||
{
|
||||
auto string = MUST("🦬🪒"_string);
|
||||
auto string = "🦬🪒"_string;
|
||||
|
||||
Vector<u32> code_points;
|
||||
for (auto code_point : string.code_points())
|
||||
|
@ -226,20 +226,20 @@ TEST_CASE(string_builder)
|
|||
|
||||
TEST_CASE(ak_format)
|
||||
{
|
||||
auto foo = MUST(String::formatted("Hello {}", MUST("friends"_string)));
|
||||
auto foo = MUST(String::formatted("Hello {}", "friends"_string));
|
||||
EXPECT_EQ(foo, "Hello friends"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(replace)
|
||||
{
|
||||
{
|
||||
auto haystack = MUST("Hello enemies"_string);
|
||||
auto haystack = "Hello enemies"_string;
|
||||
auto result = MUST(haystack.replace("enemies"sv, "friends"sv, ReplaceMode::All));
|
||||
EXPECT_EQ(result, "Hello friends"sv);
|
||||
}
|
||||
|
||||
{
|
||||
auto base_title = MUST("anon@courage:~"_string);
|
||||
auto base_title = "anon@courage:~"_string;
|
||||
auto result = MUST(base_title.replace("[*]"sv, "(*)"sv, ReplaceMode::FirstOnly));
|
||||
EXPECT_EQ(result, "anon@courage:~"sv);
|
||||
}
|
||||
|
@ -265,17 +265,17 @@ TEST_CASE(reverse)
|
|||
TEST_CASE(to_lowercase)
|
||||
{
|
||||
{
|
||||
auto string = MUST("Aa"_string);
|
||||
auto string = "Aa"_string;
|
||||
auto result = MUST(string.to_lowercase());
|
||||
EXPECT_EQ(result, "aa"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("Ωω"_string);
|
||||
auto string = "Ωω"_string;
|
||||
auto result = MUST(string.to_lowercase());
|
||||
EXPECT_EQ(result, "ωω"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("İi̇"_string);
|
||||
auto string = "İi̇"_string;
|
||||
auto result = MUST(string.to_lowercase());
|
||||
EXPECT_EQ(result, "i̇i̇"sv);
|
||||
}
|
||||
|
@ -284,17 +284,17 @@ TEST_CASE(to_lowercase)
|
|||
TEST_CASE(to_uppercase)
|
||||
{
|
||||
{
|
||||
auto string = MUST("Aa"_string);
|
||||
auto string = "Aa"_string;
|
||||
auto result = MUST(string.to_uppercase());
|
||||
EXPECT_EQ(result, "AA"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("Ωω"_string);
|
||||
auto string = "Ωω"_string;
|
||||
auto result = MUST(string.to_uppercase());
|
||||
EXPECT_EQ(result, "ΩΩ"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("ʼn"_string);
|
||||
auto string = "ʼn"_string;
|
||||
auto result = MUST(string.to_uppercase());
|
||||
EXPECT_EQ(result, "ʼN"sv);
|
||||
}
|
||||
|
@ -303,22 +303,22 @@ TEST_CASE(to_uppercase)
|
|||
TEST_CASE(to_titlecase)
|
||||
{
|
||||
{
|
||||
auto string = MUST("foo bar baz"_string);
|
||||
auto string = "foo bar baz"_string;
|
||||
auto result = MUST(string.to_titlecase());
|
||||
EXPECT_EQ(result, "Foo Bar Baz"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("foo \n \r bar \t baz"_string);
|
||||
auto string = "foo \n \r bar \t baz"_string;
|
||||
auto result = MUST(string.to_titlecase());
|
||||
EXPECT_EQ(result, "Foo \n \r Bar \t Baz"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("f\"oo\" b'ar'"_string);
|
||||
auto string = "f\"oo\" b'ar'"_string;
|
||||
auto result = MUST(string.to_titlecase());
|
||||
EXPECT_EQ(result, "F\"Oo\" B'ar'"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("123dollars"_string);
|
||||
auto string = "123dollars"_string;
|
||||
auto result = MUST(string.to_titlecase());
|
||||
EXPECT_EQ(result, "123Dollars"sv);
|
||||
}
|
||||
|
@ -333,12 +333,12 @@ TEST_CASE(equals_ignoring_case)
|
|||
EXPECT(string1.equals_ignoring_case(string2));
|
||||
}
|
||||
{
|
||||
auto string1 = MUST("abcd"_string);
|
||||
auto string2 = MUST("ABCD"_string);
|
||||
auto string3 = MUST("AbCd"_string);
|
||||
auto string4 = MUST("dcba"_string);
|
||||
auto string5 = MUST("abce"_string);
|
||||
auto string6 = MUST("abc"_string);
|
||||
auto string1 = "abcd"_string;
|
||||
auto string2 = "ABCD"_string;
|
||||
auto string3 = "AbCd"_string;
|
||||
auto string4 = "dcba"_string;
|
||||
auto string5 = "abce"_string;
|
||||
auto string6 = "abc"_string;
|
||||
|
||||
EXPECT(string1.equals_ignoring_case(string2));
|
||||
EXPECT(string1.equals_ignoring_case(string3));
|
||||
|
@ -359,12 +359,12 @@ TEST_CASE(equals_ignoring_case)
|
|||
EXPECT(!string3.equals_ignoring_case(string6));
|
||||
}
|
||||
{
|
||||
auto string1 = MUST("\u00DF"_string); // LATIN SMALL LETTER SHARP S
|
||||
auto string2 = MUST("SS"_string);
|
||||
auto string3 = MUST("Ss"_string);
|
||||
auto string4 = MUST("ss"_string);
|
||||
auto string5 = MUST("S"_string);
|
||||
auto string6 = MUST("s"_string);
|
||||
auto string1 = "\u00DF"_string; // LATIN SMALL LETTER SHARP S
|
||||
auto string2 = "SS"_string;
|
||||
auto string3 = "Ss"_string;
|
||||
auto string4 = "ss"_string;
|
||||
auto string5 = "S"_string;
|
||||
auto string6 = "s"_string;
|
||||
|
||||
EXPECT(string1.equals_ignoring_case(string2));
|
||||
EXPECT(string1.equals_ignoring_case(string3));
|
||||
|
@ -392,12 +392,12 @@ TEST_CASE(equals_ignoring_case)
|
|||
}
|
||||
{
|
||||
|
||||
auto string1 = MUST("Ab\u00DFCd\u00DFeF"_string);
|
||||
auto string2 = MUST("ABSSCDSSEF"_string);
|
||||
auto string3 = MUST("absscdssef"_string);
|
||||
auto string4 = MUST("aBSscDsSEf"_string);
|
||||
auto string5 = MUST("Ab\u00DFCd\u00DFeg"_string);
|
||||
auto string6 = MUST("Ab\u00DFCd\u00DFe"_string);
|
||||
auto string1 = "Ab\u00DFCd\u00DFeF"_string;
|
||||
auto string2 = "ABSSCDSSEF"_string;
|
||||
auto string3 = "absscdssef"_string;
|
||||
auto string4 = "aBSscDsSEf"_string;
|
||||
auto string5 = "Ab\u00DFCd\u00DFeg"_string;
|
||||
auto string6 = "Ab\u00DFCd\u00DFe"_string;
|
||||
|
||||
EXPECT(string1.equals_ignoring_case(string1));
|
||||
EXPECT(string1.equals_ignoring_case(string2));
|
||||
|
@ -431,8 +431,8 @@ TEST_CASE(equals_ignoring_case)
|
|||
|
||||
TEST_CASE(is_one_of)
|
||||
{
|
||||
auto foo = MUST("foo"_string);
|
||||
auto bar = MUST("bar"_string);
|
||||
auto foo = "foo"_string;
|
||||
auto bar = "bar"_string;
|
||||
|
||||
EXPECT(foo.is_one_of(foo));
|
||||
EXPECT(foo.is_one_of(foo, bar));
|
||||
|
@ -448,7 +448,7 @@ TEST_CASE(is_one_of)
|
|||
TEST_CASE(split)
|
||||
{
|
||||
{
|
||||
auto test = MUST("foo bar baz"_string);
|
||||
auto test = "foo bar baz"_string;
|
||||
auto parts = MUST(test.split(' '));
|
||||
EXPECT_EQ(parts.size(), 3u);
|
||||
EXPECT_EQ(parts[0], "foo");
|
||||
|
@ -456,7 +456,7 @@ TEST_CASE(split)
|
|||
EXPECT_EQ(parts[2], "baz");
|
||||
}
|
||||
{
|
||||
auto test = MUST("ωΣ2ωΣω"_string);
|
||||
auto test = "ωΣ2ωΣω"_string;
|
||||
auto parts = MUST(test.split(0x03A3u));
|
||||
EXPECT_EQ(parts.size(), 3u);
|
||||
EXPECT_EQ(parts[0], "ω"sv);
|
||||
|
@ -476,7 +476,7 @@ TEST_CASE(find_byte_offset)
|
|||
EXPECT(!index2.has_value());
|
||||
}
|
||||
{
|
||||
auto string = MUST("foo"_string);
|
||||
auto string = "foo"_string;
|
||||
|
||||
auto index1 = string.find_byte_offset('f');
|
||||
EXPECT_EQ(index1, 0u);
|
||||
|
@ -491,7 +491,7 @@ TEST_CASE(find_byte_offset)
|
|||
EXPECT(!index4.has_value());
|
||||
}
|
||||
{
|
||||
auto string = MUST("foo"_string);
|
||||
auto string = "foo"_string;
|
||||
|
||||
auto index1 = string.find_byte_offset("fo"sv);
|
||||
EXPECT_EQ(index1, 0u);
|
||||
|
@ -506,7 +506,7 @@ TEST_CASE(find_byte_offset)
|
|||
EXPECT(!index4.has_value());
|
||||
}
|
||||
{
|
||||
auto string = MUST("ωΣωΣω"_string);
|
||||
auto string = "ωΣωΣω"_string;
|
||||
|
||||
auto index1 = string.find_byte_offset(0x03C9U);
|
||||
EXPECT_EQ(index1, 0u);
|
||||
|
@ -524,7 +524,7 @@ TEST_CASE(find_byte_offset)
|
|||
EXPECT_EQ(index5, 8u);
|
||||
}
|
||||
{
|
||||
auto string = MUST("ωΣωΣω"_string);
|
||||
auto string = "ωΣωΣω"_string;
|
||||
|
||||
auto index1 = string.find_byte_offset("ω"sv);
|
||||
EXPECT_EQ(index1, 0u);
|
||||
|
@ -660,7 +660,7 @@ TEST_CASE(trim)
|
|||
EXPECT(result.is_empty());
|
||||
}
|
||||
{
|
||||
auto string = MUST("word"_string);
|
||||
auto string = "word"_string;
|
||||
|
||||
auto result = MUST(string.trim(" "sv, TrimMode::Both));
|
||||
EXPECT_EQ(result, "word"sv);
|
||||
|
@ -672,7 +672,7 @@ TEST_CASE(trim)
|
|||
EXPECT_EQ(result, "word"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST(" word"_string);
|
||||
auto string = " word"_string;
|
||||
|
||||
auto result = MUST(string.trim(" "sv, TrimMode::Both));
|
||||
EXPECT_EQ(result, "word"sv);
|
||||
|
@ -684,7 +684,7 @@ TEST_CASE(trim)
|
|||
EXPECT_EQ(result, " word"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("word "_string);
|
||||
auto string = "word "_string;
|
||||
|
||||
auto result = MUST(string.trim(" "sv, TrimMode::Both));
|
||||
EXPECT_EQ(result, "word"sv);
|
||||
|
@ -696,7 +696,7 @@ TEST_CASE(trim)
|
|||
EXPECT_EQ(result, "word"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST(" word "_string);
|
||||
auto string = " word "_string;
|
||||
|
||||
auto result = MUST(string.trim(" "sv, TrimMode::Both));
|
||||
EXPECT_EQ(result, "word"sv);
|
||||
|
@ -708,7 +708,7 @@ TEST_CASE(trim)
|
|||
EXPECT_EQ(result, " word"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST(" word "_string);
|
||||
auto string = " word "_string;
|
||||
|
||||
auto result = MUST(string.trim("\t"sv, TrimMode::Both));
|
||||
EXPECT_EQ(result, " word "sv);
|
||||
|
@ -720,7 +720,7 @@ TEST_CASE(trim)
|
|||
EXPECT_EQ(result, " word "sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("ωΣωΣω"_string);
|
||||
auto string = "ωΣωΣω"_string;
|
||||
|
||||
auto result = MUST(string.trim("ω"sv, TrimMode::Both));
|
||||
EXPECT_EQ(result, "ΣωΣ"sv);
|
||||
|
@ -732,7 +732,7 @@ TEST_CASE(trim)
|
|||
EXPECT_EQ(result, "ωΣωΣ"sv);
|
||||
}
|
||||
{
|
||||
auto string = MUST("ωΣωΣω"_string);
|
||||
auto string = "ωΣωΣω"_string;
|
||||
|
||||
auto result = MUST(string.trim("ωΣ"sv, TrimMode::Both));
|
||||
EXPECT(result.is_empty());
|
||||
|
@ -744,7 +744,7 @@ TEST_CASE(trim)
|
|||
EXPECT(result.is_empty());
|
||||
}
|
||||
{
|
||||
auto string = MUST("ωΣωΣω"_string);
|
||||
auto string = "ωΣωΣω"_string;
|
||||
|
||||
auto result = MUST(string.trim("Σω"sv, TrimMode::Both));
|
||||
EXPECT(result.is_empty());
|
||||
|
@ -786,7 +786,7 @@ TEST_CASE(contains)
|
|||
EXPECT("abc"_short_string.contains(0x0063));
|
||||
EXPECT(!"abc"_short_string.contains(0x0064));
|
||||
|
||||
auto emoji = MUST("😀"_string);
|
||||
auto emoji = "😀"_string;
|
||||
EXPECT(emoji.contains("\xF0"sv));
|
||||
EXPECT(emoji.contains("\x9F"sv));
|
||||
EXPECT(emoji.contains("\x98"sv));
|
||||
|
@ -828,7 +828,7 @@ TEST_CASE(starts_with)
|
|||
EXPECT(!"abc"_short_string.starts_with(0x0062));
|
||||
EXPECT(!"abc"_short_string.starts_with(0x0063));
|
||||
|
||||
auto emoji = MUST("😀🙃"_string);
|
||||
auto emoji = "😀🙃"_string;
|
||||
EXPECT(emoji.starts_with_bytes("\xF0"sv));
|
||||
EXPECT(emoji.starts_with_bytes("\xF0\x9F"sv));
|
||||
EXPECT(emoji.starts_with_bytes("\xF0\x9F\x98"sv));
|
||||
|
@ -869,7 +869,7 @@ TEST_CASE(ends_with)
|
|||
EXPECT(!"abc"_short_string.ends_with(0x0062));
|
||||
EXPECT(!"abc"_short_string.ends_with(0x0061));
|
||||
|
||||
auto emoji = MUST("😀🙃"_string);
|
||||
auto emoji = "😀🙃"_string;
|
||||
EXPECT(emoji.ends_with_bytes("\x83"sv));
|
||||
EXPECT(emoji.ends_with_bytes("\x99\x83"sv));
|
||||
EXPECT(emoji.ends_with_bytes("\x9F\x99\x83"sv));
|
||||
|
|
|
@ -53,7 +53,7 @@ TEST_CASE(decode_utf8)
|
|||
TEST_CASE(encode_utf8)
|
||||
{
|
||||
{
|
||||
auto utf8_string = MUST("Привет, мир! 😀 γειά σου κόσμος こんにちは世界"_string);
|
||||
auto utf8_string = "Привет, мир! 😀 γειά σου κόσμος こんにちは世界"_string;
|
||||
auto string = MUST(AK::utf8_to_utf16(utf8_string));
|
||||
Utf16View view { string };
|
||||
EXPECT_EQ(MUST(view.to_utf8(Utf16View::AllowInvalidCodeUnits::Yes)), utf8_string);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue