@@ -165,4 +165,65 @@ describe('AvlTree', () => {
165
165
null , null , null , null , null , null ] ) ;
166
166
} ) ;
167
167
} ) ;
168
+
169
+ describe ( 'balancing to the left' , ( ) => {
170
+ let n32 ;
171
+ beforeEach ( ( ) => {
172
+ n32 = tree . add ( 32 ) ;
173
+ tree . add ( 8 ) ;
174
+ tree . add ( 64 ) ;
175
+ tree . add ( 4 ) ;
176
+ tree . add ( 16 ) ;
177
+ tree . add ( 48 ) ;
178
+ tree . add ( 128 ) ;
179
+ tree . add ( 2 ) ;
180
+ tree . add ( 6 ) ;
181
+ tree . add ( 10 ) ;
182
+ tree . add ( 20 ) ;
183
+ } ) ;
184
+
185
+ it ( 'should have all nodes' , ( ) => {
186
+ expect ( tree . toArray ( ) ) . toEqual ( [ 32 , 8 , 64 , 4 , 16 , 48 , 128 , 2 , 6 , 10 , 20 ,
187
+ null , null , null , null , null , null , null , null , null , null , null , null ] ) ;
188
+ } ) ;
189
+
190
+ it ( 'should rebalance when removing' , ( ) => {
191
+ tree . remove ( 64 ) ;
192
+ expect ( tree . toArray ( ) ) . toEqual ( [ 32 , 8 , 128 , 4 , 16 , 48 , null , 2 , 6 , 10 , 20 ,
193
+ null , null , null , null , null , null , null , null , null , null ] ) ;
194
+ expect ( n32 . balanceFactor ) . toBe ( 1 ) ;
195
+ expect ( n32 . right . balanceFactor ) . toBe ( 1 ) ;
196
+ expect ( n32 . left . balanceFactor ) . toBe ( 0 ) ;
197
+
198
+ tree . remove ( 48 ) ;
199
+ expect ( tree . toArray ( ) ) . toEqual ( [ 8 , 4 , 32 , 2 , 6 , 16 , 128 , null , null , null , null , 10 , 20 ,
200
+ null , null , null , null , null , null ] ) ;
201
+ } ) ;
202
+ } ) ;
203
+
204
+ describe ( 'balancing to the right' , ( ) => {
205
+ beforeEach ( ( ) => {
206
+ tree . add ( 8 ) ;
207
+ tree . add ( 4 ) ;
208
+ tree . add ( 32 ) ;
209
+ tree . add ( 2 ) ;
210
+ tree . add ( 16 ) ;
211
+ tree . add ( 64 ) ;
212
+ tree . add ( 10 ) ;
213
+ tree . add ( 20 ) ;
214
+ tree . add ( 60 ) ;
215
+ tree . add ( 70 ) ;
216
+ } ) ;
217
+
218
+ it ( 'should build the tree' , ( ) => {
219
+ expect ( tree . toArray ( ) ) . toEqual ( [ 8 , 4 , 32 , 2 , null , 16 , 64 , null , null , 10 , 20 , 60 , 70 ,
220
+ null , null , null , null , null , null , null , null ] ) ;
221
+ } ) ;
222
+
223
+ it ( 'should rebalance right side' , ( ) => {
224
+ tree . remove ( 2 ) ;
225
+ expect ( tree . toArray ( ) ) . toEqual ( [ 32 , 8 , 64 , 4 , 16 , 60 , 70 , null , null , 10 , 20 ,
226
+ null , null , null , null , null , null , null , null ] ) ;
227
+ } ) ;
228
+ } ) ;
168
229
} ) ;
0 commit comments