diff --git a/AK/RedBlackTree.h b/AK/RedBlackTree.h index d6b46380504..27401134209 100644 --- a/AK/RedBlackTree.h +++ b/AK/RedBlackTree.h @@ -230,6 +230,7 @@ protected: // special case: deleting the only node if (m_size == 1) { m_root = nullptr; + m_minimum = nullptr; m_size = 0; return; } diff --git a/Tests/AK/TestRedBlackTree.cpp b/Tests/AK/TestRedBlackTree.cpp index f6d1ddebac2..0b0848bf678 100644 --- a/Tests/AK/TestRedBlackTree.cpp +++ b/Tests/AK/TestRedBlackTree.cpp @@ -128,3 +128,17 @@ TEST_CASE(find_smallest_not_below_iterator) EXPECT_EQ(smallest_not_below_three.key(), 3u); } } + +TEST_CASE(iterators_on_emptied_tree) +{ + RedBlackTree test; + test.insert(1, 1); + test.remove(1); + EXPECT_EQ(test.size(), 0u); + auto begin_iterator = test.begin(); + auto end_iterator = test.end(); + EXPECT(begin_iterator.is_end()); + + EXPECT_EQ(begin_iterator, end_iterator); + EXPECT(!(begin_iterator != end_iterator)); +}