@@ -98,6 +98,77 @@ public void AVLTree_Accuracy_Test()
9898 {
9999 var nodeCount = 1000 ;
100100
101+ var rnd = new Random ( ) ;
102+ var sorted = Enumerable . Range ( 1 , nodeCount ) . ToList ( ) ;
103+ var randomNumbers = sorted
104+ . OrderBy ( x => rnd . Next ( ) )
105+ . ToList ( ) ;
106+
107+ var tree = new AVLTree < int > ( ) ;
108+
109+ for ( int i = 0 ; i < nodeCount ; i ++ )
110+ {
111+ tree . Insert ( randomNumbers [ i ] ) ;
112+
113+ Assert . IsTrue ( tree . HasItem ( randomNumbers [ i ] ) ) ;
114+ Assert . IsTrue ( tree . Root . IsBinarySearchTree ( int . MinValue , int . MaxValue ) ) ;
115+ tree . Root . VerifyCount ( ) ;
116+
117+ var actualHeight = tree . GetHeight ( ) ;
118+
119+ //http://stackoverflow.com/questions/30769383/finding-the-minimum-and-maximum-height-in-a-avl-tree-given-a-number-of-nodes
120+ var maxHeight = 1.44 * Math . Log ( nodeCount + 2 , 2 ) - 0.328 ;
121+
122+ Assert . IsTrue ( actualHeight < maxHeight ) ;
123+ Assert . IsTrue ( tree . Count == i + 1 ) ;
124+ }
125+
126+ for ( int i = 0 ; i < sorted . Count ; i ++ )
127+ {
128+ Assert . AreEqual ( sorted [ i ] , tree . ElementAt ( i ) ) ;
129+ Assert . AreEqual ( i , tree . IndexOf ( sorted [ i ] ) ) ;
130+ }
131+
132+ randomNumbers = Enumerable . Range ( 1 , nodeCount )
133+ . OrderBy ( x => rnd . Next ( ) )
134+ . ToList ( ) ;
135+
136+ //IEnumerable test using linq
137+ Assert . AreEqual ( tree . Count , tree . Count ( ) ) ;
138+ Assert . AreEqual ( tree . Count , tree . AsEnumerableDesc ( ) . Count ( ) ) ;
139+
140+ for ( int i = 0 ; i < nodeCount ; i ++ )
141+ {
142+ if ( rnd . NextDouble ( ) >= 0.5 )
143+ {
144+ tree . Delete ( randomNumbers [ i ] ) ;
145+ }
146+ else
147+ {
148+ var index = tree . IndexOf ( randomNumbers [ i ] ) ;
149+ Assert . AreEqual ( tree . ElementAt ( index ) , randomNumbers [ i ] ) ;
150+ tree . RemoveAt ( index ) ;
151+ }
152+
153+ Assert . IsTrue ( tree . Root . IsBinarySearchTree ( int . MinValue , int . MaxValue ) ) ;
154+ tree . Root . VerifyCount ( ) ;
155+
156+ var actualHeight = tree . GetHeight ( ) ;
157+
158+ //http://stackoverflow.com/questions/30769383/finding-the-minimum-and-maximum-height-in-a-avl-tree-given-a-number-of-nodes
159+ var maxHeight = 1.44 * Math . Log ( nodeCount + 2 , 2 ) - 0.328 ;
160+
161+ Assert . IsTrue ( actualHeight < maxHeight ) ;
162+ }
163+
164+ Assert . IsTrue ( tree . Count == 0 ) ;
165+ }
166+
167+ [ TestMethod ]
168+ public void AVLTree_Accuracy_Test_With_Node_LookUp ( )
169+ {
170+ var nodeCount = 1000 ;
171+
101172 var rnd = new Random ( ) ;
102173 var sorted = Enumerable . Range ( 1 , nodeCount ) . ToList ( ) ;
103174 var randomNumbers = sorted
@@ -165,7 +236,7 @@ public void AVLTree_Accuracy_Test()
165236 }
166237
167238 [ TestMethod ]
168- public void AVLTree_BulkInit_Test ( )
239+ public void AVLTree_BulkInit_Test_With_Node_LookUp ( )
169240 {
170241 var nodeCount = 1000 ;
171242
@@ -199,6 +270,41 @@ public void AVLTree_BulkInit_Test()
199270 Assert . IsTrue ( tree . Count == 0 ) ;
200271 }
201272
273+ [ TestMethod ]
274+ public void AVLTree_BulkInit_Test ( )
275+ {
276+ var nodeCount = 1000 ;
277+
278+ var rnd = new Random ( ) ;
279+ var randomNumbers = Enumerable . Range ( 1 , nodeCount ) . ToList ( ) ;
280+
281+ var tree = new AVLTree < int > ( randomNumbers , true ) ;
282+
283+ Assert . IsTrue ( tree . Root . IsBinarySearchTree ( int . MinValue , int . MaxValue ) ) ;
284+ Assert . AreEqual ( tree . Count , tree . Count ( ) ) ;
285+
286+ tree . Root . VerifyCount ( ) ;
287+
288+ for ( int i = 0 ; i < nodeCount ; i ++ )
289+ {
290+ tree . Delete ( randomNumbers [ i ] ) ;
291+
292+ tree . Root . VerifyCount ( ) ;
293+ Assert . IsTrue ( tree . Root . IsBinarySearchTree ( int . MinValue , int . MaxValue ) ) ;
294+
295+ var actualHeight = tree . GetHeight ( ) ;
296+
297+ //http://stackoverflow.com/questions/30769383/finding-the-minimum-and-maximum-height-in-a-avl-tree-given-a-number-of-nodes
298+ var maxHeight = 1.44 * Math . Log ( nodeCount + 2 , 2 ) - 0.328 ;
299+
300+ Assert . IsTrue ( actualHeight < maxHeight ) ;
301+
302+ Assert . IsTrue ( tree . Count == nodeCount - 1 - i ) ;
303+ }
304+
305+ Assert . IsTrue ( tree . Count == 0 ) ;
306+ }
307+
202308 [ TestMethod ]
203309 public void AVLTree_Stress_Test ( )
204310 {
0 commit comments