From 08abb43e3bc1905d8864d39044818126af0c7108 Mon Sep 17 00:00:00 2001 From: Humza Shahid Date: Fri, 16 Jan 2026 21:30:56 +0000 Subject: [PATCH] added tests for 'PersistentVector.splitLeft' function --- test/persistent-vector-tests.sml | 137 ++++++++++++++++++++++++++----- todo.md | 2 +- 2 files changed, 116 insertions(+), 23 deletions(-) diff --git a/test/persistent-vector-tests.sml b/test/persistent-vector-tests.sml index 384564a..de74e4e 100644 --- a/test/persistent-vector-tests.sml +++ b/test/persistent-vector-tests.sml @@ -166,30 +166,123 @@ struct ] val splitLeftTests = describe "PersistentVector.splitLeft" - [test "returns same vector when split idx is greater than any idx in 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 + [ test + "returns same vector when split idx is greater than any idx in 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.splitLeft (9, pv) + (* act *) + val pv = PersistentVector.splitLeft (9, pv) - (* assert *) - val outputList = PersistentVector.toList pv - in - Expect.isTrue (inputList = outputList) - end)] + (* assert *) + val outputList = PersistentVector.toList pv + in + Expect.isTrue (inputList = outputList) + end) + , test "removes last element when split idx is = to last element" (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.splitLeft (8, 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} + , {start = 5, finish = 5} + , {start = 6, finish = 6} + , {start = 7, finish = 7} + ] + in + Expect.isTrue (outputList = expectedOutput) + end) + , test "removes all elements when split idx = first element" (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.splitLeft (1, pv) + + (* assert *) + val outputList = PersistentVector.toList pv + val expectedOutput = [] + in + Expect.isTrue (outputList = expectedOutput) + end) + , test + "removes element whose start and finish is in range \ + \of the split idx, and removes all elements after it too" + (fn _ => + let + (* arrange *) + val inputList = + [ {start = 1, finish = 1} + , {start = 2, finish = 2} + , {start = 3, finish = 3} + , {start = 4, finish = 4} + , {start = 5, finish = 155} + , {start = 200, finish = 200} + , {start = 210, finish = 210} + , {start = 220, finish = 220} + , {start = 230, finish = 230} + , {start = 240, finish = 240} + , {start = 250, finish = 250} + ] + val pv = PersistentVector.fromList inputList + + (* act *) + val pv = PersistentVector.splitLeft (7, 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] end diff --git a/todo.md b/todo.md index ad95d36..5b5b449 100644 --- a/todo.md +++ b/todo.md @@ -1,3 +1,3 @@ # To-do list -- Test `PersistentVector.splitLeft` +- Implement `PersistentVector.delete` and test it - Implement 'yj' motion and add tests for it