| @@ -410,20 +410,28 @@ protected: | |||||
| this->m_parent_slot = nullptr; | this->m_parent_slot = nullptr; | ||||
| this->m_child[0] = nullptr; | this->m_child[0] = nullptr; | ||||
| this->m_child[1] = nullptr; | this->m_child[1] = nullptr; | ||||
| this->m_chain[0] = nullptr; | |||||
| this->m_chain[1] = nullptr; | |||||
| } | } | ||||
| void replace_chain(tree_node * replacement) | void replace_chain(tree_node * replacement) | ||||
| { | { | ||||
| for (int i = 0 ; i < 2 ; ++i) | for (int i = 0 ; i < 2 ; ++i) | ||||
| { | { | ||||
| if (this->m_chain[i]) | |||||
| if (replacement) | |||||
| { | { | ||||
| this->m_chain[i]->m_chain[i ? 0 : 1] = replacement; | |||||
| if (replacement) | |||||
| replacement->m_chain[i ? 0 : 1] = this->m_chain[i]; | |||||
| if (replacement->m_chain[i]) | |||||
| replacement->m_chain[i]->m_chain[i ? 0 : 1] = replacement->m_chain[i ? 0 : 1]; | |||||
| replacement->m_chain[i] = this->m_chain[i]; | |||||
| if (replacement->m_chain[i]) | |||||
| replacement->m_chain[i]->m_chain[i ? 0 : 1] = replacement; | |||||
| } | } | ||||
| else | |||||
| { | |||||
| if (this->m_chain[i]) | |||||
| this->m_chain[i]->m_chain[i ? 0 : 1] = this->m_chain[i ? 0 : 1]; | |||||
| } | |||||
| this->m_chain[i] = nullptr; | |||||
| } | } | ||||
| } | } | ||||
| @@ -91,6 +91,15 @@ lolunit_declare_fixture(AvlTreeTest) | |||||
| lolunit_assert_equal(tree.get_count(), 3); | lolunit_assert_equal(tree.get_count(), 3); | ||||
| lolunit_assert_equal(tree.erase(30), true); | lolunit_assert_equal(tree.erase(30), true); | ||||
| int test = 0; | |||||
| for (auto iterator : tree) | |||||
| { | |||||
| test += 10; | |||||
| lolunit_assert_equal(iterator.key, test); | |||||
| } | |||||
| lolunit_assert_equal(tree.get_count(), 2); | lolunit_assert_equal(tree.get_count(), 2); | ||||
| lolunit_assert_equal(tree.insert(30, 1), true); | lolunit_assert_equal(tree.insert(30, 1), true); | ||||
| @@ -98,6 +107,13 @@ lolunit_declare_fixture(AvlTreeTest) | |||||
| lolunit_assert_equal(tree.insert(20, 1), true); | lolunit_assert_equal(tree.insert(20, 1), true); | ||||
| lolunit_assert_equal(tree.exists(10), true); | lolunit_assert_equal(tree.exists(10), true); | ||||
| test = 0; | |||||
| for (auto iterator : tree) | |||||
| { | |||||
| test += 10; | |||||
| lolunit_assert_equal(iterator.key, test); | |||||
| } | |||||
| } | } | ||||
| lolunit_declare_test(AvlTreeExistence) | lolunit_declare_test(AvlTreeExistence) | ||||