@@ -11,7 +11,6 @@ describe('Tree rotations', () => {
1111 let n2 ;
1212 let n3 ;
1313 let n4 ;
14- let n5 ;
1514
1615 beforeEach ( ( ) => {
1716 n1 = new TreeNode ( 1 ) ;
@@ -36,9 +35,15 @@ describe('Tree rotations', () => {
3635 const newParent = leftRotation ( n2 ) ;
3736
3837 expect ( newParent ) . toBe ( n3 ) ;
39- expect ( n3 . left ) . toBe ( n2 ) ;
40- expect ( n3 . right ) . toBe ( n4 ) ;
41- expect ( n3 . parent ) . toBe ( n1 ) ;
38+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
39+ value : 1 , left : undefined , right : 3 , parent : null ,
40+ } ) ;
41+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
42+ value : 2 , left : undefined , right : undefined , parent : 3 ,
43+ } ) ;
44+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
45+ value : 3 , left : 2 , right : 4 , parent : 1 ,
46+ } ) ;
4247 } ) ;
4348
4449 it ( 'should rotate left with root' , ( ) => {
@@ -56,9 +61,15 @@ describe('Tree rotations', () => {
5661 const newParent = leftRotation ( n1 ) ;
5762
5863 expect ( newParent ) . toBe ( n2 ) ;
59- expect ( n2 . left ) . toBe ( n1 ) ;
60- expect ( n2 . right ) . toBe ( n3 ) ;
61- expect ( n2 . parent ) . toBe ( null ) ;
64+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
65+ value : 1 , left : undefined , right : undefined , parent : 2 ,
66+ } ) ;
67+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
68+ value : 2 , left : 1 , right : 3 , parent : null ,
69+ } ) ;
70+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
71+ value : 3 , left : undefined , right : 4 , parent : 2 ,
72+ } ) ;
6273 } ) ;
6374
6475 it ( 'should rotate last two' , ( ) => {
@@ -76,9 +87,15 @@ describe('Tree rotations', () => {
7687 const newParent = leftRotation ( n1 ) ;
7788 expect ( newParent ) . toBe ( n2 ) ;
7889
79- expect ( n3 . left . value ) . toBe ( 2 ) ;
80- expect ( n2 . left . value ) . toBe ( 1 ) ;
81- expect ( n1 . left ) . toBe ( undefined ) ;
90+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
91+ value : 1 , left : undefined , right : undefined , parent : 2 ,
92+ } ) ;
93+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
94+ value : 2 , left : 1 , right : undefined , parent : 3 ,
95+ } ) ;
96+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
97+ value : 3 , left : 2 , right : undefined , parent : 4 ,
98+ } ) ;
8299 } ) ;
83100 } ) ;
84101
@@ -98,11 +115,18 @@ describe('Tree rotations', () => {
98115 const newParent = rightRotation ( n3 ) ;
99116
100117 expect ( newParent ) . toBe ( n2 ) ;
101- expect ( n2 . left ) . toBe ( n1 ) ;
102- expect ( n2 . right ) . toBe ( n3 ) ;
103- expect ( n2 . parent ) . toBe ( n4 ) ;
104- expect ( n3 . parent ) . toBe ( n2 ) ;
105- expect ( n4 . left ) . toBe ( n2 ) ;
118+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
119+ value : 1 , left : undefined , right : undefined , parent : 2 ,
120+ } ) ;
121+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
122+ value : 2 , left : 1 , right : 3 , parent : 4 ,
123+ } ) ;
124+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
125+ value : 3 , left : undefined , right : undefined , parent : 2 ,
126+ } ) ;
127+ expect ( n4 . toValues ( ) ) . toMatchObject ( {
128+ value : 4 , left : 2 , right : undefined , parent : null ,
129+ } ) ;
106130 } ) ;
107131
108132 it ( 'should right rotate at the top' , ( ) => {
@@ -117,6 +141,32 @@ describe('Tree rotations', () => {
117141 const newParent = rightRotation ( n3 ) ;
118142
119143 expect ( newParent ) . toBe ( n2 ) ;
144+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
145+ value : 2 , left : 1 , right : 3 , parent : null ,
146+ } ) ;
147+ } ) ;
148+
149+ it ( 'should last two' , ( ) => {
150+ // 1
151+ // \
152+ // 3*
153+ // /
154+ // 2
155+ n1 . right = n3 ;
156+ n3 . left = n2 ;
157+
158+ const newParent = rightRotation ( n3 ) ;
159+
160+ expect ( newParent ) . toBe ( n2 ) ;
161+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
162+ value : 1 , left : undefined , right : 2 , parent : null ,
163+ } ) ;
164+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
165+ value : 2 , left : undefined , right : 3 , parent : 1 ,
166+ } ) ;
167+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
168+ value : 3 , left : undefined , right : undefined , parent : 2 ,
169+ } ) ;
120170 } ) ;
121171 } ) ;
122172
@@ -136,10 +186,39 @@ describe('Tree rotations', () => {
136186 const newParent = leftRightRotation ( n3 ) ;
137187
138188 expect ( newParent ) . toBe ( n2 ) ;
139- expect ( n2 . left ) . toBe ( n1 ) ;
140- expect ( n2 . right ) . toBe ( n3 ) ;
141- expect ( n2 . parent ) . toBe ( n4 ) ;
142- expect ( n4 . left ) . toBe ( n2 ) ;
189+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
190+ value : 1 , left : undefined , right : undefined , parent : 2 ,
191+ } ) ;
192+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
193+ value : 2 , left : 1 , right : 3 , parent : 4 ,
194+ } ) ;
195+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
196+ value : 3 , left : undefined , right : undefined , parent : 2 ,
197+ } ) ;
198+ } ) ;
199+ } ) ;
200+
201+ describe ( '#rightLeftRotation (RL Rotation)' , ( ) => {
202+ it ( 'should do a RR rotation and then a LL rotation' , ( ) => {
203+ // 1*
204+ // \
205+ // 3
206+ // /
207+ // 2
208+ n1 . right = n3 ;
209+ n3 . left = n2 ;
210+
211+ const newParent = rightLeftRotation ( n1 ) ;
212+ expect ( newParent ) . toBe ( n2 ) ;
213+ expect ( n1 . toValues ( ) ) . toMatchObject ( {
214+ value : 1 , left : undefined , right : undefined , parent : 2 ,
215+ } ) ;
216+ expect ( n2 . toValues ( ) ) . toMatchObject ( {
217+ value : 2 , left : 1 , right : 3 , parent : null ,
218+ } ) ;
219+ expect ( n3 . toValues ( ) ) . toMatchObject ( {
220+ value : 3 , left : undefined , right : undefined , parent : 2 ,
221+ } ) ;
143222 } ) ;
144223 } ) ;
145224} ) ;
0 commit comments