mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-31 21:29:06 +00:00
AK: Add a Formatter for Checked
This goes in Format.h instead of Checked.h, to avoid an include cycle.
This commit is contained in:
parent
b9b6927b85
commit
26105b8b11
Notes:
github-actions[bot]
2025-06-17 18:45:18 +00:00
Author: https://github.com/AtkinsSJ
Commit: 26105b8b11
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5120
Reviewed-by: https://github.com/gmta ✅
Reviewed-by: https://github.com/tcl3
2 changed files with 66 additions and 0 deletions
10
AK/Format.h
10
AK/Format.h
|
@ -603,6 +603,16 @@ struct Formatter<nullptr_t> : Formatter<FlatPtr> {
|
|||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct Formatter<Checked<T>> : Formatter<T> {
|
||||
ErrorOr<void> format(FormatBuilder& builder, Checked<T> value)
|
||||
{
|
||||
if (value.has_overflow())
|
||||
return builder.put_string("{ OVERFLOW }"sv);
|
||||
return Formatter<T>::format(builder, value.value());
|
||||
}
|
||||
};
|
||||
|
||||
ErrorOr<void> vformat(StringBuilder&, StringView fmtstr, TypeErasedFormatParams&);
|
||||
|
||||
void vout(FILE*, StringView fmtstr, TypeErasedFormatParams&, bool newline = false);
|
||||
|
|
|
@ -417,3 +417,59 @@ TEST_CASE(format_utf32)
|
|||
EXPECT_EQ(ByteString::formatted("{:6d}", U'a'), " 97");
|
||||
EXPECT_EQ(ByteString::formatted("{:#x}", U'\U0001F41E'), "0x1f41e");
|
||||
}
|
||||
|
||||
TEST_CASE(format_checked)
|
||||
{
|
||||
EXPECT_EQ(ByteString::formatted("{}", Checked<i32> { 100 }), "100");
|
||||
EXPECT_EQ(ByteString::formatted("{}", Checked<u32> { 100 }), "100");
|
||||
EXPECT_EQ(ByteString::formatted("{}", Checked<i32> { -1234 }), "-1234");
|
||||
|
||||
{
|
||||
Checked<i8> c = 127;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "127");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<i16> c = 32767;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "32767");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<i32> c = 2147483647;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "2147483647");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<i64> c = 9223372036854775807;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "9223372036854775807");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<u8> c = 255u;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "255");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<u16> c = 65535u;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "65535");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<u32> c = 4294967295u;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "4294967295");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
{
|
||||
Checked<u64> c = 18446744073709551615u;
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "18446744073709551615");
|
||||
c.add(100);
|
||||
EXPECT_EQ(ByteString::formatted("{}", c), "{ OVERFLOW }");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue