aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Haines <mark.haines@matrix.org>2015-07-15 16:31:45 +0100
committerMark Haines <mark.haines@matrix.org>2015-07-15 16:31:45 +0100
commit3bfa8e58638259aa27a989bf7314b3694d76d6f9 (patch)
tree62793fa67038243f8ad277ae89d8ae550ad62823
parent0d14cb5797f8c3f6e7059631cef737b18489cf81 (diff)
Fix bug in list where the wrong value was copied if an item was inserted at the beinging of the list
-rw-r--r--include/olm/list.hh8
-rw-r--r--tests/test_list.cpp22
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<int, 4> 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");