diff --git a/src/utils/StringUtils.hh b/src/utils/StringUtils.hh index badcd8c8c6b33c4261f26f9684a122ce8c3295cc..7002939639ff74c44ffc24e5e0168940f8613f03 100644 --- a/src/utils/StringUtils.hh +++ b/src/utils/StringUtils.hh @@ -52,6 +52,16 @@ inline bool startsWith(std::string_view str, std::string_view prefix) { return true; } +inline bool endsWith(std::string_view str, std::string_view suffix) { + if(suffix.size() > str.size()) return false; + + for(size_t i = 0; i < suffix.size(); i++) { + if(str[str.size()-suffix.size()+i] != suffix[i]) return false; + } + + return true; +} + inline bool isPrefix(const std::string &prefix, const char *buff, size_t n) { if(n < prefix.size()) return false; diff --git a/test/utils.cc b/test/utils.cc index 2f3f61b9e30f05070c5f7a9518136c4a1f107561..f6bad1c777e98a27cfcfb0ed2ff2b6241f97ad8e 100644 --- a/test/utils.cc +++ b/test/utils.cc @@ -1103,4 +1103,16 @@ TEST(Synchronized, String) { ASSERT_EQ(syncstr.get(), ""); syncstr.set("test"); ASSERT_EQ(syncstr.get(), "test"); +} + +TEST(StringUtils, endsWith) { + ASSERT_TRUE(StringUtils::endsWith("some-string-123", "3")); + ASSERT_TRUE(StringUtils::endsWith("some-string-123", "123")); + ASSERT_TRUE(StringUtils::endsWith("some-string-123", "-123")); + ASSERT_TRUE(StringUtils::endsWith("some-string-123", "string-123")); + + ASSERT_FALSE(StringUtils::endsWith("some-string-123", "4")); + ASSERT_FALSE(StringUtils::endsWith("some-string-123", "124")); + ASSERT_FALSE(StringUtils::endsWith("some-string-123", "-124")); + ASSERT_FALSE(StringUtils::endsWith("some-string-123", "strin4-123")); } \ No newline at end of file