@@ -165,4 +165,65 @@ describe('AvlTree', () => {
165165 null , null , null , null , null , null ] ) ;
166166 } ) ;
167167 } ) ;
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+ } ) ;
168229} ) ;
0 commit comments