feat(string): implement SStrToUnsigned

This commit is contained in:
phaneron 2024-12-24 14:08:06 -05:00
parent 22e9686d64
commit eb26539b33
3 changed files with 66 additions and 0 deletions

View file

@ -669,6 +669,20 @@ int32_t SStrToInt(const char* string) {
return result; return result;
} }
uint32_t SStrToUnsigned(const char* string) {
STORM_ASSERT(string);
uint32_t result = 0;
uint32_t digit;
while ((digit = *string - '0') < 10) {
result = digit + (10 * result);
string++;
}
return result;
}
void SStrUpper(char* string) { void SStrUpper(char* string) {
while (*string) { while (*string) {
*string = static_cast<char>(toupper(*string)); *string = static_cast<char>(toupper(*string));

View file

@ -41,6 +41,8 @@ float SStrToFloat(const char* string);
int32_t SStrToInt(const char* string); int32_t SStrToInt(const char* string);
uint32_t SStrToUnsigned(const char* string);
void SStrUpper(char* string); void SStrUpper(char* string);
#endif #endif

View file

@ -405,6 +405,56 @@ TEST_CASE("SStrToInt", "[string]") {
} }
} }
TEST_CASE("SStrToUnsigned", "[string]") {
SECTION("converts empty string to unsigned") {
auto string = "";
auto result = SStrToUnsigned(string);
REQUIRE(result == 0);
}
SECTION("converts whitespace string to unsigned") {
auto string = " ";
auto result = SStrToUnsigned(string);
REQUIRE(result == 0);
}
SECTION("converts string with positive number to unsigned") {
auto string = "123";
auto result = SStrToUnsigned(string);
REQUIRE(result == 123);
}
SECTION("converts string with negative number to unsigned") {
auto string = "-123";
auto result = SStrToUnsigned(string);
REQUIRE(result == 0);
}
SECTION("converts string with zero to unsigned") {
auto string = "0";
auto result = SStrToUnsigned(string);
REQUIRE(result == 0);
}
SECTION("converts string with leading zero to unsigned") {
auto string = "01";
auto result = SStrToUnsigned(string);
REQUIRE(result == 1);
}
SECTION("converts string with two whitespace-separated numbers to unsigned") {
auto string = "123 456";
auto result = SStrToUnsigned(string);
REQUIRE(result == 123);
}
SECTION("converts string to max unsigned value") {
auto string = "4294967295";
auto result = SStrToUnsigned(string);
REQUIRE(result == 0xFFFFFFFF);
}
}
TEST_CASE("SStrUpper", "[string]") { TEST_CASE("SStrUpper", "[string]") {
SECTION("rewrites lowercase string to uppercase correctly") { SECTION("rewrites lowercase string to uppercase correctly") {
auto lower = "foobar"; auto lower = "foobar";