Commit e6c56749 authored by Dominik Charousset's avatar Dominik Charousset

Fix string_view::compare for substring comparison

parent 5625d2b8
...@@ -101,7 +101,20 @@ string_view string_view::substr(size_type pos, size_type n) const noexcept { ...@@ -101,7 +101,20 @@ string_view string_view::substr(size_type pos, size_type n) const noexcept {
} }
int string_view::compare(string_view str) const noexcept { int string_view::compare(string_view str) const noexcept {
auto s0 = size();
auto s1 = str.size();
if (s0 == s1) {
return strncmp(data(), str.data(), std::min(size(), str.size())); return strncmp(data(), str.data(), std::min(size(), str.size()));
} else if (s0 < s1) {
auto res = strncmp(data(), str.data(), std::min(size(), str.size()));
if (res == 0)
return -1;
} else {
auto res = strncmp(data(), str.data(), std::min(size(), str.size()));
if (res == 0)
return 1;
}
return 0;
} }
int string_view::compare(size_type pos1, size_type n1, int string_view::compare(size_type pos1, size_type n1,
......
...@@ -99,7 +99,9 @@ CAF_TEST(compare) { ...@@ -99,7 +99,9 @@ CAF_TEST(compare) {
CAF_CHECK(x.compare(0, 3, "abc") == 0); CAF_CHECK(x.compare(0, 3, "abc") == 0);
CAF_CHECK(x.compare(1, 2, y, 0, 2) == 0); CAF_CHECK(x.compare(1, 2, y, 0, 2) == 0);
CAF_CHECK(x.compare(2, 1, z, 0, 1) == 0); CAF_CHECK(x.compare(2, 1, z, 0, 1) == 0);
CAF_CHECK(x.compare(2, 1, z, 0, 2) == 0); CAF_CHECK(x.compare(2, 1, z, 0, 1) == 0);
// make sure substrings aren't equal
CAF_CHECK(string_view("a/") != string_view("a/b"));
} }
CAF_TEST(copy) { CAF_TEST(copy) {
......
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