From 1c947eab7d1a07a2ceff108fbfd31f158cdbfb57 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Sat, 17 Jan 2026 23:27:36 +0000 Subject: [PATCH] add a test for 'PersistentVector.delete' (even though the 'PersistentVector.merge' helper function is unimplemented) --- fcore/persistent-vector.sml | 4 ++-- test/persistent-vector-tests.sml | 36 +++++++++++++++++++++++++++++++- 2 files changed, 37 insertions(+), 3 deletions(-) diff --git a/fcore/persistent-vector.sml b/fcore/persistent-vector.sml index f16f0e3..83cf069 100644 --- a/fcore/persistent-vector.sml +++ b/fcore/persistent-vector.sml @@ -550,9 +550,9 @@ struct fun delete (start, finish, tree) = let val matchAfterFinish = nextMatch (finish, tree, 1) - val left = splitRight (start, tree) + val left = splitLeft (start, tree) in - if matchAfterFinish = ~1 then + if matchAfterFinish = ~1 then (* there is no match after 'finish', so just split left. * No need to decrement or split right, * because the right vector would be empty. *) diff --git a/test/persistent-vector-tests.sml b/test/persistent-vector-tests.sml index de74e4e..a3d05ad 100644 --- a/test/persistent-vector-tests.sml +++ b/test/persistent-vector-tests.sml @@ -284,5 +284,39 @@ struct end) ] - val tests = [appendTests, toListTests, splitLeftTests] + val deleteTests = describe "PersistentVector.delete" + [test + "returns the left side of the vector \ + \when 'finish' is greater than any element in the vector" + (fn _ => + let + (* arrange *) + val inputList = + [ {start = 1, finish = 1} + , {start = 2, finish = 2} + , {start = 3, finish = 3} + , {start = 4, finish = 4} + , {start = 5, finish = 5} + , {start = 6, finish = 6} + , {start = 7, finish = 7} + , {start = 8, finish = 8} + ] + val pv = PersistentVector.fromList inputList + + (* act *) + val pv = PersistentVector.delete (5, 9, pv) + + (* assert *) + val outputList = PersistentVector.toList pv + val expectedOutput = + [ {start = 1, finish = 1} + , {start = 2, finish = 2} + , {start = 3, finish = 3} + , {start = 4, finish = 4} + ] + in + Expect.isTrue (outputList = expectedOutput) + end)] + + val tests = [appendTests, toListTests, splitLeftTests, deleteTests] end