@@ -98,6 +98,77 @@ public void AVLTree_Accuracy_Test()
98
98
{
99
99
var nodeCount = 1000 ;
100
100
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
+
101
172
var rnd = new Random ( ) ;
102
173
var sorted = Enumerable . Range ( 1 , nodeCount ) . ToList ( ) ;
103
174
var randomNumbers = sorted
@@ -165,7 +236,7 @@ public void AVLTree_Accuracy_Test()
165
236
}
166
237
167
238
[ TestMethod ]
168
- public void AVLTree_BulkInit_Test ( )
239
+ public void AVLTree_BulkInit_Test_With_Node_LookUp ( )
169
240
{
170
241
var nodeCount = 1000 ;
171
242
@@ -199,6 +270,41 @@ public void AVLTree_BulkInit_Test()
199
270
Assert . IsTrue ( tree . Count == 0 ) ;
200
271
}
201
272
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
+
202
308
[ TestMethod ]
203
309
public void AVLTree_Stress_Test ( )
204
310
{
0 commit comments