From 1bf775ae3dfd7206bcea1024c8b60b1865f47d56 Mon Sep 17 00:00:00 2001 From: ProgmaticProgrammer <51181822+ProgmaticProgrammer@users.noreply.github.com> Date: Wed, 15 Apr 2020 13:51:34 +0800 Subject: [PATCH] array_view boundary test and fix. (#211) --- include/etl/array_view.h | 10 ++++++++-- test/test_array_view.cpp | 43 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 2 deletions(-) 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) {