xref: /minix3/external/bsd/libc++/dist/libcxx/test/containers/associative/tree_remove.pass.cpp (revision 4684ddb6aab0b36791c8099bc705d6140b3d05d0)
1*4684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
2*4684ddb6SLionel Sambuc //
3*4684ddb6SLionel Sambuc //                     The LLVM Compiler Infrastructure
4*4684ddb6SLionel Sambuc //
5*4684ddb6SLionel Sambuc // This file is dual licensed under the MIT and the University of Illinois Open
6*4684ddb6SLionel Sambuc // Source Licenses. See LICENSE.TXT for details.
7*4684ddb6SLionel Sambuc //
8*4684ddb6SLionel Sambuc //===----------------------------------------------------------------------===//
9*4684ddb6SLionel Sambuc 
10*4684ddb6SLionel Sambuc // Not a portable test
11*4684ddb6SLionel Sambuc 
12*4684ddb6SLionel Sambuc // Returns __tree_next(__z)
13*4684ddb6SLionel Sambuc // template <class _NodePtr>
14*4684ddb6SLionel Sambuc // void
15*4684ddb6SLionel Sambuc // __tree_remove(_NodePtr __root, _NodePtr __z)
16*4684ddb6SLionel Sambuc 
17*4684ddb6SLionel Sambuc #include <__tree>
18*4684ddb6SLionel Sambuc #include <cassert>
19*4684ddb6SLionel Sambuc 
20*4684ddb6SLionel Sambuc struct Node
21*4684ddb6SLionel Sambuc {
22*4684ddb6SLionel Sambuc     Node* __left_;
23*4684ddb6SLionel Sambuc     Node* __right_;
24*4684ddb6SLionel Sambuc     Node* __parent_;
25*4684ddb6SLionel Sambuc     bool __is_black_;
26*4684ddb6SLionel Sambuc 
NodeNode27*4684ddb6SLionel Sambuc     Node() : __left_(), __right_(), __parent_(), __is_black_() {}
28*4684ddb6SLionel Sambuc };
29*4684ddb6SLionel Sambuc 
30*4684ddb6SLionel Sambuc void
test1()31*4684ddb6SLionel Sambuc test1()
32*4684ddb6SLionel Sambuc {
33*4684ddb6SLionel Sambuc     {
34*4684ddb6SLionel Sambuc         // Left
35*4684ddb6SLionel Sambuc         // Case 1 -> Case 2 -> x is red turned to black
36*4684ddb6SLionel Sambuc         Node root;
37*4684ddb6SLionel Sambuc         Node b;
38*4684ddb6SLionel Sambuc         Node c;
39*4684ddb6SLionel Sambuc         Node d;
40*4684ddb6SLionel Sambuc         Node e;
41*4684ddb6SLionel Sambuc         Node y;
42*4684ddb6SLionel Sambuc 
43*4684ddb6SLionel Sambuc         root.__left_ = &b;
44*4684ddb6SLionel Sambuc 
45*4684ddb6SLionel Sambuc         b.__parent_ = &root;
46*4684ddb6SLionel Sambuc         b.__left_ = &y;
47*4684ddb6SLionel Sambuc         b.__right_ = &d;
48*4684ddb6SLionel Sambuc         b.__is_black_ = true;
49*4684ddb6SLionel Sambuc 
50*4684ddb6SLionel Sambuc         y.__parent_ = &b;
51*4684ddb6SLionel Sambuc         y.__left_ = 0;
52*4684ddb6SLionel Sambuc         y.__right_ = 0;
53*4684ddb6SLionel Sambuc         y.__is_black_ = true;
54*4684ddb6SLionel Sambuc 
55*4684ddb6SLionel Sambuc         d.__parent_ = &b;
56*4684ddb6SLionel Sambuc         d.__left_ = &c;
57*4684ddb6SLionel Sambuc         d.__right_ = &e;
58*4684ddb6SLionel Sambuc         d.__is_black_ = false;
59*4684ddb6SLionel Sambuc 
60*4684ddb6SLionel Sambuc         c.__parent_ = &d;
61*4684ddb6SLionel Sambuc         c.__left_ = 0;
62*4684ddb6SLionel Sambuc         c.__right_ = 0;
63*4684ddb6SLionel Sambuc         c.__is_black_ = true;
64*4684ddb6SLionel Sambuc 
65*4684ddb6SLionel Sambuc         e.__parent_ = &d;
66*4684ddb6SLionel Sambuc         e.__left_ = 0;
67*4684ddb6SLionel Sambuc         e.__right_ = 0;
68*4684ddb6SLionel Sambuc         e.__is_black_ = true;
69*4684ddb6SLionel Sambuc 
70*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &y);
71*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
72*4684ddb6SLionel Sambuc 
73*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
74*4684ddb6SLionel Sambuc         assert(root.__left_ == &d);
75*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
76*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
77*4684ddb6SLionel Sambuc 
78*4684ddb6SLionel Sambuc         assert(d.__parent_ == &root);
79*4684ddb6SLionel Sambuc         assert(d.__left_ == &b);
80*4684ddb6SLionel Sambuc         assert(d.__right_ == &e);
81*4684ddb6SLionel Sambuc         assert(d.__is_black_ == true);
82*4684ddb6SLionel Sambuc 
83*4684ddb6SLionel Sambuc         assert(b.__parent_ == &d);
84*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
85*4684ddb6SLionel Sambuc         assert(b.__right_ == &c);
86*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
87*4684ddb6SLionel Sambuc 
88*4684ddb6SLionel Sambuc         assert(c.__parent_ == &b);
89*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
90*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
91*4684ddb6SLionel Sambuc         assert(c.__is_black_ == false);
92*4684ddb6SLionel Sambuc 
93*4684ddb6SLionel Sambuc         assert(e.__parent_ == &d);
94*4684ddb6SLionel Sambuc         assert(e.__left_ == 0);
95*4684ddb6SLionel Sambuc         assert(e.__right_ == 0);
96*4684ddb6SLionel Sambuc         assert(e.__is_black_ == true);
97*4684ddb6SLionel Sambuc     }
98*4684ddb6SLionel Sambuc     {
99*4684ddb6SLionel Sambuc         // Right
100*4684ddb6SLionel Sambuc         // Case 1 -> Case 2 -> x is red turned to black
101*4684ddb6SLionel Sambuc         Node root;
102*4684ddb6SLionel Sambuc         Node b;
103*4684ddb6SLionel Sambuc         Node c;
104*4684ddb6SLionel Sambuc         Node d;
105*4684ddb6SLionel Sambuc         Node e;
106*4684ddb6SLionel Sambuc         Node y;
107*4684ddb6SLionel Sambuc 
108*4684ddb6SLionel Sambuc         root.__left_ = &b;
109*4684ddb6SLionel Sambuc 
110*4684ddb6SLionel Sambuc         b.__parent_ = &root;
111*4684ddb6SLionel Sambuc         b.__right_ = &y;
112*4684ddb6SLionel Sambuc         b.__left_ = &d;
113*4684ddb6SLionel Sambuc         b.__is_black_ = true;
114*4684ddb6SLionel Sambuc 
115*4684ddb6SLionel Sambuc         y.__parent_ = &b;
116*4684ddb6SLionel Sambuc         y.__right_ = 0;
117*4684ddb6SLionel Sambuc         y.__left_ = 0;
118*4684ddb6SLionel Sambuc         y.__is_black_ = true;
119*4684ddb6SLionel Sambuc 
120*4684ddb6SLionel Sambuc         d.__parent_ = &b;
121*4684ddb6SLionel Sambuc         d.__right_ = &c;
122*4684ddb6SLionel Sambuc         d.__left_ = &e;
123*4684ddb6SLionel Sambuc         d.__is_black_ = false;
124*4684ddb6SLionel Sambuc 
125*4684ddb6SLionel Sambuc         c.__parent_ = &d;
126*4684ddb6SLionel Sambuc         c.__right_ = 0;
127*4684ddb6SLionel Sambuc         c.__left_ = 0;
128*4684ddb6SLionel Sambuc         c.__is_black_ = true;
129*4684ddb6SLionel Sambuc 
130*4684ddb6SLionel Sambuc         e.__parent_ = &d;
131*4684ddb6SLionel Sambuc         e.__right_ = 0;
132*4684ddb6SLionel Sambuc         e.__left_ = 0;
133*4684ddb6SLionel Sambuc         e.__is_black_ = true;
134*4684ddb6SLionel Sambuc 
135*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &y);
136*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
137*4684ddb6SLionel Sambuc 
138*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
139*4684ddb6SLionel Sambuc         assert(root.__left_ == &d);
140*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
141*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
142*4684ddb6SLionel Sambuc 
143*4684ddb6SLionel Sambuc         assert(d.__parent_ == &root);
144*4684ddb6SLionel Sambuc         assert(d.__right_ == &b);
145*4684ddb6SLionel Sambuc         assert(d.__left_ == &e);
146*4684ddb6SLionel Sambuc         assert(d.__is_black_ == true);
147*4684ddb6SLionel Sambuc 
148*4684ddb6SLionel Sambuc         assert(b.__parent_ == &d);
149*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
150*4684ddb6SLionel Sambuc         assert(b.__left_ == &c);
151*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
152*4684ddb6SLionel Sambuc 
153*4684ddb6SLionel Sambuc         assert(c.__parent_ == &b);
154*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
155*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
156*4684ddb6SLionel Sambuc         assert(c.__is_black_ == false);
157*4684ddb6SLionel Sambuc 
158*4684ddb6SLionel Sambuc         assert(e.__parent_ == &d);
159*4684ddb6SLionel Sambuc         assert(e.__right_ == 0);
160*4684ddb6SLionel Sambuc         assert(e.__left_ == 0);
161*4684ddb6SLionel Sambuc         assert(e.__is_black_ == true);
162*4684ddb6SLionel Sambuc     }
163*4684ddb6SLionel Sambuc     {
164*4684ddb6SLionel Sambuc         // Left
165*4684ddb6SLionel Sambuc         // Case 1 -> Case 3 -> Case 4
166*4684ddb6SLionel Sambuc         Node root;
167*4684ddb6SLionel Sambuc         Node b;
168*4684ddb6SLionel Sambuc         Node c;
169*4684ddb6SLionel Sambuc         Node d;
170*4684ddb6SLionel Sambuc         Node e;
171*4684ddb6SLionel Sambuc         Node f;
172*4684ddb6SLionel Sambuc         Node y;
173*4684ddb6SLionel Sambuc 
174*4684ddb6SLionel Sambuc         root.__left_ = &b;
175*4684ddb6SLionel Sambuc 
176*4684ddb6SLionel Sambuc         b.__parent_ = &root;
177*4684ddb6SLionel Sambuc         b.__left_ = &y;
178*4684ddb6SLionel Sambuc         b.__right_ = &d;
179*4684ddb6SLionel Sambuc         b.__is_black_ = true;
180*4684ddb6SLionel Sambuc 
181*4684ddb6SLionel Sambuc         y.__parent_ = &b;
182*4684ddb6SLionel Sambuc         y.__left_ = 0;
183*4684ddb6SLionel Sambuc         y.__right_ = 0;
184*4684ddb6SLionel Sambuc         y.__is_black_ = true;
185*4684ddb6SLionel Sambuc 
186*4684ddb6SLionel Sambuc         d.__parent_ = &b;
187*4684ddb6SLionel Sambuc         d.__left_ = &c;
188*4684ddb6SLionel Sambuc         d.__right_ = &e;
189*4684ddb6SLionel Sambuc         d.__is_black_ = false;
190*4684ddb6SLionel Sambuc 
191*4684ddb6SLionel Sambuc         c.__parent_ = &d;
192*4684ddb6SLionel Sambuc         c.__left_ = &f;
193*4684ddb6SLionel Sambuc         c.__right_ = 0;
194*4684ddb6SLionel Sambuc         c.__is_black_ = true;
195*4684ddb6SLionel Sambuc 
196*4684ddb6SLionel Sambuc         e.__parent_ = &d;
197*4684ddb6SLionel Sambuc         e.__left_ = 0;
198*4684ddb6SLionel Sambuc         e.__right_ = 0;
199*4684ddb6SLionel Sambuc         e.__is_black_ = true;
200*4684ddb6SLionel Sambuc 
201*4684ddb6SLionel Sambuc         f.__parent_ = &c;
202*4684ddb6SLionel Sambuc         f.__left_ = 0;
203*4684ddb6SLionel Sambuc         f.__right_ = 0;
204*4684ddb6SLionel Sambuc         f.__is_black_ = false;
205*4684ddb6SLionel Sambuc 
206*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &y);
207*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
208*4684ddb6SLionel Sambuc 
209*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
210*4684ddb6SLionel Sambuc         assert(root.__left_ == &d);
211*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
212*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
213*4684ddb6SLionel Sambuc 
214*4684ddb6SLionel Sambuc         assert(d.__parent_ == &root);
215*4684ddb6SLionel Sambuc         assert(d.__left_ == &f);
216*4684ddb6SLionel Sambuc         assert(d.__right_ == &e);
217*4684ddb6SLionel Sambuc         assert(d.__is_black_ == true);
218*4684ddb6SLionel Sambuc 
219*4684ddb6SLionel Sambuc         assert(f.__parent_ == &d);
220*4684ddb6SLionel Sambuc         assert(f.__left_ == &b);
221*4684ddb6SLionel Sambuc         assert(f.__right_ == &c);
222*4684ddb6SLionel Sambuc         assert(f.__is_black_ == false);
223*4684ddb6SLionel Sambuc 
224*4684ddb6SLionel Sambuc         assert(b.__parent_ == &f);
225*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
226*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
227*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
228*4684ddb6SLionel Sambuc 
229*4684ddb6SLionel Sambuc         assert(c.__parent_ == &f);
230*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
231*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
232*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
233*4684ddb6SLionel Sambuc 
234*4684ddb6SLionel Sambuc         assert(e.__parent_ == &d);
235*4684ddb6SLionel Sambuc         assert(e.__left_ == 0);
236*4684ddb6SLionel Sambuc         assert(e.__right_ == 0);
237*4684ddb6SLionel Sambuc         assert(e.__is_black_ == true);
238*4684ddb6SLionel Sambuc     }
239*4684ddb6SLionel Sambuc     {
240*4684ddb6SLionel Sambuc         // Right
241*4684ddb6SLionel Sambuc         // Case 1 -> Case 3 -> Case 4
242*4684ddb6SLionel Sambuc         Node root;
243*4684ddb6SLionel Sambuc         Node b;
244*4684ddb6SLionel Sambuc         Node c;
245*4684ddb6SLionel Sambuc         Node d;
246*4684ddb6SLionel Sambuc         Node e;
247*4684ddb6SLionel Sambuc         Node f;
248*4684ddb6SLionel Sambuc         Node y;
249*4684ddb6SLionel Sambuc 
250*4684ddb6SLionel Sambuc         root.__left_ = &b;
251*4684ddb6SLionel Sambuc 
252*4684ddb6SLionel Sambuc         b.__parent_ = &root;
253*4684ddb6SLionel Sambuc         b.__right_ = &y;
254*4684ddb6SLionel Sambuc         b.__left_ = &d;
255*4684ddb6SLionel Sambuc         b.__is_black_ = true;
256*4684ddb6SLionel Sambuc 
257*4684ddb6SLionel Sambuc         y.__parent_ = &b;
258*4684ddb6SLionel Sambuc         y.__right_ = 0;
259*4684ddb6SLionel Sambuc         y.__left_ = 0;
260*4684ddb6SLionel Sambuc         y.__is_black_ = true;
261*4684ddb6SLionel Sambuc 
262*4684ddb6SLionel Sambuc         d.__parent_ = &b;
263*4684ddb6SLionel Sambuc         d.__right_ = &c;
264*4684ddb6SLionel Sambuc         d.__left_ = &e;
265*4684ddb6SLionel Sambuc         d.__is_black_ = false;
266*4684ddb6SLionel Sambuc 
267*4684ddb6SLionel Sambuc         c.__parent_ = &d;
268*4684ddb6SLionel Sambuc         c.__right_ = &f;
269*4684ddb6SLionel Sambuc         c.__left_ = 0;
270*4684ddb6SLionel Sambuc         c.__is_black_ = true;
271*4684ddb6SLionel Sambuc 
272*4684ddb6SLionel Sambuc         e.__parent_ = &d;
273*4684ddb6SLionel Sambuc         e.__right_ = 0;
274*4684ddb6SLionel Sambuc         e.__left_ = 0;
275*4684ddb6SLionel Sambuc         e.__is_black_ = true;
276*4684ddb6SLionel Sambuc 
277*4684ddb6SLionel Sambuc         f.__parent_ = &c;
278*4684ddb6SLionel Sambuc         f.__right_ = 0;
279*4684ddb6SLionel Sambuc         f.__left_ = 0;
280*4684ddb6SLionel Sambuc         f.__is_black_ = false;
281*4684ddb6SLionel Sambuc 
282*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &y);
283*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
284*4684ddb6SLionel Sambuc 
285*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
286*4684ddb6SLionel Sambuc         assert(root.__left_ == &d);
287*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
288*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
289*4684ddb6SLionel Sambuc 
290*4684ddb6SLionel Sambuc         assert(d.__parent_ == &root);
291*4684ddb6SLionel Sambuc         assert(d.__right_ == &f);
292*4684ddb6SLionel Sambuc         assert(d.__left_ == &e);
293*4684ddb6SLionel Sambuc         assert(d.__is_black_ == true);
294*4684ddb6SLionel Sambuc 
295*4684ddb6SLionel Sambuc         assert(f.__parent_ == &d);
296*4684ddb6SLionel Sambuc         assert(f.__right_ == &b);
297*4684ddb6SLionel Sambuc         assert(f.__left_ == &c);
298*4684ddb6SLionel Sambuc         assert(f.__is_black_ == false);
299*4684ddb6SLionel Sambuc 
300*4684ddb6SLionel Sambuc         assert(b.__parent_ == &f);
301*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
302*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
303*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
304*4684ddb6SLionel Sambuc 
305*4684ddb6SLionel Sambuc         assert(c.__parent_ == &f);
306*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
307*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
308*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
309*4684ddb6SLionel Sambuc 
310*4684ddb6SLionel Sambuc         assert(e.__parent_ == &d);
311*4684ddb6SLionel Sambuc         assert(e.__right_ == 0);
312*4684ddb6SLionel Sambuc         assert(e.__left_ == 0);
313*4684ddb6SLionel Sambuc         assert(e.__is_black_ == true);
314*4684ddb6SLionel Sambuc     }
315*4684ddb6SLionel Sambuc }
316*4684ddb6SLionel Sambuc 
317*4684ddb6SLionel Sambuc void
test2()318*4684ddb6SLionel Sambuc test2()
319*4684ddb6SLionel Sambuc {
320*4684ddb6SLionel Sambuc     {
321*4684ddb6SLionel Sambuc         Node root;
322*4684ddb6SLionel Sambuc         Node a;
323*4684ddb6SLionel Sambuc         Node b;
324*4684ddb6SLionel Sambuc         Node c;
325*4684ddb6SLionel Sambuc 
326*4684ddb6SLionel Sambuc         root.__left_ = &b;
327*4684ddb6SLionel Sambuc 
328*4684ddb6SLionel Sambuc         b.__parent_ = &root;
329*4684ddb6SLionel Sambuc         b.__left_ = &a;
330*4684ddb6SLionel Sambuc         b.__right_ = &c;
331*4684ddb6SLionel Sambuc         b.__is_black_ = true;
332*4684ddb6SLionel Sambuc 
333*4684ddb6SLionel Sambuc         a.__parent_ = &b;
334*4684ddb6SLionel Sambuc         a.__left_ = 0;
335*4684ddb6SLionel Sambuc         a.__right_ = 0;
336*4684ddb6SLionel Sambuc         a.__is_black_ = true;
337*4684ddb6SLionel Sambuc 
338*4684ddb6SLionel Sambuc         c.__parent_ = &b;
339*4684ddb6SLionel Sambuc         c.__left_ = 0;
340*4684ddb6SLionel Sambuc         c.__right_ = 0;
341*4684ddb6SLionel Sambuc         c.__is_black_ = true;
342*4684ddb6SLionel Sambuc 
343*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
344*4684ddb6SLionel Sambuc 
345*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
346*4684ddb6SLionel Sambuc 
347*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
348*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
349*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
350*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
351*4684ddb6SLionel Sambuc 
352*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
353*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
354*4684ddb6SLionel Sambuc         assert(b.__right_ == &c);
355*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
356*4684ddb6SLionel Sambuc 
357*4684ddb6SLionel Sambuc         assert(c.__parent_ == &b);
358*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
359*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
360*4684ddb6SLionel Sambuc         assert(c.__is_black_ == false);
361*4684ddb6SLionel Sambuc 
362*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
363*4684ddb6SLionel Sambuc 
364*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
365*4684ddb6SLionel Sambuc 
366*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
367*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
368*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
369*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
370*4684ddb6SLionel Sambuc 
371*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
372*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
373*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
374*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
375*4684ddb6SLionel Sambuc 
376*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
377*4684ddb6SLionel Sambuc 
378*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
379*4684ddb6SLionel Sambuc 
380*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
381*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
382*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
383*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
384*4684ddb6SLionel Sambuc     }
385*4684ddb6SLionel Sambuc     {
386*4684ddb6SLionel Sambuc         Node root;
387*4684ddb6SLionel Sambuc         Node a;
388*4684ddb6SLionel Sambuc         Node b;
389*4684ddb6SLionel Sambuc         Node c;
390*4684ddb6SLionel Sambuc 
391*4684ddb6SLionel Sambuc         root.__left_ = &b;
392*4684ddb6SLionel Sambuc 
393*4684ddb6SLionel Sambuc         b.__parent_ = &root;
394*4684ddb6SLionel Sambuc         b.__left_ = &a;
395*4684ddb6SLionel Sambuc         b.__right_ = &c;
396*4684ddb6SLionel Sambuc         b.__is_black_ = true;
397*4684ddb6SLionel Sambuc 
398*4684ddb6SLionel Sambuc         a.__parent_ = &b;
399*4684ddb6SLionel Sambuc         a.__left_ = 0;
400*4684ddb6SLionel Sambuc         a.__right_ = 0;
401*4684ddb6SLionel Sambuc         a.__is_black_ = false;
402*4684ddb6SLionel Sambuc 
403*4684ddb6SLionel Sambuc         c.__parent_ = &b;
404*4684ddb6SLionel Sambuc         c.__left_ = 0;
405*4684ddb6SLionel Sambuc         c.__right_ = 0;
406*4684ddb6SLionel Sambuc         c.__is_black_ = false;
407*4684ddb6SLionel Sambuc 
408*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
409*4684ddb6SLionel Sambuc 
410*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
411*4684ddb6SLionel Sambuc 
412*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
413*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
414*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
415*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
416*4684ddb6SLionel Sambuc 
417*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
418*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
419*4684ddb6SLionel Sambuc         assert(b.__right_ == &c);
420*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
421*4684ddb6SLionel Sambuc 
422*4684ddb6SLionel Sambuc         assert(c.__parent_ == &b);
423*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
424*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
425*4684ddb6SLionel Sambuc         assert(c.__is_black_ == false);
426*4684ddb6SLionel Sambuc 
427*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
428*4684ddb6SLionel Sambuc 
429*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
430*4684ddb6SLionel Sambuc 
431*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
432*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
433*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
434*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
435*4684ddb6SLionel Sambuc 
436*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
437*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
438*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
439*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
440*4684ddb6SLionel Sambuc 
441*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
442*4684ddb6SLionel Sambuc 
443*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
444*4684ddb6SLionel Sambuc 
445*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
446*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
447*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
448*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
449*4684ddb6SLionel Sambuc     }
450*4684ddb6SLionel Sambuc     {
451*4684ddb6SLionel Sambuc         Node root;
452*4684ddb6SLionel Sambuc         Node a;
453*4684ddb6SLionel Sambuc         Node b;
454*4684ddb6SLionel Sambuc         Node c;
455*4684ddb6SLionel Sambuc 
456*4684ddb6SLionel Sambuc         root.__left_ = &b;
457*4684ddb6SLionel Sambuc 
458*4684ddb6SLionel Sambuc         b.__parent_ = &root;
459*4684ddb6SLionel Sambuc         b.__left_ = &a;
460*4684ddb6SLionel Sambuc         b.__right_ = &c;
461*4684ddb6SLionel Sambuc         b.__is_black_ = true;
462*4684ddb6SLionel Sambuc 
463*4684ddb6SLionel Sambuc         a.__parent_ = &b;
464*4684ddb6SLionel Sambuc         a.__left_ = 0;
465*4684ddb6SLionel Sambuc         a.__right_ = 0;
466*4684ddb6SLionel Sambuc         a.__is_black_ = true;
467*4684ddb6SLionel Sambuc 
468*4684ddb6SLionel Sambuc         c.__parent_ = &b;
469*4684ddb6SLionel Sambuc         c.__left_ = 0;
470*4684ddb6SLionel Sambuc         c.__right_ = 0;
471*4684ddb6SLionel Sambuc         c.__is_black_ = true;
472*4684ddb6SLionel Sambuc 
473*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
474*4684ddb6SLionel Sambuc 
475*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
476*4684ddb6SLionel Sambuc 
477*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
478*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
479*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
480*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
481*4684ddb6SLionel Sambuc 
482*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
483*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
484*4684ddb6SLionel Sambuc         assert(b.__right_ == &c);
485*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
486*4684ddb6SLionel Sambuc 
487*4684ddb6SLionel Sambuc         assert(c.__parent_ == &b);
488*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
489*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
490*4684ddb6SLionel Sambuc         assert(c.__is_black_ == false);
491*4684ddb6SLionel Sambuc 
492*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
493*4684ddb6SLionel Sambuc 
494*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
495*4684ddb6SLionel Sambuc 
496*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
497*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
498*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
499*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
500*4684ddb6SLionel Sambuc 
501*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
502*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
503*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
504*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
505*4684ddb6SLionel Sambuc 
506*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
507*4684ddb6SLionel Sambuc 
508*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
509*4684ddb6SLionel Sambuc 
510*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
511*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
512*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
513*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
514*4684ddb6SLionel Sambuc     }
515*4684ddb6SLionel Sambuc     {
516*4684ddb6SLionel Sambuc         Node root;
517*4684ddb6SLionel Sambuc         Node a;
518*4684ddb6SLionel Sambuc         Node b;
519*4684ddb6SLionel Sambuc         Node c;
520*4684ddb6SLionel Sambuc 
521*4684ddb6SLionel Sambuc         root.__left_ = &b;
522*4684ddb6SLionel Sambuc 
523*4684ddb6SLionel Sambuc         b.__parent_ = &root;
524*4684ddb6SLionel Sambuc         b.__left_ = &a;
525*4684ddb6SLionel Sambuc         b.__right_ = &c;
526*4684ddb6SLionel Sambuc         b.__is_black_ = true;
527*4684ddb6SLionel Sambuc 
528*4684ddb6SLionel Sambuc         a.__parent_ = &b;
529*4684ddb6SLionel Sambuc         a.__left_ = 0;
530*4684ddb6SLionel Sambuc         a.__right_ = 0;
531*4684ddb6SLionel Sambuc         a.__is_black_ = false;
532*4684ddb6SLionel Sambuc 
533*4684ddb6SLionel Sambuc         c.__parent_ = &b;
534*4684ddb6SLionel Sambuc         c.__left_ = 0;
535*4684ddb6SLionel Sambuc         c.__right_ = 0;
536*4684ddb6SLionel Sambuc         c.__is_black_ = false;
537*4684ddb6SLionel Sambuc 
538*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
539*4684ddb6SLionel Sambuc 
540*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
541*4684ddb6SLionel Sambuc 
542*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
543*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
544*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
545*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
546*4684ddb6SLionel Sambuc 
547*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
548*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
549*4684ddb6SLionel Sambuc         assert(b.__right_ == &c);
550*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
551*4684ddb6SLionel Sambuc 
552*4684ddb6SLionel Sambuc         assert(c.__parent_ == &b);
553*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
554*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
555*4684ddb6SLionel Sambuc         assert(c.__is_black_ == false);
556*4684ddb6SLionel Sambuc 
557*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
558*4684ddb6SLionel Sambuc 
559*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
560*4684ddb6SLionel Sambuc 
561*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
562*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
563*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
564*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
565*4684ddb6SLionel Sambuc 
566*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
567*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
568*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
569*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
570*4684ddb6SLionel Sambuc 
571*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
572*4684ddb6SLionel Sambuc 
573*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
574*4684ddb6SLionel Sambuc 
575*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
576*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
577*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
578*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
579*4684ddb6SLionel Sambuc     }
580*4684ddb6SLionel Sambuc     {
581*4684ddb6SLionel Sambuc         Node root;
582*4684ddb6SLionel Sambuc         Node a;
583*4684ddb6SLionel Sambuc         Node b;
584*4684ddb6SLionel Sambuc         Node c;
585*4684ddb6SLionel Sambuc 
586*4684ddb6SLionel Sambuc         root.__left_ = &b;
587*4684ddb6SLionel Sambuc 
588*4684ddb6SLionel Sambuc         b.__parent_ = &root;
589*4684ddb6SLionel Sambuc         b.__left_ = &a;
590*4684ddb6SLionel Sambuc         b.__right_ = &c;
591*4684ddb6SLionel Sambuc         b.__is_black_ = true;
592*4684ddb6SLionel Sambuc 
593*4684ddb6SLionel Sambuc         a.__parent_ = &b;
594*4684ddb6SLionel Sambuc         a.__left_ = 0;
595*4684ddb6SLionel Sambuc         a.__right_ = 0;
596*4684ddb6SLionel Sambuc         a.__is_black_ = true;
597*4684ddb6SLionel Sambuc 
598*4684ddb6SLionel Sambuc         c.__parent_ = &b;
599*4684ddb6SLionel Sambuc         c.__left_ = 0;
600*4684ddb6SLionel Sambuc         c.__right_ = 0;
601*4684ddb6SLionel Sambuc         c.__is_black_ = true;
602*4684ddb6SLionel Sambuc 
603*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
604*4684ddb6SLionel Sambuc 
605*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
606*4684ddb6SLionel Sambuc 
607*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
608*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
609*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
610*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
611*4684ddb6SLionel Sambuc 
612*4684ddb6SLionel Sambuc         assert(a.__parent_ == &c);
613*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
614*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
615*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
616*4684ddb6SLionel Sambuc 
617*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
618*4684ddb6SLionel Sambuc         assert(c.__left_ == &a);
619*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
620*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
621*4684ddb6SLionel Sambuc 
622*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
623*4684ddb6SLionel Sambuc 
624*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
625*4684ddb6SLionel Sambuc 
626*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
627*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
628*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
629*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
630*4684ddb6SLionel Sambuc 
631*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
632*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
633*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
634*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
635*4684ddb6SLionel Sambuc 
636*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
637*4684ddb6SLionel Sambuc 
638*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
639*4684ddb6SLionel Sambuc 
640*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
641*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
642*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
643*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
644*4684ddb6SLionel Sambuc     }
645*4684ddb6SLionel Sambuc     {
646*4684ddb6SLionel Sambuc         Node root;
647*4684ddb6SLionel Sambuc         Node a;
648*4684ddb6SLionel Sambuc         Node b;
649*4684ddb6SLionel Sambuc         Node c;
650*4684ddb6SLionel Sambuc 
651*4684ddb6SLionel Sambuc         root.__left_ = &b;
652*4684ddb6SLionel Sambuc 
653*4684ddb6SLionel Sambuc         b.__parent_ = &root;
654*4684ddb6SLionel Sambuc         b.__left_ = &a;
655*4684ddb6SLionel Sambuc         b.__right_ = &c;
656*4684ddb6SLionel Sambuc         b.__is_black_ = true;
657*4684ddb6SLionel Sambuc 
658*4684ddb6SLionel Sambuc         a.__parent_ = &b;
659*4684ddb6SLionel Sambuc         a.__left_ = 0;
660*4684ddb6SLionel Sambuc         a.__right_ = 0;
661*4684ddb6SLionel Sambuc         a.__is_black_ = false;
662*4684ddb6SLionel Sambuc 
663*4684ddb6SLionel Sambuc         c.__parent_ = &b;
664*4684ddb6SLionel Sambuc         c.__left_ = 0;
665*4684ddb6SLionel Sambuc         c.__right_ = 0;
666*4684ddb6SLionel Sambuc         c.__is_black_ = false;
667*4684ddb6SLionel Sambuc 
668*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
669*4684ddb6SLionel Sambuc 
670*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
671*4684ddb6SLionel Sambuc 
672*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
673*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
674*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
675*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
676*4684ddb6SLionel Sambuc 
677*4684ddb6SLionel Sambuc         assert(a.__parent_ == &c);
678*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
679*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
680*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
681*4684ddb6SLionel Sambuc 
682*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
683*4684ddb6SLionel Sambuc         assert(c.__left_ == &a);
684*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
685*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
686*4684ddb6SLionel Sambuc 
687*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
688*4684ddb6SLionel Sambuc 
689*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
690*4684ddb6SLionel Sambuc 
691*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
692*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
693*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
694*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
695*4684ddb6SLionel Sambuc 
696*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
697*4684ddb6SLionel Sambuc         assert(c.__left_ == 0);
698*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
699*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
700*4684ddb6SLionel Sambuc 
701*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
702*4684ddb6SLionel Sambuc 
703*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
704*4684ddb6SLionel Sambuc 
705*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
706*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
707*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
708*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
709*4684ddb6SLionel Sambuc     }
710*4684ddb6SLionel Sambuc     {
711*4684ddb6SLionel Sambuc         Node root;
712*4684ddb6SLionel Sambuc         Node a;
713*4684ddb6SLionel Sambuc         Node b;
714*4684ddb6SLionel Sambuc         Node c;
715*4684ddb6SLionel Sambuc 
716*4684ddb6SLionel Sambuc         root.__left_ = &b;
717*4684ddb6SLionel Sambuc 
718*4684ddb6SLionel Sambuc         b.__parent_ = &root;
719*4684ddb6SLionel Sambuc         b.__left_ = &a;
720*4684ddb6SLionel Sambuc         b.__right_ = &c;
721*4684ddb6SLionel Sambuc         b.__is_black_ = true;
722*4684ddb6SLionel Sambuc 
723*4684ddb6SLionel Sambuc         a.__parent_ = &b;
724*4684ddb6SLionel Sambuc         a.__left_ = 0;
725*4684ddb6SLionel Sambuc         a.__right_ = 0;
726*4684ddb6SLionel Sambuc         a.__is_black_ = true;
727*4684ddb6SLionel Sambuc 
728*4684ddb6SLionel Sambuc         c.__parent_ = &b;
729*4684ddb6SLionel Sambuc         c.__left_ = 0;
730*4684ddb6SLionel Sambuc         c.__right_ = 0;
731*4684ddb6SLionel Sambuc         c.__is_black_ = true;
732*4684ddb6SLionel Sambuc 
733*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
734*4684ddb6SLionel Sambuc 
735*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
736*4684ddb6SLionel Sambuc 
737*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
738*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
739*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
740*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
741*4684ddb6SLionel Sambuc 
742*4684ddb6SLionel Sambuc         assert(a.__parent_ == &c);
743*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
744*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
745*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
746*4684ddb6SLionel Sambuc 
747*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
748*4684ddb6SLionel Sambuc         assert(c.__left_ == &a);
749*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
750*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
751*4684ddb6SLionel Sambuc 
752*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
753*4684ddb6SLionel Sambuc 
754*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
755*4684ddb6SLionel Sambuc 
756*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
757*4684ddb6SLionel Sambuc         assert(root.__left_ == &a);
758*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
759*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
760*4684ddb6SLionel Sambuc 
761*4684ddb6SLionel Sambuc         assert(a.__parent_ == &root);
762*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
763*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
764*4684ddb6SLionel Sambuc         assert(a.__is_black_ == true);
765*4684ddb6SLionel Sambuc 
766*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
767*4684ddb6SLionel Sambuc 
768*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
769*4684ddb6SLionel Sambuc 
770*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
771*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
772*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
773*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
774*4684ddb6SLionel Sambuc     }
775*4684ddb6SLionel Sambuc     {
776*4684ddb6SLionel Sambuc         Node root;
777*4684ddb6SLionel Sambuc         Node a;
778*4684ddb6SLionel Sambuc         Node b;
779*4684ddb6SLionel Sambuc         Node c;
780*4684ddb6SLionel Sambuc 
781*4684ddb6SLionel Sambuc         root.__left_ = &b;
782*4684ddb6SLionel Sambuc 
783*4684ddb6SLionel Sambuc         b.__parent_ = &root;
784*4684ddb6SLionel Sambuc         b.__left_ = &a;
785*4684ddb6SLionel Sambuc         b.__right_ = &c;
786*4684ddb6SLionel Sambuc         b.__is_black_ = true;
787*4684ddb6SLionel Sambuc 
788*4684ddb6SLionel Sambuc         a.__parent_ = &b;
789*4684ddb6SLionel Sambuc         a.__left_ = 0;
790*4684ddb6SLionel Sambuc         a.__right_ = 0;
791*4684ddb6SLionel Sambuc         a.__is_black_ = false;
792*4684ddb6SLionel Sambuc 
793*4684ddb6SLionel Sambuc         c.__parent_ = &b;
794*4684ddb6SLionel Sambuc         c.__left_ = 0;
795*4684ddb6SLionel Sambuc         c.__right_ = 0;
796*4684ddb6SLionel Sambuc         c.__is_black_ = false;
797*4684ddb6SLionel Sambuc 
798*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
799*4684ddb6SLionel Sambuc 
800*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
801*4684ddb6SLionel Sambuc 
802*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
803*4684ddb6SLionel Sambuc         assert(root.__left_ == &c);
804*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
805*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
806*4684ddb6SLionel Sambuc 
807*4684ddb6SLionel Sambuc         assert(a.__parent_ == &c);
808*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
809*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
810*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
811*4684ddb6SLionel Sambuc 
812*4684ddb6SLionel Sambuc         assert(c.__parent_ == &root);
813*4684ddb6SLionel Sambuc         assert(c.__left_ == &a);
814*4684ddb6SLionel Sambuc         assert(c.__right_ == 0);
815*4684ddb6SLionel Sambuc         assert(c.__is_black_ == true);
816*4684ddb6SLionel Sambuc 
817*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
818*4684ddb6SLionel Sambuc 
819*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
820*4684ddb6SLionel Sambuc 
821*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
822*4684ddb6SLionel Sambuc         assert(root.__left_ == &a);
823*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
824*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
825*4684ddb6SLionel Sambuc 
826*4684ddb6SLionel Sambuc         assert(a.__parent_ == &root);
827*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
828*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
829*4684ddb6SLionel Sambuc         assert(a.__is_black_ == true);
830*4684ddb6SLionel Sambuc 
831*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
832*4684ddb6SLionel Sambuc 
833*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
834*4684ddb6SLionel Sambuc 
835*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
836*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
837*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
838*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
839*4684ddb6SLionel Sambuc     }
840*4684ddb6SLionel Sambuc     {
841*4684ddb6SLionel Sambuc         Node root;
842*4684ddb6SLionel Sambuc         Node a;
843*4684ddb6SLionel Sambuc         Node b;
844*4684ddb6SLionel Sambuc         Node c;
845*4684ddb6SLionel Sambuc 
846*4684ddb6SLionel Sambuc         root.__left_ = &b;
847*4684ddb6SLionel Sambuc 
848*4684ddb6SLionel Sambuc         b.__parent_ = &root;
849*4684ddb6SLionel Sambuc         b.__left_ = &a;
850*4684ddb6SLionel Sambuc         b.__right_ = &c;
851*4684ddb6SLionel Sambuc         b.__is_black_ = true;
852*4684ddb6SLionel Sambuc 
853*4684ddb6SLionel Sambuc         a.__parent_ = &b;
854*4684ddb6SLionel Sambuc         a.__left_ = 0;
855*4684ddb6SLionel Sambuc         a.__right_ = 0;
856*4684ddb6SLionel Sambuc         a.__is_black_ = true;
857*4684ddb6SLionel Sambuc 
858*4684ddb6SLionel Sambuc         c.__parent_ = &b;
859*4684ddb6SLionel Sambuc         c.__left_ = 0;
860*4684ddb6SLionel Sambuc         c.__right_ = 0;
861*4684ddb6SLionel Sambuc         c.__is_black_ = true;
862*4684ddb6SLionel Sambuc 
863*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
864*4684ddb6SLionel Sambuc 
865*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
866*4684ddb6SLionel Sambuc 
867*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
868*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
869*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
870*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
871*4684ddb6SLionel Sambuc 
872*4684ddb6SLionel Sambuc         assert(a.__parent_ == &b);
873*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
874*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
875*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
876*4684ddb6SLionel Sambuc 
877*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
878*4684ddb6SLionel Sambuc         assert(b.__left_ == &a);
879*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
880*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
881*4684ddb6SLionel Sambuc 
882*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
883*4684ddb6SLionel Sambuc 
884*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
885*4684ddb6SLionel Sambuc 
886*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
887*4684ddb6SLionel Sambuc         assert(root.__left_ == &a);
888*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
889*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
890*4684ddb6SLionel Sambuc 
891*4684ddb6SLionel Sambuc         assert(a.__parent_ == &root);
892*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
893*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
894*4684ddb6SLionel Sambuc         assert(a.__is_black_ == true);
895*4684ddb6SLionel Sambuc 
896*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
897*4684ddb6SLionel Sambuc 
898*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
899*4684ddb6SLionel Sambuc 
900*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
901*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
902*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
903*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
904*4684ddb6SLionel Sambuc     }
905*4684ddb6SLionel Sambuc     {
906*4684ddb6SLionel Sambuc         Node root;
907*4684ddb6SLionel Sambuc         Node a;
908*4684ddb6SLionel Sambuc         Node b;
909*4684ddb6SLionel Sambuc         Node c;
910*4684ddb6SLionel Sambuc 
911*4684ddb6SLionel Sambuc         root.__left_ = &b;
912*4684ddb6SLionel Sambuc 
913*4684ddb6SLionel Sambuc         b.__parent_ = &root;
914*4684ddb6SLionel Sambuc         b.__left_ = &a;
915*4684ddb6SLionel Sambuc         b.__right_ = &c;
916*4684ddb6SLionel Sambuc         b.__is_black_ = true;
917*4684ddb6SLionel Sambuc 
918*4684ddb6SLionel Sambuc         a.__parent_ = &b;
919*4684ddb6SLionel Sambuc         a.__left_ = 0;
920*4684ddb6SLionel Sambuc         a.__right_ = 0;
921*4684ddb6SLionel Sambuc         a.__is_black_ = false;
922*4684ddb6SLionel Sambuc 
923*4684ddb6SLionel Sambuc         c.__parent_ = &b;
924*4684ddb6SLionel Sambuc         c.__left_ = 0;
925*4684ddb6SLionel Sambuc         c.__right_ = 0;
926*4684ddb6SLionel Sambuc         c.__is_black_ = false;
927*4684ddb6SLionel Sambuc 
928*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
929*4684ddb6SLionel Sambuc 
930*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
931*4684ddb6SLionel Sambuc 
932*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
933*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
934*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
935*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
936*4684ddb6SLionel Sambuc 
937*4684ddb6SLionel Sambuc         assert(a.__parent_ == &b);
938*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
939*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
940*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
941*4684ddb6SLionel Sambuc 
942*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
943*4684ddb6SLionel Sambuc         assert(b.__left_ == &a);
944*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
945*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
946*4684ddb6SLionel Sambuc 
947*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
948*4684ddb6SLionel Sambuc 
949*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
950*4684ddb6SLionel Sambuc 
951*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
952*4684ddb6SLionel Sambuc         assert(root.__left_ == &a);
953*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
954*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
955*4684ddb6SLionel Sambuc 
956*4684ddb6SLionel Sambuc         assert(a.__parent_ == &root);
957*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
958*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
959*4684ddb6SLionel Sambuc         assert(a.__is_black_ == true);
960*4684ddb6SLionel Sambuc 
961*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
962*4684ddb6SLionel Sambuc 
963*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
964*4684ddb6SLionel Sambuc 
965*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
966*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
967*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
968*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
969*4684ddb6SLionel Sambuc     }
970*4684ddb6SLionel Sambuc     {
971*4684ddb6SLionel Sambuc         Node root;
972*4684ddb6SLionel Sambuc         Node a;
973*4684ddb6SLionel Sambuc         Node b;
974*4684ddb6SLionel Sambuc         Node c;
975*4684ddb6SLionel Sambuc 
976*4684ddb6SLionel Sambuc         root.__left_ = &b;
977*4684ddb6SLionel Sambuc 
978*4684ddb6SLionel Sambuc         b.__parent_ = &root;
979*4684ddb6SLionel Sambuc         b.__left_ = &a;
980*4684ddb6SLionel Sambuc         b.__right_ = &c;
981*4684ddb6SLionel Sambuc         b.__is_black_ = true;
982*4684ddb6SLionel Sambuc 
983*4684ddb6SLionel Sambuc         a.__parent_ = &b;
984*4684ddb6SLionel Sambuc         a.__left_ = 0;
985*4684ddb6SLionel Sambuc         a.__right_ = 0;
986*4684ddb6SLionel Sambuc         a.__is_black_ = true;
987*4684ddb6SLionel Sambuc 
988*4684ddb6SLionel Sambuc         c.__parent_ = &b;
989*4684ddb6SLionel Sambuc         c.__left_ = 0;
990*4684ddb6SLionel Sambuc         c.__right_ = 0;
991*4684ddb6SLionel Sambuc         c.__is_black_ = true;
992*4684ddb6SLionel Sambuc 
993*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
994*4684ddb6SLionel Sambuc 
995*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
996*4684ddb6SLionel Sambuc 
997*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
998*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
999*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
1000*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
1001*4684ddb6SLionel Sambuc 
1002*4684ddb6SLionel Sambuc         assert(a.__parent_ == &b);
1003*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
1004*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
1005*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
1006*4684ddb6SLionel Sambuc 
1007*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
1008*4684ddb6SLionel Sambuc         assert(b.__left_ == &a);
1009*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
1010*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
1011*4684ddb6SLionel Sambuc 
1012*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
1013*4684ddb6SLionel Sambuc 
1014*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
1015*4684ddb6SLionel Sambuc 
1016*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
1017*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
1018*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
1019*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
1020*4684ddb6SLionel Sambuc 
1021*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
1022*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
1023*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
1024*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
1025*4684ddb6SLionel Sambuc 
1026*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
1027*4684ddb6SLionel Sambuc 
1028*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
1029*4684ddb6SLionel Sambuc 
1030*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
1031*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
1032*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
1033*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
1034*4684ddb6SLionel Sambuc     }
1035*4684ddb6SLionel Sambuc     {
1036*4684ddb6SLionel Sambuc         Node root;
1037*4684ddb6SLionel Sambuc         Node a;
1038*4684ddb6SLionel Sambuc         Node b;
1039*4684ddb6SLionel Sambuc         Node c;
1040*4684ddb6SLionel Sambuc 
1041*4684ddb6SLionel Sambuc         root.__left_ = &b;
1042*4684ddb6SLionel Sambuc 
1043*4684ddb6SLionel Sambuc         b.__parent_ = &root;
1044*4684ddb6SLionel Sambuc         b.__left_ = &a;
1045*4684ddb6SLionel Sambuc         b.__right_ = &c;
1046*4684ddb6SLionel Sambuc         b.__is_black_ = true;
1047*4684ddb6SLionel Sambuc 
1048*4684ddb6SLionel Sambuc         a.__parent_ = &b;
1049*4684ddb6SLionel Sambuc         a.__left_ = 0;
1050*4684ddb6SLionel Sambuc         a.__right_ = 0;
1051*4684ddb6SLionel Sambuc         a.__is_black_ = false;
1052*4684ddb6SLionel Sambuc 
1053*4684ddb6SLionel Sambuc         c.__parent_ = &b;
1054*4684ddb6SLionel Sambuc         c.__left_ = 0;
1055*4684ddb6SLionel Sambuc         c.__right_ = 0;
1056*4684ddb6SLionel Sambuc         c.__is_black_ = false;
1057*4684ddb6SLionel Sambuc 
1058*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &c);
1059*4684ddb6SLionel Sambuc 
1060*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
1061*4684ddb6SLionel Sambuc 
1062*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
1063*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
1064*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
1065*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
1066*4684ddb6SLionel Sambuc 
1067*4684ddb6SLionel Sambuc         assert(a.__parent_ == &b);
1068*4684ddb6SLionel Sambuc         assert(a.__left_ == 0);
1069*4684ddb6SLionel Sambuc         assert(a.__right_ == 0);
1070*4684ddb6SLionel Sambuc         assert(a.__is_black_ == false);
1071*4684ddb6SLionel Sambuc 
1072*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
1073*4684ddb6SLionel Sambuc         assert(b.__left_ == &a);
1074*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
1075*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
1076*4684ddb6SLionel Sambuc 
1077*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &a);
1078*4684ddb6SLionel Sambuc 
1079*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
1080*4684ddb6SLionel Sambuc 
1081*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
1082*4684ddb6SLionel Sambuc         assert(root.__left_ == &b);
1083*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
1084*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
1085*4684ddb6SLionel Sambuc 
1086*4684ddb6SLionel Sambuc         assert(b.__parent_ == &root);
1087*4684ddb6SLionel Sambuc         assert(b.__left_ == 0);
1088*4684ddb6SLionel Sambuc         assert(b.__right_ == 0);
1089*4684ddb6SLionel Sambuc         assert(b.__is_black_ == true);
1090*4684ddb6SLionel Sambuc 
1091*4684ddb6SLionel Sambuc         std::__tree_remove(root.__left_, &b);
1092*4684ddb6SLionel Sambuc 
1093*4684ddb6SLionel Sambuc         assert(std::__tree_invariant(root.__left_));
1094*4684ddb6SLionel Sambuc 
1095*4684ddb6SLionel Sambuc         assert(root.__parent_ == 0);
1096*4684ddb6SLionel Sambuc         assert(root.__left_ == 0);
1097*4684ddb6SLionel Sambuc         assert(root.__right_ == 0);
1098*4684ddb6SLionel Sambuc         assert(root.__is_black_ == false);
1099*4684ddb6SLionel Sambuc     }
1100*4684ddb6SLionel Sambuc }
1101*4684ddb6SLionel Sambuc 
1102*4684ddb6SLionel Sambuc void
test3()1103*4684ddb6SLionel Sambuc test3()
1104*4684ddb6SLionel Sambuc {
1105*4684ddb6SLionel Sambuc     Node root;
1106*4684ddb6SLionel Sambuc     Node a;
1107*4684ddb6SLionel Sambuc     Node b;
1108*4684ddb6SLionel Sambuc     Node c;
1109*4684ddb6SLionel Sambuc     Node d;
1110*4684ddb6SLionel Sambuc     Node e;
1111*4684ddb6SLionel Sambuc     Node f;
1112*4684ddb6SLionel Sambuc     Node g;
1113*4684ddb6SLionel Sambuc     Node h;
1114*4684ddb6SLionel Sambuc 
1115*4684ddb6SLionel Sambuc     root.__left_ = &e;
1116*4684ddb6SLionel Sambuc 
1117*4684ddb6SLionel Sambuc     e.__parent_ = &root;
1118*4684ddb6SLionel Sambuc     e.__left_ = &c;
1119*4684ddb6SLionel Sambuc     e.__right_ = &g;
1120*4684ddb6SLionel Sambuc     e.__is_black_ = true;
1121*4684ddb6SLionel Sambuc 
1122*4684ddb6SLionel Sambuc     c.__parent_ = &e;
1123*4684ddb6SLionel Sambuc     c.__left_ = &b;
1124*4684ddb6SLionel Sambuc     c.__right_ = &d;
1125*4684ddb6SLionel Sambuc     c.__is_black_ = false;
1126*4684ddb6SLionel Sambuc 
1127*4684ddb6SLionel Sambuc     g.__parent_ = &e;
1128*4684ddb6SLionel Sambuc     g.__left_ = &f;
1129*4684ddb6SLionel Sambuc     g.__right_ = &h;
1130*4684ddb6SLionel Sambuc     g.__is_black_ = false;
1131*4684ddb6SLionel Sambuc 
1132*4684ddb6SLionel Sambuc     b.__parent_ = &c;
1133*4684ddb6SLionel Sambuc     b.__left_ = &a;
1134*4684ddb6SLionel Sambuc     b.__right_ = 0;
1135*4684ddb6SLionel Sambuc     b.__is_black_ = true;
1136*4684ddb6SLionel Sambuc 
1137*4684ddb6SLionel Sambuc     d.__parent_ = &c;
1138*4684ddb6SLionel Sambuc     d.__left_ = 0;
1139*4684ddb6SLionel Sambuc     d.__right_ = 0;
1140*4684ddb6SLionel Sambuc     d.__is_black_ = true;
1141*4684ddb6SLionel Sambuc 
1142*4684ddb6SLionel Sambuc     f.__parent_ = &g;
1143*4684ddb6SLionel Sambuc     f.__left_ = 0;
1144*4684ddb6SLionel Sambuc     f.__right_ = 0;
1145*4684ddb6SLionel Sambuc     f.__is_black_ = true;
1146*4684ddb6SLionel Sambuc 
1147*4684ddb6SLionel Sambuc     h.__parent_ = &g;
1148*4684ddb6SLionel Sambuc     h.__left_ = 0;
1149*4684ddb6SLionel Sambuc     h.__right_ = 0;
1150*4684ddb6SLionel Sambuc     h.__is_black_ = true;
1151*4684ddb6SLionel Sambuc 
1152*4684ddb6SLionel Sambuc     a.__parent_ = &b;
1153*4684ddb6SLionel Sambuc     a.__left_ = 0;
1154*4684ddb6SLionel Sambuc     a.__right_ = 0;
1155*4684ddb6SLionel Sambuc     a.__is_black_ = false;
1156*4684ddb6SLionel Sambuc 
1157*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1158*4684ddb6SLionel Sambuc 
1159*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &h);
1160*4684ddb6SLionel Sambuc 
1161*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1162*4684ddb6SLionel Sambuc 
1163*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1164*4684ddb6SLionel Sambuc     assert(root.__left_ == &e);
1165*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1166*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1167*4684ddb6SLionel Sambuc 
1168*4684ddb6SLionel Sambuc     assert(e.__parent_ == &root);
1169*4684ddb6SLionel Sambuc     assert(e.__left_ == &c);
1170*4684ddb6SLionel Sambuc     assert(e.__right_ == &g);
1171*4684ddb6SLionel Sambuc     assert(e.__is_black_ == true);
1172*4684ddb6SLionel Sambuc 
1173*4684ddb6SLionel Sambuc     assert(c.__parent_ == &e);
1174*4684ddb6SLionel Sambuc     assert(c.__left_ == &b);
1175*4684ddb6SLionel Sambuc     assert(c.__right_ == &d);
1176*4684ddb6SLionel Sambuc     assert(c.__is_black_ == false);
1177*4684ddb6SLionel Sambuc 
1178*4684ddb6SLionel Sambuc     assert(g.__parent_ == &e);
1179*4684ddb6SLionel Sambuc     assert(g.__left_ == &f);
1180*4684ddb6SLionel Sambuc     assert(g.__right_ == 0);
1181*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1182*4684ddb6SLionel Sambuc 
1183*4684ddb6SLionel Sambuc     assert(b.__parent_ == &c);
1184*4684ddb6SLionel Sambuc     assert(b.__left_ == &a);
1185*4684ddb6SLionel Sambuc     assert(b.__right_ == 0);
1186*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1187*4684ddb6SLionel Sambuc 
1188*4684ddb6SLionel Sambuc     assert(a.__parent_ == &b);
1189*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1190*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1191*4684ddb6SLionel Sambuc     assert(a.__is_black_ == false);
1192*4684ddb6SLionel Sambuc 
1193*4684ddb6SLionel Sambuc     assert(d.__parent_ == &c);
1194*4684ddb6SLionel Sambuc     assert(d.__left_ == 0);
1195*4684ddb6SLionel Sambuc     assert(d.__right_ == 0);
1196*4684ddb6SLionel Sambuc     assert(d.__is_black_ == true);
1197*4684ddb6SLionel Sambuc 
1198*4684ddb6SLionel Sambuc     assert(f.__parent_ == &g);
1199*4684ddb6SLionel Sambuc     assert(f.__left_ == 0);
1200*4684ddb6SLionel Sambuc     assert(f.__right_ == 0);
1201*4684ddb6SLionel Sambuc     assert(f.__is_black_ == false);
1202*4684ddb6SLionel Sambuc 
1203*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &g);
1204*4684ddb6SLionel Sambuc 
1205*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1206*4684ddb6SLionel Sambuc 
1207*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1208*4684ddb6SLionel Sambuc     assert(root.__left_ == &e);
1209*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1210*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1211*4684ddb6SLionel Sambuc 
1212*4684ddb6SLionel Sambuc     assert(e.__parent_ == &root);
1213*4684ddb6SLionel Sambuc     assert(e.__left_ == &c);
1214*4684ddb6SLionel Sambuc     assert(e.__right_ == &f);
1215*4684ddb6SLionel Sambuc     assert(e.__is_black_ == true);
1216*4684ddb6SLionel Sambuc 
1217*4684ddb6SLionel Sambuc     assert(c.__parent_ == &e);
1218*4684ddb6SLionel Sambuc     assert(c.__left_ == &b);
1219*4684ddb6SLionel Sambuc     assert(c.__right_ == &d);
1220*4684ddb6SLionel Sambuc     assert(c.__is_black_ == false);
1221*4684ddb6SLionel Sambuc 
1222*4684ddb6SLionel Sambuc     assert(b.__parent_ == &c);
1223*4684ddb6SLionel Sambuc     assert(b.__left_ == &a);
1224*4684ddb6SLionel Sambuc     assert(b.__right_ == 0);
1225*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1226*4684ddb6SLionel Sambuc 
1227*4684ddb6SLionel Sambuc     assert(a.__parent_ == &b);
1228*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1229*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1230*4684ddb6SLionel Sambuc     assert(a.__is_black_ == false);
1231*4684ddb6SLionel Sambuc 
1232*4684ddb6SLionel Sambuc     assert(d.__parent_ == &c);
1233*4684ddb6SLionel Sambuc     assert(d.__left_ == 0);
1234*4684ddb6SLionel Sambuc     assert(d.__right_ == 0);
1235*4684ddb6SLionel Sambuc     assert(d.__is_black_ == true);
1236*4684ddb6SLionel Sambuc 
1237*4684ddb6SLionel Sambuc     assert(f.__parent_ == &e);
1238*4684ddb6SLionel Sambuc     assert(f.__left_ == 0);
1239*4684ddb6SLionel Sambuc     assert(f.__right_ == 0);
1240*4684ddb6SLionel Sambuc     assert(f.__is_black_ == true);
1241*4684ddb6SLionel Sambuc 
1242*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &f);
1243*4684ddb6SLionel Sambuc 
1244*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1245*4684ddb6SLionel Sambuc 
1246*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1247*4684ddb6SLionel Sambuc     assert(root.__left_ == &c);
1248*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1249*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1250*4684ddb6SLionel Sambuc 
1251*4684ddb6SLionel Sambuc     assert(c.__parent_ == &root);
1252*4684ddb6SLionel Sambuc     assert(c.__left_ == &b);
1253*4684ddb6SLionel Sambuc     assert(c.__right_ == &e);
1254*4684ddb6SLionel Sambuc     assert(c.__is_black_ == true);
1255*4684ddb6SLionel Sambuc 
1256*4684ddb6SLionel Sambuc     assert(b.__parent_ == &c);
1257*4684ddb6SLionel Sambuc     assert(b.__left_ == &a);
1258*4684ddb6SLionel Sambuc     assert(b.__right_ == 0);
1259*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1260*4684ddb6SLionel Sambuc 
1261*4684ddb6SLionel Sambuc     assert(e.__parent_ == &c);
1262*4684ddb6SLionel Sambuc     assert(e.__left_ == &d);
1263*4684ddb6SLionel Sambuc     assert(e.__right_ == 0);
1264*4684ddb6SLionel Sambuc     assert(e.__is_black_ == true);
1265*4684ddb6SLionel Sambuc 
1266*4684ddb6SLionel Sambuc     assert(a.__parent_ == &b);
1267*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1268*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1269*4684ddb6SLionel Sambuc     assert(a.__is_black_ == false);
1270*4684ddb6SLionel Sambuc 
1271*4684ddb6SLionel Sambuc     assert(d.__parent_ == &e);
1272*4684ddb6SLionel Sambuc     assert(d.__left_ == 0);
1273*4684ddb6SLionel Sambuc     assert(d.__right_ == 0);
1274*4684ddb6SLionel Sambuc     assert(d.__is_black_ == false);
1275*4684ddb6SLionel Sambuc 
1276*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &e);
1277*4684ddb6SLionel Sambuc 
1278*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1279*4684ddb6SLionel Sambuc 
1280*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1281*4684ddb6SLionel Sambuc     assert(root.__left_ == &c);
1282*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1283*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1284*4684ddb6SLionel Sambuc 
1285*4684ddb6SLionel Sambuc     assert(c.__parent_ == &root);
1286*4684ddb6SLionel Sambuc     assert(c.__left_ == &b);
1287*4684ddb6SLionel Sambuc     assert(c.__right_ == &d);
1288*4684ddb6SLionel Sambuc     assert(c.__is_black_ == true);
1289*4684ddb6SLionel Sambuc 
1290*4684ddb6SLionel Sambuc     assert(b.__parent_ == &c);
1291*4684ddb6SLionel Sambuc     assert(b.__left_ == &a);
1292*4684ddb6SLionel Sambuc     assert(b.__right_ == 0);
1293*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1294*4684ddb6SLionel Sambuc 
1295*4684ddb6SLionel Sambuc     assert(a.__parent_ == &b);
1296*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1297*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1298*4684ddb6SLionel Sambuc     assert(a.__is_black_ == false);
1299*4684ddb6SLionel Sambuc 
1300*4684ddb6SLionel Sambuc     assert(d.__parent_ == &c);
1301*4684ddb6SLionel Sambuc     assert(d.__left_ == 0);
1302*4684ddb6SLionel Sambuc     assert(d.__right_ == 0);
1303*4684ddb6SLionel Sambuc     assert(d.__is_black_ == true);
1304*4684ddb6SLionel Sambuc 
1305*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &d);
1306*4684ddb6SLionel Sambuc 
1307*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1308*4684ddb6SLionel Sambuc 
1309*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1310*4684ddb6SLionel Sambuc     assert(root.__left_ == &b);
1311*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1312*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1313*4684ddb6SLionel Sambuc 
1314*4684ddb6SLionel Sambuc     assert(b.__parent_ == &root);
1315*4684ddb6SLionel Sambuc     assert(b.__left_ == &a);
1316*4684ddb6SLionel Sambuc     assert(b.__right_ == &c);
1317*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1318*4684ddb6SLionel Sambuc 
1319*4684ddb6SLionel Sambuc     assert(a.__parent_ == &b);
1320*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1321*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1322*4684ddb6SLionel Sambuc     assert(a.__is_black_ == true);
1323*4684ddb6SLionel Sambuc 
1324*4684ddb6SLionel Sambuc     assert(c.__parent_ == &b);
1325*4684ddb6SLionel Sambuc     assert(c.__left_ == 0);
1326*4684ddb6SLionel Sambuc     assert(c.__right_ == 0);
1327*4684ddb6SLionel Sambuc     assert(c.__is_black_ == true);
1328*4684ddb6SLionel Sambuc 
1329*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &c);
1330*4684ddb6SLionel Sambuc 
1331*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1332*4684ddb6SLionel Sambuc 
1333*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1334*4684ddb6SLionel Sambuc     assert(root.__left_ == &b);
1335*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1336*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1337*4684ddb6SLionel Sambuc 
1338*4684ddb6SLionel Sambuc     assert(b.__parent_ == &root);
1339*4684ddb6SLionel Sambuc     assert(b.__left_ == &a);
1340*4684ddb6SLionel Sambuc     assert(b.__right_ == 0);
1341*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1342*4684ddb6SLionel Sambuc 
1343*4684ddb6SLionel Sambuc     assert(a.__parent_ == &b);
1344*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1345*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1346*4684ddb6SLionel Sambuc     assert(a.__is_black_ == false);
1347*4684ddb6SLionel Sambuc 
1348*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &b);
1349*4684ddb6SLionel Sambuc 
1350*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1351*4684ddb6SLionel Sambuc 
1352*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1353*4684ddb6SLionel Sambuc     assert(root.__left_ == &a);
1354*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1355*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1356*4684ddb6SLionel Sambuc 
1357*4684ddb6SLionel Sambuc     assert(a.__parent_ == &root);
1358*4684ddb6SLionel Sambuc     assert(a.__left_ == 0);
1359*4684ddb6SLionel Sambuc     assert(a.__right_ == 0);
1360*4684ddb6SLionel Sambuc     assert(a.__is_black_ == true);
1361*4684ddb6SLionel Sambuc 
1362*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &a);
1363*4684ddb6SLionel Sambuc 
1364*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1365*4684ddb6SLionel Sambuc 
1366*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1367*4684ddb6SLionel Sambuc     assert(root.__left_ == 0);
1368*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1369*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1370*4684ddb6SLionel Sambuc }
1371*4684ddb6SLionel Sambuc 
1372*4684ddb6SLionel Sambuc void
test4()1373*4684ddb6SLionel Sambuc test4()
1374*4684ddb6SLionel Sambuc {
1375*4684ddb6SLionel Sambuc     Node root;
1376*4684ddb6SLionel Sambuc     Node a;
1377*4684ddb6SLionel Sambuc     Node b;
1378*4684ddb6SLionel Sambuc     Node c;
1379*4684ddb6SLionel Sambuc     Node d;
1380*4684ddb6SLionel Sambuc     Node e;
1381*4684ddb6SLionel Sambuc     Node f;
1382*4684ddb6SLionel Sambuc     Node g;
1383*4684ddb6SLionel Sambuc     Node h;
1384*4684ddb6SLionel Sambuc 
1385*4684ddb6SLionel Sambuc     root.__left_ = &d;
1386*4684ddb6SLionel Sambuc 
1387*4684ddb6SLionel Sambuc     d.__parent_ = &root;
1388*4684ddb6SLionel Sambuc     d.__left_ = &b;
1389*4684ddb6SLionel Sambuc     d.__right_ = &f;
1390*4684ddb6SLionel Sambuc     d.__is_black_ = true;
1391*4684ddb6SLionel Sambuc 
1392*4684ddb6SLionel Sambuc     b.__parent_ = &d;
1393*4684ddb6SLionel Sambuc     b.__left_ = &a;
1394*4684ddb6SLionel Sambuc     b.__right_ = &c;
1395*4684ddb6SLionel Sambuc     b.__is_black_ = false;
1396*4684ddb6SLionel Sambuc 
1397*4684ddb6SLionel Sambuc     f.__parent_ = &d;
1398*4684ddb6SLionel Sambuc     f.__left_ = &e;
1399*4684ddb6SLionel Sambuc     f.__right_ = &g;
1400*4684ddb6SLionel Sambuc     f.__is_black_ = false;
1401*4684ddb6SLionel Sambuc 
1402*4684ddb6SLionel Sambuc     a.__parent_ = &b;
1403*4684ddb6SLionel Sambuc     a.__left_ = 0;
1404*4684ddb6SLionel Sambuc     a.__right_ = 0;
1405*4684ddb6SLionel Sambuc     a.__is_black_ = true;
1406*4684ddb6SLionel Sambuc 
1407*4684ddb6SLionel Sambuc     c.__parent_ = &b;
1408*4684ddb6SLionel Sambuc     c.__left_ = 0;
1409*4684ddb6SLionel Sambuc     c.__right_ = 0;
1410*4684ddb6SLionel Sambuc     c.__is_black_ = true;
1411*4684ddb6SLionel Sambuc 
1412*4684ddb6SLionel Sambuc     e.__parent_ = &f;
1413*4684ddb6SLionel Sambuc     e.__left_ = 0;
1414*4684ddb6SLionel Sambuc     e.__right_ = 0;
1415*4684ddb6SLionel Sambuc     e.__is_black_ = true;
1416*4684ddb6SLionel Sambuc 
1417*4684ddb6SLionel Sambuc     g.__parent_ = &f;
1418*4684ddb6SLionel Sambuc     g.__left_ = 0;
1419*4684ddb6SLionel Sambuc     g.__right_ = &h;
1420*4684ddb6SLionel Sambuc     g.__is_black_ = true;
1421*4684ddb6SLionel Sambuc 
1422*4684ddb6SLionel Sambuc     h.__parent_ = &g;
1423*4684ddb6SLionel Sambuc     h.__left_ = 0;
1424*4684ddb6SLionel Sambuc     h.__right_ = 0;
1425*4684ddb6SLionel Sambuc     h.__is_black_ = false;
1426*4684ddb6SLionel Sambuc 
1427*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1428*4684ddb6SLionel Sambuc 
1429*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &a);
1430*4684ddb6SLionel Sambuc 
1431*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1432*4684ddb6SLionel Sambuc 
1433*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1434*4684ddb6SLionel Sambuc     assert(root.__left_ == &d);
1435*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1436*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1437*4684ddb6SLionel Sambuc 
1438*4684ddb6SLionel Sambuc     assert(d.__parent_ == &root);
1439*4684ddb6SLionel Sambuc     assert(d.__left_ == &b);
1440*4684ddb6SLionel Sambuc     assert(d.__right_ == &f);
1441*4684ddb6SLionel Sambuc     assert(d.__is_black_ == true);
1442*4684ddb6SLionel Sambuc 
1443*4684ddb6SLionel Sambuc     assert(b.__parent_ == &d);
1444*4684ddb6SLionel Sambuc     assert(b.__left_ == 0);
1445*4684ddb6SLionel Sambuc     assert(b.__right_ == &c);
1446*4684ddb6SLionel Sambuc     assert(b.__is_black_ == true);
1447*4684ddb6SLionel Sambuc 
1448*4684ddb6SLionel Sambuc     assert(f.__parent_ == &d);
1449*4684ddb6SLionel Sambuc     assert(f.__left_ == &e);
1450*4684ddb6SLionel Sambuc     assert(f.__right_ == &g);
1451*4684ddb6SLionel Sambuc     assert(f.__is_black_ == false);
1452*4684ddb6SLionel Sambuc 
1453*4684ddb6SLionel Sambuc     assert(c.__parent_ == &b);
1454*4684ddb6SLionel Sambuc     assert(c.__left_ == 0);
1455*4684ddb6SLionel Sambuc     assert(c.__right_ == 0);
1456*4684ddb6SLionel Sambuc     assert(c.__is_black_ == false);
1457*4684ddb6SLionel Sambuc 
1458*4684ddb6SLionel Sambuc     assert(e.__parent_ == &f);
1459*4684ddb6SLionel Sambuc     assert(e.__left_ == 0);
1460*4684ddb6SLionel Sambuc     assert(e.__right_ == 0);
1461*4684ddb6SLionel Sambuc     assert(e.__is_black_ == true);
1462*4684ddb6SLionel Sambuc 
1463*4684ddb6SLionel Sambuc     assert(g.__parent_ == &f);
1464*4684ddb6SLionel Sambuc     assert(g.__left_ == 0);
1465*4684ddb6SLionel Sambuc     assert(g.__right_ == &h);
1466*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1467*4684ddb6SLionel Sambuc 
1468*4684ddb6SLionel Sambuc     assert(h.__parent_ == &g);
1469*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1470*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1471*4684ddb6SLionel Sambuc     assert(h.__is_black_ == false);
1472*4684ddb6SLionel Sambuc 
1473*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &b);
1474*4684ddb6SLionel Sambuc 
1475*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1476*4684ddb6SLionel Sambuc 
1477*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1478*4684ddb6SLionel Sambuc     assert(root.__left_ == &d);
1479*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1480*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1481*4684ddb6SLionel Sambuc 
1482*4684ddb6SLionel Sambuc     assert(d.__parent_ == &root);
1483*4684ddb6SLionel Sambuc     assert(d.__left_ == &c);
1484*4684ddb6SLionel Sambuc     assert(d.__right_ == &f);
1485*4684ddb6SLionel Sambuc     assert(d.__is_black_ == true);
1486*4684ddb6SLionel Sambuc 
1487*4684ddb6SLionel Sambuc     assert(c.__parent_ == &d);
1488*4684ddb6SLionel Sambuc     assert(c.__left_ == 0);
1489*4684ddb6SLionel Sambuc     assert(c.__right_ == 0);
1490*4684ddb6SLionel Sambuc     assert(c.__is_black_ == true);
1491*4684ddb6SLionel Sambuc 
1492*4684ddb6SLionel Sambuc     assert(f.__parent_ == &d);
1493*4684ddb6SLionel Sambuc     assert(f.__left_ == &e);
1494*4684ddb6SLionel Sambuc     assert(f.__right_ == &g);
1495*4684ddb6SLionel Sambuc     assert(f.__is_black_ == false);
1496*4684ddb6SLionel Sambuc 
1497*4684ddb6SLionel Sambuc     assert(e.__parent_ == &f);
1498*4684ddb6SLionel Sambuc     assert(e.__left_ == 0);
1499*4684ddb6SLionel Sambuc     assert(e.__right_ == 0);
1500*4684ddb6SLionel Sambuc     assert(e.__is_black_ == true);
1501*4684ddb6SLionel Sambuc 
1502*4684ddb6SLionel Sambuc     assert(g.__parent_ == &f);
1503*4684ddb6SLionel Sambuc     assert(g.__left_ == 0);
1504*4684ddb6SLionel Sambuc     assert(g.__right_ == &h);
1505*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1506*4684ddb6SLionel Sambuc 
1507*4684ddb6SLionel Sambuc     assert(h.__parent_ == &g);
1508*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1509*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1510*4684ddb6SLionel Sambuc     assert(h.__is_black_ == false);
1511*4684ddb6SLionel Sambuc 
1512*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &c);
1513*4684ddb6SLionel Sambuc 
1514*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1515*4684ddb6SLionel Sambuc 
1516*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1517*4684ddb6SLionel Sambuc     assert(root.__left_ == &f);
1518*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1519*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1520*4684ddb6SLionel Sambuc 
1521*4684ddb6SLionel Sambuc     assert(f.__parent_ == &root);
1522*4684ddb6SLionel Sambuc     assert(f.__left_ == &d);
1523*4684ddb6SLionel Sambuc     assert(f.__right_ == &g);
1524*4684ddb6SLionel Sambuc     assert(f.__is_black_ == true);
1525*4684ddb6SLionel Sambuc 
1526*4684ddb6SLionel Sambuc     assert(d.__parent_ == &f);
1527*4684ddb6SLionel Sambuc     assert(d.__left_ == 0);
1528*4684ddb6SLionel Sambuc     assert(d.__right_ == &e);
1529*4684ddb6SLionel Sambuc     assert(d.__is_black_ == true);
1530*4684ddb6SLionel Sambuc 
1531*4684ddb6SLionel Sambuc     assert(g.__parent_ == &f);
1532*4684ddb6SLionel Sambuc     assert(g.__left_ == 0);
1533*4684ddb6SLionel Sambuc     assert(g.__right_ == &h);
1534*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1535*4684ddb6SLionel Sambuc 
1536*4684ddb6SLionel Sambuc     assert(e.__parent_ == &d);
1537*4684ddb6SLionel Sambuc     assert(e.__left_ == 0);
1538*4684ddb6SLionel Sambuc     assert(e.__right_ == 0);
1539*4684ddb6SLionel Sambuc     assert(e.__is_black_ == false);
1540*4684ddb6SLionel Sambuc 
1541*4684ddb6SLionel Sambuc     assert(h.__parent_ == &g);
1542*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1543*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1544*4684ddb6SLionel Sambuc     assert(h.__is_black_ == false);
1545*4684ddb6SLionel Sambuc 
1546*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &d);
1547*4684ddb6SLionel Sambuc 
1548*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1549*4684ddb6SLionel Sambuc 
1550*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1551*4684ddb6SLionel Sambuc     assert(root.__left_ == &f);
1552*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1553*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1554*4684ddb6SLionel Sambuc 
1555*4684ddb6SLionel Sambuc     assert(f.__parent_ == &root);
1556*4684ddb6SLionel Sambuc     assert(f.__left_ == &e);
1557*4684ddb6SLionel Sambuc     assert(f.__right_ == &g);
1558*4684ddb6SLionel Sambuc     assert(f.__is_black_ == true);
1559*4684ddb6SLionel Sambuc 
1560*4684ddb6SLionel Sambuc     assert(e.__parent_ == &f);
1561*4684ddb6SLionel Sambuc     assert(e.__left_ == 0);
1562*4684ddb6SLionel Sambuc     assert(e.__right_ == 0);
1563*4684ddb6SLionel Sambuc     assert(e.__is_black_ == true);
1564*4684ddb6SLionel Sambuc 
1565*4684ddb6SLionel Sambuc     assert(g.__parent_ == &f);
1566*4684ddb6SLionel Sambuc     assert(g.__left_ == 0);
1567*4684ddb6SLionel Sambuc     assert(g.__right_ == &h);
1568*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1569*4684ddb6SLionel Sambuc 
1570*4684ddb6SLionel Sambuc     assert(h.__parent_ == &g);
1571*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1572*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1573*4684ddb6SLionel Sambuc     assert(h.__is_black_ == false);
1574*4684ddb6SLionel Sambuc 
1575*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &e);
1576*4684ddb6SLionel Sambuc 
1577*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1578*4684ddb6SLionel Sambuc 
1579*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1580*4684ddb6SLionel Sambuc     assert(root.__left_ == &g);
1581*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1582*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1583*4684ddb6SLionel Sambuc 
1584*4684ddb6SLionel Sambuc     assert(g.__parent_ == &root);
1585*4684ddb6SLionel Sambuc     assert(g.__left_ == &f);
1586*4684ddb6SLionel Sambuc     assert(g.__right_ == &h);
1587*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1588*4684ddb6SLionel Sambuc 
1589*4684ddb6SLionel Sambuc     assert(f.__parent_ == &g);
1590*4684ddb6SLionel Sambuc     assert(f.__left_ == 0);
1591*4684ddb6SLionel Sambuc     assert(f.__right_ == 0);
1592*4684ddb6SLionel Sambuc     assert(f.__is_black_ == true);
1593*4684ddb6SLionel Sambuc 
1594*4684ddb6SLionel Sambuc     assert(h.__parent_ == &g);
1595*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1596*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1597*4684ddb6SLionel Sambuc     assert(h.__is_black_ == true);
1598*4684ddb6SLionel Sambuc 
1599*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &f);
1600*4684ddb6SLionel Sambuc 
1601*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1602*4684ddb6SLionel Sambuc 
1603*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1604*4684ddb6SLionel Sambuc     assert(root.__left_ == &g);
1605*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1606*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1607*4684ddb6SLionel Sambuc 
1608*4684ddb6SLionel Sambuc     assert(g.__parent_ == &root);
1609*4684ddb6SLionel Sambuc     assert(g.__left_ == 0);
1610*4684ddb6SLionel Sambuc     assert(g.__right_ == &h);
1611*4684ddb6SLionel Sambuc     assert(g.__is_black_ == true);
1612*4684ddb6SLionel Sambuc 
1613*4684ddb6SLionel Sambuc     assert(h.__parent_ == &g);
1614*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1615*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1616*4684ddb6SLionel Sambuc     assert(h.__is_black_ == false);
1617*4684ddb6SLionel Sambuc 
1618*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &g);
1619*4684ddb6SLionel Sambuc 
1620*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1621*4684ddb6SLionel Sambuc 
1622*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1623*4684ddb6SLionel Sambuc     assert(root.__left_ == &h);
1624*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1625*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1626*4684ddb6SLionel Sambuc 
1627*4684ddb6SLionel Sambuc     assert(h.__parent_ == &root);
1628*4684ddb6SLionel Sambuc     assert(h.__left_ == 0);
1629*4684ddb6SLionel Sambuc     assert(h.__right_ == 0);
1630*4684ddb6SLionel Sambuc     assert(h.__is_black_ == true);
1631*4684ddb6SLionel Sambuc 
1632*4684ddb6SLionel Sambuc     std::__tree_remove(root.__left_, &h);
1633*4684ddb6SLionel Sambuc 
1634*4684ddb6SLionel Sambuc     assert(std::__tree_invariant(root.__left_));
1635*4684ddb6SLionel Sambuc 
1636*4684ddb6SLionel Sambuc     assert(root.__parent_ == 0);
1637*4684ddb6SLionel Sambuc     assert(root.__left_ == 0);
1638*4684ddb6SLionel Sambuc     assert(root.__right_ == 0);
1639*4684ddb6SLionel Sambuc     assert(root.__is_black_ == false);
1640*4684ddb6SLionel Sambuc }
1641*4684ddb6SLionel Sambuc 
main()1642*4684ddb6SLionel Sambuc int main()
1643*4684ddb6SLionel Sambuc {
1644*4684ddb6SLionel Sambuc     test1();
1645*4684ddb6SLionel Sambuc     test2();
1646*4684ddb6SLionel Sambuc     test3();
1647*4684ddb6SLionel Sambuc     test4();
1648*4684ddb6SLionel Sambuc }
1649