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");