[string] add ParseDigit(), ParseHexDigit(), and other helper functions (#10282)

This commit adds a set of helper functions to parse a given digit or
hex digit character to its numeric value, or to check if a given
character is a digit, uppercase, or lowercase letter.
This commit is contained in:
Abtin Keshavarzian
2024-05-22 14:37:22 -07:00
committed by GitHub
parent 31ac6266fa
commit a57d927b0a
6 changed files with 162 additions and 50 deletions
+60
View File
@@ -337,6 +337,8 @@ void TestStringParseUint8(void)
{"0256", kErrorParse}, // Larger than max `uint8_t`
};
uint8_t digit;
printf("\nTest 11: TestStringParseUint8() function\n");
for (const TestCase &testCase : kTestCases)
@@ -363,6 +365,64 @@ void TestStringParseUint8(void)
}
}
for (char c = '0'; c <= '9'; c++)
{
VerifyOrQuit(IsDigit(c));
VerifyOrQuit(!IsUppercase(c));
VerifyOrQuit(!IsLowercase(c));
SuccessOrQuit(ParseDigit(c, digit));
VerifyOrQuit(digit == (c - '0'));
SuccessOrQuit(ParseHexDigit(c, digit));
VerifyOrQuit(digit == (c - '0'));
}
for (char c = 'A'; c <= 'Z'; c++)
{
VerifyOrQuit(!IsDigit(c));
VerifyOrQuit(IsUppercase(c));
VerifyOrQuit(!IsLowercase(c));
VerifyOrQuit(ParseDigit(c, digit) != kErrorNone);
if (c <= 'F')
{
SuccessOrQuit(ParseHexDigit(c, digit));
VerifyOrQuit(digit == (c - 'A' + 10));
}
else
{
VerifyOrQuit(ParseHexDigit(c, digit) != kErrorNone);
}
}
for (char c = 'a'; c <= 'z'; c++)
{
VerifyOrQuit(!IsDigit(c));
VerifyOrQuit(!IsUppercase(c));
VerifyOrQuit(IsLowercase(c));
VerifyOrQuit(ParseDigit(c, digit) != kErrorNone);
if (c <= 'f')
{
SuccessOrQuit(ParseHexDigit(c, digit));
VerifyOrQuit(digit == (c - 'a' + 10));
}
else
{
VerifyOrQuit(ParseHexDigit(c, digit) != kErrorNone);
}
}
VerifyOrQuit(!IsDigit(static_cast<char>('0' - 1)));
VerifyOrQuit(!IsDigit(static_cast<char>('9' + 1)));
VerifyOrQuit(!IsUppercase(static_cast<char>('A' - 1)));
VerifyOrQuit(!IsUppercase(static_cast<char>('Z' + 1)));
VerifyOrQuit(!IsLowercase(static_cast<char>('a' - 1)));
VerifyOrQuit(!IsLowercase(static_cast<char>('z' + 1)));
printf("\n\n -- PASS\n");
}