1
Fork 0
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:
Andreas Kling 2023-08-07 11:12:38 +02:00
parent db2a8725c6
commit 34344120f2
181 changed files with 626 additions and 630 deletions

View file

@ -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);

View file

@ -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));

View file

@ -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);