22
33import static org .junit .jupiter .api .Assertions .assertEquals ;
44import static org .junit .jupiter .api .Assertions .assertFalse ;
5+ import static org .junit .jupiter .api .Assertions .assertThrows ;
56import static org .junit .jupiter .api .Assertions .assertTrue ;
67
78import java .util .Arrays ;
@@ -16,19 +17,16 @@ public class SplayTreeTest {
1617 @ MethodSource ("traversalOrders" )
1718 public void testTraversal (SplayTree .TraverseOrder traverseOrder ) {
1819 SplayTree tree = createComplexTree ();
19-
20- // Perform traversal based on the provided order and verify the result
2120 List <Integer > expected = getExpectedTraversalResult (traverseOrder );
2221 List <Integer > result = tree .traverse (traverseOrder );
22+
2323 assertEquals (expected , result );
2424 }
2525
2626 @ ParameterizedTest
2727 @ MethodSource ("valuesToTest" )
2828 public void testSearch (int value ) {
2929 SplayTree tree = createComplexTree ();
30-
31- // Search for the value in the tree
3230 assertTrue (tree .search (value ));
3331 }
3432
@@ -37,23 +35,53 @@ public void testSearch(int value) {
3735 public void testDelete (int value ) {
3836 SplayTree tree = createComplexTree ();
3937
40- // Delete the value from the tree
41- assertTrue (tree .search (value )); // Ensure value is present before deletion
38+ assertTrue (tree .search (value ));
39+ tree .delete (value );
40+ assertFalse (tree .search (value ));
41+ }
42+
43+ @ ParameterizedTest
44+ @ MethodSource ("nonExistentValues" )
45+ public void testSearchNonExistent (int value ) {
46+ SplayTree tree = createComplexTree ();
47+ assertFalse (tree .search (value ));
48+ }
49+
50+ @ ParameterizedTest
51+ @ MethodSource ("nonExistentValues" )
52+ public void testDeleteNonExistent (int value ) {
53+ SplayTree tree = createComplexTree ();
54+
4255 tree .delete (value );
43- assertFalse (tree .search (value )); // Ensure value is not present after deletion
56+ assertFalse (tree .search (value ));
57+ }
58+
59+ @ ParameterizedTest
60+ @ MethodSource ("valuesToTest" )
61+ public void testDeleteThrowsExceptionForEmptyTree (int value ) {
62+ SplayTree tree = new SplayTree ();
63+ assertThrows (IllegalArgumentException .class , () -> tree .delete (value ));
64+ }
65+
66+ @ ParameterizedTest
67+ @ MethodSource ("valuesToTest" )
68+ public void testInsertThrowsExceptionForDuplicateKeys (int value ) {
69+ SplayTree tree = createComplexTree ();
70+ assertThrows (IllegalArgumentException .class , () -> tree .insert (value ));
4471 }
4572
46- // Method to provide different traversal orders as parameters
4773 private static Stream <SplayTree .TraverseOrder > traversalOrders () {
4874 return Stream .of (SplayTree .TraverseOrder .IN_ORDER , SplayTree .TraverseOrder .PRE_ORDER , SplayTree .TraverseOrder .POST_ORDER );
4975 }
5076
51- // Method to provide values for search and delete tests as parameters
5277 private static Stream <Integer > valuesToTest () {
53- return Stream .of (1 , 5 , 10 ); // Values present in the complex tree
78+ return Stream .of (1 , 5 , 10 );
79+ }
80+
81+ private static Stream <Integer > nonExistentValues () {
82+ return Stream .of (0 , 11 , 15 );
5483 }
5584
56- // Method to get the expected traversal result based on the provided order
5785 private List <Integer > getExpectedTraversalResult (SplayTree .TraverseOrder traverseOrder ) {
5886 List <Integer > expected = new LinkedList <>();
5987 switch (traverseOrder ) {
@@ -72,7 +100,6 @@ private List<Integer> getExpectedTraversalResult(SplayTree.TraverseOrder travers
72100 return expected ;
73101 }
74102
75- // Method to create a complex SplayTree instance for testing
76103 private SplayTree createComplexTree () {
77104 SplayTree tree = new SplayTree ();
78105 tree .insert (5 );
0 commit comments