1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 04:57:44 +00:00

AK: Add GenericLexer::{consume_decimal_integer,peek_string}

This commit is contained in:
Dan Klishch 2023-10-30 14:43:24 -04:00 committed by Daniel Bertalan
parent 6b30847120
commit b65d281bbb
3 changed files with 153 additions and 0 deletions

View file

@ -204,3 +204,90 @@ TEST_CASE(consume_escaped_code_point)
test("\\ud83d\\ude00"sv, 0x1f600);
test("\\ud83d\\ude00"sv, 0xd83d, false);
}
TEST_CASE(consume_decimal_integer_correctly_parses)
{
#define CHECK_PARSES_INTEGER(test, expected, type) \
do { \
GenericLexer lexer(test##sv); \
auto actual = lexer.consume_decimal_integer<type>(); \
VERIFY(!actual.is_error()); \
EXPECT_EQ(actual.value(), static_cast<type>(expected)); \
EXPECT_EQ(lexer.tell(), test##sv.length()); \
} while (false)
CHECK_PARSES_INTEGER("0", 0, u8);
CHECK_PARSES_INTEGER("-0", -0, u8);
CHECK_PARSES_INTEGER("10", 10, u8);
CHECK_PARSES_INTEGER("255", 255, u8);
CHECK_PARSES_INTEGER("0", 0, u16);
CHECK_PARSES_INTEGER("-0", -0, u16);
CHECK_PARSES_INTEGER("1234", 1234, u16);
CHECK_PARSES_INTEGER("65535", 65535, u16);
CHECK_PARSES_INTEGER("0", 0, u32);
CHECK_PARSES_INTEGER("-0", -0, u32);
CHECK_PARSES_INTEGER("1234", 1234, u32);
CHECK_PARSES_INTEGER("4294967295", 4294967295, u32);
CHECK_PARSES_INTEGER("0", 0, u64);
CHECK_PARSES_INTEGER("-0", -0, u64);
CHECK_PARSES_INTEGER("1234", 1234, u64);
CHECK_PARSES_INTEGER("18446744073709551615", 18446744073709551615ULL, u64);
CHECK_PARSES_INTEGER("0", 0, i8);
CHECK_PARSES_INTEGER("-0", -0, i8);
CHECK_PARSES_INTEGER("10", 10, i8);
CHECK_PARSES_INTEGER("-10", -10, i8);
CHECK_PARSES_INTEGER("127", 127, i8);
CHECK_PARSES_INTEGER("-128", -128, i8);
CHECK_PARSES_INTEGER("0", 0, i16);
CHECK_PARSES_INTEGER("-0", -0, i16);
CHECK_PARSES_INTEGER("1234", 1234, i16);
CHECK_PARSES_INTEGER("-1234", -1234, i16);
CHECK_PARSES_INTEGER("32767", 32767, i16);
CHECK_PARSES_INTEGER("-32768", -32768, i16);
CHECK_PARSES_INTEGER("0", 0, i32);
CHECK_PARSES_INTEGER("-0", -0, i32);
CHECK_PARSES_INTEGER("1234", 1234, i32);
CHECK_PARSES_INTEGER("-1234", -1234, i32);
CHECK_PARSES_INTEGER("2147483647", 2147483647, i32);
CHECK_PARSES_INTEGER("-2147483648", -2147483648, i32);
CHECK_PARSES_INTEGER("0", 0, i64);
CHECK_PARSES_INTEGER("-0", -0, i64);
CHECK_PARSES_INTEGER("1234", 1234, i64);
CHECK_PARSES_INTEGER("-1234", -1234, i64);
CHECK_PARSES_INTEGER("9223372036854775807", 9223372036854775807, i64);
CHECK_PARSES_INTEGER("-9223372036854775808", -9223372036854775808ULL, i64);
#undef CHECK_PARSES_INTEGER
}
TEST_CASE(consume_decimal_integer_fails_with_correct_error)
{
#define CHECK_FAILS_WITH_ERROR(test, type, err) \
do { \
GenericLexer lexer(test##sv); \
auto actual = lexer.consume_decimal_integer<type>(); \
VERIFY(actual.is_error() && actual.error().is_errno()); \
EXPECT_EQ(actual.error().code(), err); \
EXPECT_EQ(lexer.tell(), static_cast<size_t>(0)); \
} while (false)
CHECK_FAILS_WITH_ERROR("Well hello GenericLexer!", u64, EINVAL);
CHECK_FAILS_WITH_ERROR("+", u64, EINVAL);
CHECK_FAILS_WITH_ERROR("+WHF", u64, EINVAL);
CHECK_FAILS_WITH_ERROR("-WHF", u64, EINVAL);
CHECK_FAILS_WITH_ERROR("-1", u8, ERANGE);
CHECK_FAILS_WITH_ERROR("-100", u8, ERANGE);
CHECK_FAILS_WITH_ERROR("-1", u16, ERANGE);
CHECK_FAILS_WITH_ERROR("-100", u16, ERANGE);
CHECK_FAILS_WITH_ERROR("-1", u32, ERANGE);
CHECK_FAILS_WITH_ERROR("-100", u32, ERANGE);
CHECK_FAILS_WITH_ERROR("-1", u64, ERANGE);
CHECK_FAILS_WITH_ERROR("-100", u64, ERANGE);
CHECK_FAILS_WITH_ERROR("-129", i8, ERANGE);
CHECK_FAILS_WITH_ERROR("128", i8, ERANGE);
CHECK_FAILS_WITH_ERROR("-32769", i16, ERANGE);
CHECK_FAILS_WITH_ERROR("32768", i16, ERANGE);
CHECK_FAILS_WITH_ERROR("-2147483649", i32, ERANGE);
CHECK_FAILS_WITH_ERROR("2147483648", i32, ERANGE);
CHECK_FAILS_WITH_ERROR("-9223372036854775809", i64, ERANGE);
CHECK_FAILS_WITH_ERROR("9223372036854775808", i64, ERANGE);
#undef CHECK_FAILS_WITH_ERROR
}