feat(string): add SStrChrR

This commit is contained in:
fallenoak 2020-11-21 12:49:47 -06:00
parent c924e9a7d9
commit e51d4cdaa1
No known key found for this signature in database
GPG key ID: 7628F8E61AEA070D
3 changed files with 60 additions and 0 deletions

View file

@ -150,6 +150,20 @@ const char* SStrChr(const char* string, char search) {
return string; 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) { int32_t SStrCmp(const char* string1, const char* string2, size_t maxchars) {
return strncmp(string1, string2, maxchars); return strncmp(string1, string2, maxchars);
} }

View file

@ -9,6 +9,8 @@
const char* SStrChr(const char* string, char search); 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 SStrCmp(const char* string1, const char* string2, size_t maxchars);
int32_t SStrCmpI(const char* string1, const char* string2, size_t maxchars); int32_t SStrCmpI(const char* string1, const char* string2, size_t maxchars);

View file

@ -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]") { TEST_CASE("SStrCmp", "[string]") {
SECTION("compares two strings that exactly match correctly") { SECTION("compares two strings that exactly match correctly") {
auto compare = SStrCmp("foo", "foo", STORM_MAX_STR); auto compare = SStrCmp("foo", "foo", STORM_MAX_STR);