From e51d4cdaa1e312668ae2948ecbe77343e7fc6a7e Mon Sep 17 00:00:00 2001 From: fallenoak Date: Sat, 21 Nov 2020 12:49:47 -0600 Subject: [PATCH] feat(string): add SStrChrR --- storm/String.cpp | 14 ++++++++++++++ storm/String.hpp | 2 ++ test/String.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 60 insertions(+) diff --git a/storm/String.cpp b/storm/String.cpp index d014cf8..55bba63 100644 --- a/storm/String.cpp +++ b/storm/String.cpp @@ -150,6 +150,20 @@ const char* SStrChr(const char* string, char search) { return string; } +const char* SStrChrR(const char* string, char search) { + STORM_ASSERT(string); + + const char* result; + + for (result = nullptr; *string; string++) { + if (*string == search) { + result = string; + } + } + + return result; +} + int32_t SStrCmp(const char* string1, const char* string2, size_t maxchars) { return strncmp(string1, string2, maxchars); } diff --git a/storm/String.hpp b/storm/String.hpp index 7cc0268..1d9f1c5 100644 --- a/storm/String.hpp +++ b/storm/String.hpp @@ -9,6 +9,8 @@ const char* SStrChr(const char* string, char search); +const char* SStrChrR(const char* string, char search); + int32_t SStrCmp(const char* string1, const char* string2, size_t maxchars); int32_t SStrCmpI(const char* string1, const char* string2, size_t maxchars); diff --git a/test/String.cpp b/test/String.cpp index 0a7ad15..068b079 100644 --- a/test/String.cpp +++ b/test/String.cpp @@ -39,6 +39,50 @@ TEST_CASE("SStrChr", "[string]") { } } +TEST_CASE("SStrChrR", "[string]") { + SECTION("finds last character when it exists at start of string") { + auto string = "ffoobbaarr"; + auto search = 'f'; + auto result = SStrChrR(string, search); + REQUIRE(result == string + 1); + } + + SECTION("finds last character when it exists in middle of string") { + auto string = "ffoobbaarr"; + auto search = 'b'; + auto result = SStrChrR(string, search); + REQUIRE(result == string + 5); + } + + SECTION("finds last character when it exists at end of string") { + auto string = "ffoobbaarr"; + auto search = 'r'; + auto result = SStrChrR(string, search); + REQUIRE(result == string + 9); + } + + SECTION("finds last character when it exists at start and end of string") { + auto string = "ffoobbaarrff"; + auto search = 'f'; + auto result = SStrChrR(string, search); + REQUIRE(result == string + 11); + } + + SECTION("returns nullptr when character does not exist in string") { + auto string = "ffoobbaarr"; + auto search = 'z'; + auto result = SStrChrR(string, search); + REQUIRE(result == nullptr); + } + + SECTION("returns nullptr when string is empty") { + auto string = ""; + auto search = 'z'; + auto result = SStrChrR(string, search); + REQUIRE(result == nullptr); + } +} + TEST_CASE("SStrCmp", "[string]") { SECTION("compares two strings that exactly match correctly") { auto compare = SStrCmp("foo", "foo", STORM_MAX_STR);