1 ;;; Manually constructed tests for red-black trees.
3 :;;;-------------------------------------------------------------------------
7 :;; Starting point for the following tests.
20 :;; Children of a black node.
29 ;; ( ) ( ) ---> (*) (*)
30 ;; c / \ / \ c / \ / \
34 V:XYLA-RB INSERT red sibling: ascend
35 V:XYLA-RB INSERT red sibling: extend tree
48 V:XYLA-RB INSERT zig-zig (left child)
51 V:XYLA-RB INSERT zig-zig (right child)
64 V:XYLA-RB INSERT zig-zag (left child)
67 V:XYLA-RB INSERT zig-zag (right child)
71 :;;;-------------------------------------------------------------------------
74 ;; There are too many cases here.
103 :;; Red sibling, outer red great-nibling.
107 ;; (* *) ( ) ---> ( )
114 V:XYLA-RB REMOVE red sibling, outer red great-nibling (right child)
117 V:XYLA-RB REMOVE red sibling, outer red great-nibling (left child)
121 :;; Red sibling, inner red great-nibling.
125 ;; (* *) ( ) ---> ( )
132 V:XYLA-RB REMOVE red sibling, inner red great-nibling (right child)
135 V:XYLA-RB REMOVE red sibling, inner red great-nibling (left child)
139 :;; Red sibling, no red great-nibling.
143 ;; (* *) ( ) ---> (*)
148 V:XYLA-RB REMOVE red sibling, no red great-nibling (right child)
150 " 20k- 24k- D V- 16k-
151 V:XYLA-RB REMOVE red sibling, no red great-nibling (left child)
155 :;; Black sibling, outer red nibling.
159 ;; (* *) (*) ---> (*) (*)
160 ;; / \ / \ r n / \ / \
164 V:XYLA-RB REMOVE black sibling, outer red nibling (left child)
167 V:XYLA-RB REMOVE black sibling, outer red nibling (right child)
171 :;; Black sibling, inner red nibling.
175 ;; (* *) (*) ---> (*) (*)
176 ;; / \ l / \ n / \ / \
180 V:XYLA-RB REMOVE black sibling, inner red nibling (left child)
183 V:XYLA-RB REMOVE black sibling, inner red nibling (right child)
187 :;; Black sibling, red parent, no red nibling.
191 ;; (* *) (*) ---> (*) ( )
194 V:XYLA-RB REMOVE black sibling, red parent, no red nibling (left child)
196 " 20k- 24k- D V- 28k-
197 V:XYLA-RB REMOVE black sibling, red parent, no red nibling (right child)
201 :;; Black sibling, black parent, no red nibling.
205 ;; (* *) (*) ---> (*) ( )
207 " 4k- 8k- 0k- 6k- 20k- 24k- 16k- 28k- D
209 V:XYLA-RB REMOVE black sibling, black parent, no red nibling (right child)
210 V:XYLA-RB REMOVE black sibling, black parent, no red nibling (left child)
211 V:XYLA-RB REMOVE shorten tree
214 V:XYLA-RB REMOVE black sibling, black parent, no red nibling (left child)
215 V:XYLA-RB REMOVE black sibling, black parent, no red nibling (right child)
216 V:XYLA-RB REMOVE shorten tree
220 :;;;-------------------------------------------------------------------------
225 =_ #6 D ( #13-8 D V~ 7k~
226 V:XYLA-RB JOIN equal heights
231 =_ #8 D ( 10+ D V~ 9k~
232 V:XYLA-RB JOIN red sibling (right child): extend tree
234 =_ 1+ D ( #10-3 D V~ 2k~
235 V:XYLA-RB JOIN red sibling (left child): extend tree
238 =_ #12 D ( 14+ D V~ 13k~
239 V:XYLA-RB JOIN red sibling (right child): ascend
241 =_ 1+ D ( #12-3 D V~ 2k~
242 V:XYLA-RB JOIN no red sibling (left child)
247 =_ # 7 D ( 9+ D V~ 8k~
248 V:XYLA-RB JOIN no red sibling (right child)
250 =_ 1+ D ( #9-3 D V~ 2k~
251 V:XYLA-RB JOIN no red sibling (left child)
255 :;;;----- That's all, folks -------------------------------------------------