Commit e3037c0a authored by knowledge4igor's avatar knowledge4igor

Add more checks to string_view find and more tests

parent 68182044
......@@ -83,20 +83,25 @@ namespace std {
operator=(const string_view &view) noexcept = default;
size_type find(string_view v, size_type pos = 0) const noexcept {
if (v.size_ <= (size_ - pos)) {
for (; pos <= (size_ - v.size_); ++pos) {
bool found = true;
for (size_type i = 0; i < v.size_; ++i) {
if (data_[pos + i] != v.data_[i]) {
found = false;
break;
}
}
if (found) {
return pos;
if (size_ < pos)
return npos;
if ((size_ - pos) < v.size_)
return npos;
for (; pos <= (size_ - v.size_); ++pos) {
bool found = true;
for (size_type i = 0; i < v.size_; ++i) {
if (data_[pos + i] != v.data_[i]) {
found = false;
break;
}
}
if (found) {
return pos;
}
}
return npos;
}
......
#include "gtest/gtest.h"
#include <pistache/string_view.h>
#include <limits>
#include <string>
TEST(string_view_test, substr_test) {
std::string_view orig ("test");
std::string_view targ ("est");
......@@ -36,6 +39,24 @@ TEST(string_view_test, find_test) {
ASSERT_EQ(orig.find("est", 2, 2), std::size_t(-1));
}
TEST(string_view_test, find_test_2) {
std::string_view orig1 ("test");
std::string_view find1 ("est");
ASSERT_EQ(orig1.find(find1, std::size_t(-1)), std::size_t(-1));
ASSERT_EQ(orig1.find(find1, std::size_t(-1) - 2), std::size_t(-1));
std::string_view orig2 ("test");
std::string_view find2 ("");
ASSERT_EQ(orig2.find(find2, std::size_t(6)), std::size_t(-1));
ASSERT_EQ(orig2.find(find2, std::size_t(2)), std::size_t(2));
ASSERT_EQ(orig2.find(find2, std::size_t(-1)), std::size_t(-1));
std::string_view orig3 ("");
std::string_view find3 ("");
ASSERT_EQ(orig3.find(find3, std::size_t(0)), std::size_t(0));
ASSERT_EQ(orig3.find(find3, std::size_t(6)), std::size_t(-1));
}
TEST(string_view_test, rfind_test) {
std::string_view orig ("test");
std::string_view find ("est");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment