diff --git a/include/etl/array_view.h b/include/etl/array_view.h index 0c1c3112..9f333b41 100644 --- a/include/etl/array_view.h +++ b/include/etl/array_view.h @@ -433,7 +433,10 @@ namespace etl //************************************************************************* void remove_prefix(const size_type n) { - mbegin += n; + if (n < size()) + mbegin += n; + else + mbegin = mend; } //************************************************************************* @@ -441,7 +444,10 @@ namespace etl //************************************************************************* void remove_suffix(const size_type n) { - mend -= n; + if (n < size()) + mend -= n; + else + mend = mbegin; } //************************************************************************* diff --git a/test/test_array_view.cpp b/test/test_array_view.cpp index d7803ceb..89750b0a 100644 --- a/test/test_array_view.cpp +++ b/test/test_array_view.cpp @@ -598,6 +598,49 @@ namespace CHECK(isEqual); } + TEST(test_remove_prefix_boundary) + { + // On-point test + std::vector original = { 1, 2, 3, 4, 5, 6, 7, 8 }; + + View view(original); + + view.remove_prefix(original.size()); + + CHECK(view.empty()); + + // Off-point test + + std::vector original2 = { 1, 2, 3, 4, 5, 6, 7, 8 }; + + View view2(original2); + + view2.remove_prefix(original.size() + 1); + + CHECK(view2.empty()); + } + + TEST(test_remove_suffix_boundary) + { + // On-point test + std::vector original = { 1, 2, 3, 4, 5, 6, 7, 8 }; + + View view(original); + + view.remove_suffix(original.size()); + + CHECK(view.empty()); + + // Off-point test + + std::vector original2 = { 1, 2, 3, 4, 5, 6, 7, 8 }; + + View view2(original2); + + view2.remove_suffix(original.size() + 1); + + CHECK(view2.empty()); + } //************************************************************************* TEST(test_hash) {