From 65827826fe305040d43ac477e24e3b5b03536a6b Mon Sep 17 00:00:00 2001 From: Tim Ledbetter Date: Fri, 12 Jan 2024 21:34:22 +0000 Subject: [PATCH] AK: Add `CharacterTypes::is_ascii_base36_digit()` This can be used to validate the string passed to `parse_ascii_base36_digit()`. --- AK/CharacterTypes.h | 6 ++++++ Tests/AK/TestCharacterTypes.cpp | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/AK/CharacterTypes.h b/AK/CharacterTypes.h index 6748a505c3..2f558a8cf8 100644 --- a/AK/CharacterTypes.h +++ b/AK/CharacterTypes.h @@ -45,6 +45,11 @@ constexpr bool is_ascii_alphanumeric(u32 code_point) return is_ascii_alpha(code_point) || is_ascii_digit(code_point); } +constexpr bool is_ascii_base36_digit(u32 code_point) +{ + return is_ascii_digit(code_point) || (code_point >= 'A' && code_point <= 'Z') || (code_point >= 'a' && code_point <= 'z'); +} + constexpr bool is_ascii_binary_digit(u32 code_point) { return code_point == '0' || code_point == '1'; @@ -176,6 +181,7 @@ constexpr u32 to_ascii_base36_digit(u32 digit) using AK::is_ascii; using AK::is_ascii_alpha; using AK::is_ascii_alphanumeric; +using AK::is_ascii_base36_digit; using AK::is_ascii_binary_digit; using AK::is_ascii_blank; using AK::is_ascii_c0_control; diff --git a/Tests/AK/TestCharacterTypes.cpp b/Tests/AK/TestCharacterTypes.cpp index 209816d906..87cc394160 100644 --- a/Tests/AK/TestCharacterTypes.cpp +++ b/Tests/AK/TestCharacterTypes.cpp @@ -67,6 +67,17 @@ TEST_CASE(is_ascii_alphanumeric) compare_bool_output_over(ASCII, isalnum, is_ascii_alphanumeric); } +TEST_CASE(is_ascii_base36_digit) +{ + constexpr Array valid_base36_digits { '0', '9', 'A', 'Z', 'a', 'z' }; + for (auto valid_base36_digit : valid_base36_digits) + EXPECT_EQ(is_ascii_base36_digit(valid_base36_digit), true); + + constexpr Array invalid_base36_digits { '/', ':', '@', '[', '`', '{' }; + for (auto invalid_base36_digit : invalid_base36_digits) + EXPECT_EQ(is_ascii_base36_digit(invalid_base36_digit), false); +} + TEST_CASE(is_ascii_blank) { compare_bool_output_over(ASCII, isblank, is_ascii_blank);