This is an automated email from the ASF dual-hosted git repository. bneradt pushed a commit to branch dev-1-2-13 in repository https://gitbox.apache.org/repos/asf/trafficserver-libswoc.git
commit 338f76174ef8c3a5d16445f1534aabf46cd83c2c Author: Alan M. Carroll <[email protected]> AuthorDate: Wed Nov 18 18:26:34 2020 -0600 Fix bugs in MemSpan<void> prefix, suffix methods. --- code/include/swoc/MemSpan.h | 6 +++--- unit_tests/test_MemSpan.cc | 22 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/code/include/swoc/MemSpan.h b/code/include/swoc/MemSpan.h index 4bc63d2..97bb523 100644 --- a/code/include/swoc/MemSpan.h +++ b/code/include/swoc/MemSpan.h @@ -879,7 +879,7 @@ MemSpan<void>::prefix(size_t n) const { inline MemSpan<void> & MemSpan<void>::remove_prefix(size_t n) { - n = std::max(_size, n); + n = std::min(_size, n); _size -= n; _ptr = static_cast<char *>(_ptr) + n; return *this; @@ -887,13 +887,13 @@ MemSpan<void>::remove_prefix(size_t n) { inline MemSpan<void> MemSpan<void>::suffix(size_t count) const { - count = std::max(count, _size); + count = std::min(count, _size); return {static_cast<char *>(this->data_end()) - count, count}; } inline MemSpan<void> & MemSpan<void>::remove_suffix(size_t count) { - _size -= std::max(count, _size); + _size -= std::min(count, _size); return *this; } diff --git a/unit_tests/test_MemSpan.cc b/unit_tests/test_MemSpan.cc index 2808daa..64aaf72 100644 --- a/unit_tests/test_MemSpan.cc +++ b/unit_tests/test_MemSpan.cc @@ -39,6 +39,7 @@ TEST_CASE("MemSpan", "[libswoc][MemSpan]") left.assign(buff, sizeof(buff)); span = left.suffix(768); + REQUIRE(span.size() == 768); left.remove_suffix(768); REQUIRE(left.end() == span.begin()); REQUIRE(left.size() + span.size() == 1024); @@ -90,3 +91,24 @@ TEST_CASE("MemSpan", "[libswoc][MemSpan]") REQUIRE(fspan.count() == f2span.count()); REQUIRE(fspan.is_same(f2span)); }; + +TEST_CASE("MemSpan<void>", "[libswoc][MemSpan]") +{ + char buff[1024]; + + MemSpan<void> span(buff, sizeof(buff)); + auto left = span.prefix(512); + REQUIRE(left.size() == 512); + REQUIRE(span.size() == 1024); + span.remove_prefix(512); + REQUIRE(span.size() == 512); + REQUIRE(left.data_end() == span.data()); + + left.assign(buff, sizeof(buff)); + span = left.suffix(700); + REQUIRE(span.size() == 700); + left.remove_suffix(700); + REQUIRE(left.data_end() == span.data()); + REQUIRE(left.size() + span.size() == 1024); + +};
