diff --git a/storm/String.cpp b/storm/String.cpp index b12c661..2630976 100644 --- a/storm/String.cpp +++ b/storm/String.cpp @@ -2,6 +2,7 @@ #include "storm/Error.hpp" #include "storm/Memory.hpp" #include "storm/string/bjhash.hpp" +#include #include #include @@ -220,6 +221,14 @@ size_t SStrLen(const char* string) { return c - string; } +void SStrLower(char* string) { + char* tmp = string; + + for (; *tmp; tmp++) { + *tmp = static_cast(tolower(*tmp)); + } +} + const char* SStrStr(const char* string, const char* search) { STORM_ASSERT(string); STORM_ASSERT(search); diff --git a/storm/String.hpp b/storm/String.hpp index fa4fb25..c58d5db 100644 --- a/storm/String.hpp +++ b/storm/String.hpp @@ -19,6 +19,8 @@ uint32_t SStrHashHT(const char* string); size_t SStrLen(const char* string); +void SStrLower(char* string); + const char* SStrStr(const char* string, const char* search); #endif diff --git a/test/String.cpp b/test/String.cpp index 2c5fb55..dcc02af 100644 --- a/test/String.cpp +++ b/test/String.cpp @@ -76,6 +76,30 @@ TEST_CASE("SStrLen", "[string]") { } } +TEST_CASE("SStrLower", "[string]") { + SECTION("rewrites uppercase string to lowercase correctly") { + auto upper = "FOOBAR"; + char* lower = static_cast(SMemAlloc(SStrLen(upper) + 1, __FILE__, __LINE__, 0x0)); + SStrCopy(lower, upper, STORM_MAX_STR); + SStrLower(lower); + auto compare = SStrCmp(lower, "foobar", SStrLen(lower)); + SMemFree(lower); + + REQUIRE(!compare); + } + + SECTION("rewrites lowercase string to lowercase correctly") { + auto lower1 = "foobar"; + char* lower2 = static_cast(SMemAlloc(SStrLen(lower1) + 1, __FILE__, __LINE__, 0x0)); + SStrCopy(lower2, lower1, STORM_MAX_STR); + SStrLower(lower2); + auto compare = SStrCmp(lower2, "foobar", SStrLen(lower2)); + SMemFree(lower2); + + REQUIRE(!compare); + } +} + TEST_CASE("SStrStr", "[string]") { SECTION("finds substring when it exists at end of string") { auto string = "foobar";