Skip to content

Commit 7044a83

Browse files
committed
add tests for delete
1 parent 0f61b35 commit 7044a83

File tree

1 file changed

+147
-1
lines changed

1 file changed

+147
-1
lines changed

Algorithms.Tests/DataStructures/AVLTree.fs

Lines changed: 147 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,150 @@ type AVLTreeTests() =
170170
|> verifyProperties
171171

172172
Assert.AreEqual(tree1.Root |> Option.map (fun n -> n.Value),
173-
tree2.Root |> Option.map (fun n -> n.Value))
173+
tree2.Root |> Option.map (fun n -> n.Value))
174+
[<TestMethod>]
175+
member _.``Delete maintains AVL properties``() =
176+
let tree =
177+
empty
178+
|> insert 5
179+
|> verifyProperties
180+
|> insert 3
181+
|> verifyProperties
182+
|> insert 7
183+
|> verifyProperties
184+
|> insert 1
185+
|> verifyProperties
186+
|> insert 9
187+
|> verifyProperties
188+
|> insert 4
189+
|> verifyProperties
190+
|> insert 6
191+
|> verifyProperties
192+
|> insert 8
193+
|> verifyProperties
194+
|> insert 2
195+
|> verifyProperties
196+
|> delete 5 // Delete root
197+
|> verifyProperties
198+
|> delete 1 // Delete leaf
199+
|> verifyProperties
200+
|> delete 7 // Delete node with one child
201+
|> verifyProperties
202+
|> delete 3 // Delete node with two children
203+
|> verifyProperties
204+
205+
Assert.IsTrue(tree.Root.IsSome)
206+
207+
[<TestMethod>]
208+
member _.``Delete from empty tree returns empty tree``() =
209+
let tree =
210+
empty
211+
|> delete 1
212+
|> verifyProperties
213+
214+
Assert.IsTrue(tree.Root.IsNone)
215+
216+
[<TestMethod>]
217+
member _.``Delete non-existent value maintains tree structure``() =
218+
let tree1 =
219+
empty
220+
|> insert 2
221+
|> verifyProperties
222+
|> insert 1
223+
|> verifyProperties
224+
|> insert 3
225+
|> verifyProperties
226+
227+
let tree2 =
228+
tree1
229+
|> delete 4
230+
|> verifyProperties
231+
232+
Assert.AreEqual(
233+
tree1.Root |> Option.map (fun n -> n.Value),
234+
tree2.Root |> Option.map (fun n -> n.Value)
235+
)
236+
237+
[<TestMethod>]
238+
member _.``Complex deletion cases maintain balance``() =
239+
let tree =
240+
empty
241+
|> insert 50 // Create a more complex tree
242+
|> verifyProperties
243+
|> insert 25
244+
|> verifyProperties
245+
|> insert 75
246+
|> verifyProperties
247+
|> insert 10
248+
|> verifyProperties
249+
|> insert 35
250+
|> verifyProperties
251+
|> insert 60
252+
|> verifyProperties
253+
|> insert 90
254+
|> verifyProperties
255+
|> insert 5
256+
|> verifyProperties
257+
|> insert 15
258+
|> verifyProperties
259+
|> insert 30
260+
|> verifyProperties
261+
|> insert 40
262+
|> verifyProperties
263+
|> insert 55
264+
|> verifyProperties
265+
|> insert 65
266+
|> verifyProperties
267+
|> insert 80
268+
|> verifyProperties
269+
|> insert 95
270+
|> verifyProperties
271+
272+
// Test various deletion patterns
273+
|> delete 50 // Delete root with two children
274+
|> verifyProperties
275+
|> delete 25 // Delete inner node with two children
276+
|> verifyProperties
277+
|> delete 5 // Delete leaf
278+
|> verifyProperties
279+
|> delete 95 // Delete leaf on opposite side
280+
|> verifyProperties
281+
|> delete 35 // Delete node with one child
282+
|> verifyProperties
283+
|> delete 75 // Delete node requiring rebalancing
284+
|> verifyProperties
285+
286+
Assert.IsTrue(tree.Root.IsSome)
287+
288+
[<TestMethod>]
289+
member _.``Sequential deletion maintains balance``() =
290+
let mutable tree = empty
291+
292+
// Build tree with sequential inserts
293+
for i in 1..10 do
294+
tree <- insert i tree
295+
tree <- verifyProperties tree
296+
297+
// Delete in reverse order
298+
for i in seq{10..(-1)..1} do
299+
tree <- delete i tree
300+
tree <- verifyProperties tree
301+
302+
Assert.IsTrue(tree.Root.IsNone)
303+
304+
[<TestMethod>]
305+
member _.``Random operations maintain AVL properties``() =
306+
let rng = System.Random(42)
307+
let mutable tree = empty
308+
309+
// Random inserts
310+
for _ in 1..20 do
311+
let value = rng.Next(1, 100)
312+
tree <- insert value tree
313+
tree <- verifyProperties tree
314+
315+
// Random deletes
316+
for _ in 1..10 do
317+
let value = rng.Next(1, 100)
318+
tree <- delete value tree
319+
tree <- verifyProperties tree

0 commit comments

Comments
 (0)