Fix linked_list::remove_if()

When remove_if removes last element from the list
following push_back stops working.

Change-Id: Ia3e92763b83a2e172eaa10de7aecfb7a4be452d7
This commit is contained in:
Dmitriy Ivanov 2015-11-05 17:41:05 -08:00
parent ef5e647891
commit 7a9311f7f1
2 changed files with 22 additions and 0 deletions

View File

@ -127,6 +127,11 @@ class LinkedList {
} else { } else {
p->next = next; p->next = next;
} }
if (tail_ == e) {
tail_ = p;
}
Allocator::free(e); Allocator::free(e);
e = next; e = next;
} else { } else {

View File

@ -133,6 +133,23 @@ TEST(linked_list, remove_if_then_pop) {
ASSERT_TRUE(list.pop_front() == nullptr); ASSERT_TRUE(list.pop_front() == nullptr);
} }
TEST(linked_list, remove_if_last_then_push_back) {
test_list_t list;
list.push_back("a");
list.push_back("b");
list.push_back("c");
list.push_back("d");
list.remove_if([](const char* c) {
return *c == 'c' || *c == 'd';
});
ASSERT_EQ("ab", test_list_to_string(list));
list.push_back("d");
ASSERT_EQ("abd", test_list_to_string(list));
}
TEST(linked_list, copy_to_array) { TEST(linked_list, copy_to_array) {
test_list_t list; test_list_t list;
const size_t max_size = 128; const size_t max_size = 128;