@@ -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