From 3bfa8e58638259aa27a989bf7314b3694d76d6f9 Mon Sep 17 00:00:00 2001 From: Mark Haines Date: Wed, 15 Jul 2015 16:31:45 +0100 Subject: [PATCH] Fix bug in list where the wrong value was copied if an item was inserted at the beinging of the list --- include/olm/list.hh | 8 ++++---- tests/test_list.cpp | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/include/olm/list.hh b/include/olm/list.hh index e4bf951..6906c87 100644 --- a/include/olm/list.hh +++ b/include/olm/list.hh @@ -69,10 +69,10 @@ public: } else if (pos == _end) { --pos; } - T * tmp = pos; - while (tmp != _end - 1) { - *(tmp + 1) = *tmp; - ++tmp; + T * tmp = _end - 1; + while (tmp != pos) { + *tmp = *(tmp - 1); + --tmp; } return pos; } diff --git a/tests/test_list.cpp b/tests/test_list.cpp index c6d9a9a..c054af6 100644 --- a/tests/test_list.cpp +++ b/tests/test_list.cpp @@ -44,6 +44,28 @@ assert_equals(4, test_list[3]); } /** List insert test **/ +{ /** List insert beginning test **/ + +TestCase test_case("List insert beginning"); + +olm::List test_list; + +assert_equals(std::size_t(0), test_list.size()); + +for (int i = 0; i < 4; ++i) { + test_list.insert(test_list.begin(), i); +} + +assert_equals(std::size_t(4), test_list.size()); + +int i = 4; +for (auto item : test_list) { + assert_equals(--i, item); +} + +} /** List insert test **/ + + { /** List erase test **/ TestCase test_case("List erase");