//===----------------------------------------------------------------------===// // // The LLVM Compiler Infrastructure // // This file is dual licensed under the MIT and the University of Illinois Open // Source Licenses. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // Not a portable test // Precondition: __root->__is_black_ == true // template <class _NodePtr> // void // __tree_balance_after_insert(_NodePtr __root, _NodePtr __x) #include <__tree> #include <cassert> struct Node { Node* __left_; Node* __right_; Node* __parent_; bool __is_black_; Node() : __left_(), __right_(), __parent_(), __is_black_() {} }; void test1() { { Node root; Node a; Node b; Node c; Node d; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &a; b.__right_ = 0; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = 0; d.__right_ = 0; d.__is_black_ = false; a.__parent_ = &b; a.__left_ = 0; a.__right_ = 0; a.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == &a); assert(b.__right_ == 0); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == 0); assert(d.__right_ == 0); assert(d.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = 0; b.__right_ = &a; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = 0; d.__right_ = 0; d.__is_black_ = false; a.__parent_ = &b; a.__left_ = 0; a.__right_ = 0; a.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == 0); assert(b.__right_ == &a); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == 0); assert(d.__right_ == 0); assert(d.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = 0; b.__right_ = 0; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = &a; d.__right_ = 0; d.__is_black_ = false; a.__parent_ = &d; a.__left_ = 0; a.__right_ = 0; a.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == 0); assert(b.__right_ == 0); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == &a); assert(d.__right_ == 0); assert(d.__is_black_ == true); assert(a.__parent_ == &d); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = 0; b.__right_ = 0; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = 0; d.__right_ = &a; d.__is_black_ = false; a.__parent_ = &d; a.__left_ = 0; a.__right_ = 0; a.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == 0); assert(b.__right_ == 0); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == 0); assert(d.__right_ == &a); assert(d.__is_black_ == true); assert(a.__parent_ == &d); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; Node h; Node i; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &a; b.__right_ = &g; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = &h; d.__right_ = &i; d.__is_black_ = false; a.__parent_ = &b; a.__left_ = &e; a.__right_ = &f; a.__is_black_ = false; e.__parent_ = &a; e.__is_black_ = true; f.__parent_ = &a; f.__is_black_ = true; g.__parent_ = &b; g.__is_black_ = true; h.__parent_ = &d; h.__is_black_ = true; i.__parent_ = &d; i.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == &a); assert(b.__right_ == &g); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == &h); assert(d.__right_ == &i); assert(d.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == &e); assert(a.__right_ == &f); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; Node h; Node i; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &g; b.__right_ = &a; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = &h; d.__right_ = &i; d.__is_black_ = false; a.__parent_ = &b; a.__left_ = &e; a.__right_ = &f; a.__is_black_ = false; e.__parent_ = &a; e.__is_black_ = true; f.__parent_ = &a; f.__is_black_ = true; g.__parent_ = &b; g.__is_black_ = true; h.__parent_ = &d; h.__is_black_ = true; i.__parent_ = &d; i.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == &g); assert(b.__right_ == &a); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == &h); assert(d.__right_ == &i); assert(d.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == &e); assert(a.__right_ == &f); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; Node h; Node i; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &g; b.__right_ = &h; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = &a; d.__right_ = &i; d.__is_black_ = false; a.__parent_ = &d; a.__left_ = &e; a.__right_ = &f; a.__is_black_ = false; e.__parent_ = &a; e.__is_black_ = true; f.__parent_ = &a; f.__is_black_ = true; g.__parent_ = &b; g.__is_black_ = true; h.__parent_ = &b; h.__is_black_ = true; i.__parent_ = &d; i.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == &g); assert(b.__right_ == &h); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == &a); assert(d.__right_ == &i); assert(d.__is_black_ == true); assert(a.__parent_ == &d); assert(a.__left_ == &e); assert(a.__right_ == &f); assert(a.__is_black_ == false); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; Node h; Node i; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &d; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &g; b.__right_ = &h; b.__is_black_ = false; d.__parent_ = &c; d.__left_ = &i; d.__right_ = &a; d.__is_black_ = false; a.__parent_ = &d; a.__left_ = &e; a.__right_ = &f; a.__is_black_ = false; e.__parent_ = &a; e.__is_black_ = true; f.__parent_ = &a; f.__is_black_ = true; g.__parent_ = &b; g.__is_black_ = true; h.__parent_ = &b; h.__is_black_ = true; i.__parent_ = &d; i.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &c); assert(c.__parent_ == &root); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == &g); assert(b.__right_ == &h); assert(b.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == &i); assert(d.__right_ == &a); assert(d.__is_black_ == true); assert(a.__parent_ == &d); assert(a.__left_ == &e); assert(a.__right_ == &f); assert(a.__is_black_ == false); } } void test2() { { Node root; Node a; Node b; Node c; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &a; c.__right_ = 0; c.__is_black_ = true; a.__parent_ = &c; a.__left_ = 0; a.__right_ = &b; a.__is_black_ = false; b.__parent_ = &a; b.__left_ = 0; b.__right_ = 0; b.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &b); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); } { Node root; Node a; Node b; Node c; root.__left_ = &a; a.__parent_ = &root; a.__left_ = 0; a.__right_ = &c; a.__is_black_ = true; c.__parent_ = &a; c.__left_ = &b; c.__right_ = 0; c.__is_black_ = false; b.__parent_ = &c; b.__left_ = 0; b.__right_ = 0; b.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &b); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &a; c.__right_ = &g; c.__is_black_ = true; a.__parent_ = &c; a.__left_ = &d; a.__right_ = &b; a.__is_black_ = false; b.__parent_ = &a; b.__left_ = &e; b.__right_ = &f; b.__is_black_ = false; d.__parent_ = &a; d.__is_black_ = true; e.__parent_ = &b; e.__is_black_ = true; f.__parent_ = &b; f.__is_black_ = true; g.__parent_ = &c; g.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &b); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(c.__parent_ == &b); assert(c.__left_ == &f); assert(c.__right_ == &g); assert(c.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == &d); assert(a.__right_ == &e); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); assert(d.__parent_ == &a); assert(d.__is_black_ == true); assert(e.__parent_ == &a); assert(e.__is_black_ == true); assert(f.__parent_ == &c); assert(f.__is_black_ == true); assert(g.__parent_ == &c); assert(g.__is_black_ == true); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; root.__left_ = &a; a.__parent_ = &root; a.__left_ = &d; a.__right_ = &c; a.__is_black_ = true; c.__parent_ = &a; c.__left_ = &b; c.__right_ = &g; c.__is_black_ = false; b.__parent_ = &c; b.__left_ = &e; b.__right_ = &f; b.__is_black_ = false; d.__parent_ = &a; d.__is_black_ = true; e.__parent_ = &b; e.__is_black_ = true; f.__parent_ = &b; f.__is_black_ = true; g.__parent_ = &c; g.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &b); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(c.__parent_ == &b); assert(c.__left_ == &f); assert(c.__right_ == &g); assert(c.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == &d); assert(a.__right_ == &e); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); assert(d.__parent_ == &a); assert(d.__is_black_ == true); assert(e.__parent_ == &a); assert(e.__is_black_ == true); assert(f.__parent_ == &c); assert(f.__is_black_ == true); assert(g.__parent_ == &c); assert(g.__is_black_ == true); } } void test3() { { Node root; Node a; Node b; Node c; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = 0; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &a; b.__right_ = 0; b.__is_black_ = false; a.__parent_ = &b; a.__left_ = 0; a.__right_ = 0; a.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); } { Node root; Node a; Node b; Node c; root.__left_ = &a; a.__parent_ = &root; a.__left_ = 0; a.__right_ = &b; a.__is_black_ = true; b.__parent_ = &a; b.__left_ = 0; b.__right_ = &c; b.__is_black_ = false; c.__parent_ = &b; c.__left_ = 0; c.__right_ = 0; c.__is_black_ = false; std::__tree_balance_after_insert(root.__left_, &c); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; root.__left_ = &c; c.__parent_ = &root; c.__left_ = &b; c.__right_ = &g; c.__is_black_ = true; b.__parent_ = &c; b.__left_ = &a; b.__right_ = &f; b.__is_black_ = false; a.__parent_ = &b; a.__left_ = &d; a.__right_ = &e; a.__is_black_ = false; d.__parent_ = &a; d.__is_black_ = true; e.__parent_ = &a; e.__is_black_ = true; f.__parent_ = &b; f.__is_black_ = true; g.__parent_ = &c; g.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(c.__parent_ == &b); assert(c.__left_ == &f); assert(c.__right_ == &g); assert(c.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == &d); assert(a.__right_ == &e); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); assert(d.__parent_ == &a); assert(d.__is_black_ == true); assert(e.__parent_ == &a); assert(e.__is_black_ == true); assert(f.__parent_ == &c); assert(f.__is_black_ == true); assert(g.__parent_ == &c); assert(g.__is_black_ == true); } { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; root.__left_ = &a; a.__parent_ = &root; a.__left_ = &d; a.__right_ = &b; a.__is_black_ = true; b.__parent_ = &a; b.__left_ = &e; b.__right_ = &c; b.__is_black_ = false; c.__parent_ = &b; c.__left_ = &f; c.__right_ = &g; c.__is_black_ = false; d.__parent_ = &a; d.__is_black_ = true; e.__parent_ = &b; e.__is_black_ = true; f.__parent_ = &c; f.__is_black_ = true; g.__parent_ = &c; g.__is_black_ = true; std::__tree_balance_after_insert(root.__left_, &c); assert(std::__tree_invariant(root.__left_)); assert(root.__left_ == &b); assert(c.__parent_ == &b); assert(c.__left_ == &f); assert(c.__right_ == &g); assert(c.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == &d); assert(a.__right_ == &e); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); assert(d.__parent_ == &a); assert(d.__is_black_ == true); assert(e.__parent_ == &a); assert(e.__is_black_ == true); assert(f.__parent_ == &c); assert(f.__is_black_ == true); assert(g.__parent_ == &c); assert(g.__is_black_ == true); } } void test4() { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; Node h; root.__left_ = &a; a.__parent_ = &root; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &a); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(a.__parent_ == &root); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == true); a.__right_ = &b; b.__parent_ = &a; std::__tree_balance_after_insert(root.__left_, &b); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &a); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(a.__parent_ == &root); assert(a.__left_ == 0); assert(a.__right_ == &b); assert(a.__is_black_ == true); assert(b.__parent_ == &a); assert(b.__left_ == 0); assert(b.__right_ == 0); assert(b.__is_black_ == false); b.__right_ = &c; c.__parent_ = &b; std::__tree_balance_after_insert(root.__left_, &c); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &b); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); c.__right_ = &d; d.__parent_ = &c; std::__tree_balance_after_insert(root.__left_, &d); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &b); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == true); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == true); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(d.__parent_ == &c); assert(d.__left_ == 0); assert(d.__right_ == 0); assert(d.__is_black_ == false); d.__right_ = &e; e.__parent_ = &d; std::__tree_balance_after_insert(root.__left_, &e); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &b); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &d); assert(b.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == true); assert(d.__parent_ == &b); assert(d.__left_ == &c); assert(d.__right_ == &e); assert(d.__is_black_ == true); assert(c.__parent_ == &d); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); assert(e.__parent_ == &d); assert(e.__left_ == 0); assert(e.__right_ == 0); assert(e.__is_black_ == false); e.__right_ = &f; f.__parent_ = &e; std::__tree_balance_after_insert(root.__left_, &f); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &b); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &d); assert(b.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == true); assert(d.__parent_ == &b); assert(d.__left_ == &c); assert(d.__right_ == &e); assert(d.__is_black_ == false); assert(c.__parent_ == &d); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == true); assert(e.__parent_ == &d); assert(e.__left_ == 0); assert(e.__right_ == &f); assert(e.__is_black_ == true); assert(f.__parent_ == &e); assert(f.__left_ == 0); assert(f.__right_ == 0); assert(f.__is_black_ == false); f.__right_ = &g; g.__parent_ = &f; std::__tree_balance_after_insert(root.__left_, &g); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &b); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(b.__parent_ == &root); assert(b.__left_ == &a); assert(b.__right_ == &d); assert(b.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == true); assert(d.__parent_ == &b); assert(d.__left_ == &c); assert(d.__right_ == &f); assert(d.__is_black_ == false); assert(c.__parent_ == &d); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == true); assert(f.__parent_ == &d); assert(f.__left_ == &e); assert(f.__right_ == &g); assert(f.__is_black_ == true); assert(e.__parent_ == &f); assert(e.__left_ == 0); assert(e.__right_ == 0); assert(e.__is_black_ == false); assert(g.__parent_ == &f); assert(g.__left_ == 0); assert(g.__right_ == 0); assert(g.__is_black_ == false); g.__right_ = &h; h.__parent_ = &g; std::__tree_balance_after_insert(root.__left_, &h); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &d); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(d.__parent_ == &root); assert(d.__left_ == &b); assert(d.__right_ == &f); assert(d.__is_black_ == true); assert(b.__parent_ == &d); assert(b.__left_ == &a); assert(b.__right_ == &c); assert(b.__is_black_ == false); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == true); assert(c.__parent_ == &b); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == true); assert(f.__parent_ == &d); assert(f.__left_ == &e); assert(f.__right_ == &g); assert(f.__is_black_ == false); assert(e.__parent_ == &f); assert(e.__left_ == 0); assert(e.__right_ == 0); assert(e.__is_black_ == true); assert(g.__parent_ == &f); assert(g.__left_ == 0); assert(g.__right_ == &h); assert(g.__is_black_ == true); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == false); } void test5() { Node root; Node a; Node b; Node c; Node d; Node e; Node f; Node g; Node h; root.__left_ = &h; h.__parent_ = &root; std::__tree_balance_after_insert(root.__left_, &h); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &h); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(h.__parent_ == &root); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == true); h.__left_ = &g; g.__parent_ = &h; std::__tree_balance_after_insert(root.__left_, &g); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &h); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(h.__parent_ == &root); assert(h.__left_ == &g); assert(h.__right_ == 0); assert(h.__is_black_ == true); assert(g.__parent_ == &h); assert(g.__left_ == 0); assert(g.__right_ == 0); assert(g.__is_black_ == false); g.__left_ = &f; f.__parent_ = &g; std::__tree_balance_after_insert(root.__left_, &f); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &g); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(g.__parent_ == &root); assert(g.__left_ == &f); assert(g.__right_ == &h); assert(g.__is_black_ == true); assert(f.__parent_ == &g); assert(f.__left_ == 0); assert(f.__right_ == 0); assert(f.__is_black_ == false); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == false); f.__left_ = &e; e.__parent_ = &f; std::__tree_balance_after_insert(root.__left_, &e); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &g); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(g.__parent_ == &root); assert(g.__left_ == &f); assert(g.__right_ == &h); assert(g.__is_black_ == true); assert(f.__parent_ == &g); assert(f.__left_ == &e); assert(f.__right_ == 0); assert(f.__is_black_ == true); assert(e.__parent_ == &f); assert(e.__left_ == 0); assert(e.__right_ == 0); assert(e.__is_black_ == false); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == true); e.__left_ = &d; d.__parent_ = &e; std::__tree_balance_after_insert(root.__left_, &d); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &g); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(g.__parent_ == &root); assert(g.__left_ == &e); assert(g.__right_ == &h); assert(g.__is_black_ == true); assert(e.__parent_ == &g); assert(e.__left_ == &d); assert(e.__right_ == &f); assert(e.__is_black_ == true); assert(d.__parent_ == &e); assert(d.__left_ == 0); assert(d.__right_ == 0); assert(d.__is_black_ == false); assert(f.__parent_ == &e); assert(f.__left_ == 0); assert(f.__right_ == 0); assert(f.__is_black_ == false); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == true); d.__left_ = &c; c.__parent_ = &d; std::__tree_balance_after_insert(root.__left_, &c); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &g); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(g.__parent_ == &root); assert(g.__left_ == &e); assert(g.__right_ == &h); assert(g.__is_black_ == true); assert(e.__parent_ == &g); assert(e.__left_ == &d); assert(e.__right_ == &f); assert(e.__is_black_ == false); assert(d.__parent_ == &e); assert(d.__left_ == &c); assert(d.__right_ == 0); assert(d.__is_black_ == true); assert(c.__parent_ == &d); assert(c.__left_ == 0); assert(c.__right_ == 0); assert(c.__is_black_ == false); assert(f.__parent_ == &e); assert(f.__left_ == 0); assert(f.__right_ == 0); assert(f.__is_black_ == true); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == true); c.__left_ = &b; b.__parent_ = &c; std::__tree_balance_after_insert(root.__left_, &b); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &g); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(g.__parent_ == &root); assert(g.__left_ == &e); assert(g.__right_ == &h); assert(g.__is_black_ == true); assert(e.__parent_ == &g); assert(e.__left_ == &c); assert(e.__right_ == &f); assert(e.__is_black_ == false); assert(c.__parent_ == &e); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == true); assert(b.__parent_ == &c); assert(b.__left_ == 0); assert(b.__right_ == 0); assert(b.__is_black_ == false); assert(d.__parent_ == &c); assert(d.__left_ == 0); assert(d.__right_ == 0); assert(d.__is_black_ == false); assert(f.__parent_ == &e); assert(f.__left_ == 0); assert(f.__right_ == 0); assert(f.__is_black_ == true); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == true); b.__left_ = &a; a.__parent_ = &b; std::__tree_balance_after_insert(root.__left_, &a); assert(std::__tree_invariant(root.__left_)); assert(root.__parent_ == 0); assert(root.__left_ == &e); assert(root.__right_ == 0); assert(root.__is_black_ == false); assert(e.__parent_ == &root); assert(e.__left_ == &c); assert(e.__right_ == &g); assert(e.__is_black_ == true); assert(c.__parent_ == &e); assert(c.__left_ == &b); assert(c.__right_ == &d); assert(c.__is_black_ == false); assert(b.__parent_ == &c); assert(b.__left_ == &a); assert(b.__right_ == 0); assert(b.__is_black_ == true); assert(a.__parent_ == &b); assert(a.__left_ == 0); assert(a.__right_ == 0); assert(a.__is_black_ == false); assert(d.__parent_ == &c); assert(d.__left_ == 0); assert(d.__right_ == 0); assert(d.__is_black_ == true); assert(g.__parent_ == &e); assert(g.__left_ == &f); assert(g.__right_ == &h); assert(g.__is_black_ == false); assert(f.__parent_ == &g); assert(f.__left_ == 0); assert(f.__right_ == 0); assert(f.__is_black_ == true); assert(h.__parent_ == &g); assert(h.__left_ == 0); assert(h.__right_ == 0); assert(h.__is_black_ == true); } int main() { test1(); test2(); test3(); test4(); test5(); }