11package com .thealgorithms .divideandconquer ;
22
3- import static org .junit .jupiter .api .Assertions .*;
3+ import static org .junit .jupiter .api .Assertions .assertEquals ;
4+ import static org .junit .jupiter .api .Assertions .assertThrows ;
45
56import org .junit .jupiter .api .Test ;
67
@@ -9,41 +10,50 @@ class DeterministicQuickSelectTest {
910 @ Test
1011 void testSelectKthSmallestBasic () {
1112 int [] arr = {7 , 10 , 4 , 3 , 20 , 15 };
12- assertEquals (3 , DeterministicQuickSelect .select (arr .clone (), 1 )); // smallest
13+
14+ // Test all valid k values
15+ assertEquals (3 , DeterministicQuickSelect .select (arr .clone (), 1 ));
1316 assertEquals (4 , DeterministicQuickSelect .select (arr .clone (), 2 ));
1417 assertEquals (7 , DeterministicQuickSelect .select (arr .clone (), 3 ));
1518 assertEquals (10 , DeterministicQuickSelect .select (arr .clone (), 4 ));
1619 assertEquals (15 , DeterministicQuickSelect .select (arr .clone (), 5 ));
17- assertEquals (20 , DeterministicQuickSelect .select (arr .clone (), 6 )); // largest
20+ assertEquals (20 , DeterministicQuickSelect .select (arr .clone (), 6 ));
1821 }
1922
2023 @ Test
21- void testSelectSingleElement () {
24+ void testSingleElement () {
2225 int [] arr = {42 };
23- assertEquals (42 , DeterministicQuickSelect .select (arr , 1 ));
26+ assertEquals (42 , DeterministicQuickSelect .select (arr . clone () , 1 ));
2427 }
2528
2629 @ Test
27- void testSelectWithDuplicates () {
28- int [] arr = {5 , 3 , 8 , 5 , 2 , 3 };
29- assertEquals (2 , DeterministicQuickSelect .select (arr .clone (), 1 ));
30- assertEquals (3 , DeterministicQuickSelect .select (arr .clone (), 2 ));
31- assertEquals (3 , DeterministicQuickSelect .select (arr .clone (), 3 ));
32- assertEquals (5 , DeterministicQuickSelect .select (arr .clone (), 4 ));
33- assertEquals (5 , DeterministicQuickSelect .select (arr .clone (), 5 ));
34- assertEquals (8 , DeterministicQuickSelect .select (arr .clone (), 6 ));
30+ void testInvalidK () {
31+ int [] arr = {1 , 2 , 3 };
32+ // k = 0 and k > length should throw IllegalArgumentException
33+ assertThrows (IllegalArgumentException .class , () -> DeterministicQuickSelect .select (arr .clone (), 0 ));
34+ assertThrows (IllegalArgumentException .class , () -> DeterministicQuickSelect .select (arr .clone (), 4 ));
3535 }
3636
3737 @ Test
38- void testSelectEmptyArray () {
39- int [] arr = {};
40- assertThrows (IllegalArgumentException .class , () -> DeterministicQuickSelect .select (arr , 1 ));
38+ void testUnsortedArray () {
39+ int [] arr = {12 , 3 , 5 , 7 , 4 , 19 , 26 };
40+ assertEquals (3 , DeterministicQuickSelect .select (arr .clone (), 1 ));
41+ assertEquals (4 , DeterministicQuickSelect .select (arr .clone (), 2 ));
42+ assertEquals (5 , DeterministicQuickSelect .select (arr .clone (), 3 ));
43+ assertEquals (7 , DeterministicQuickSelect .select (arr .clone (), 4 ));
44+ assertEquals (12 , DeterministicQuickSelect .select (arr .clone (), 5 ));
45+ assertEquals (19 , DeterministicQuickSelect .select (arr .clone (), 6 ));
46+ assertEquals (26 , DeterministicQuickSelect .select (arr .clone (), 7 ));
4147 }
4248
4349 @ Test
44- void testSelectInvalidK () {
45- int [] arr = {1 , 2 , 3 };
46- assertThrows (IllegalArgumentException .class , () -> DeterministicQuickSelect .select (arr , 0 )); // k < 1
47- assertThrows (IllegalArgumentException .class , () -> DeterministicQuickSelect .select (arr , 4 )); // k > length
50+ void testArrayWithDuplicates () {
51+ int [] arr = {4 , 2 , 5 , 2 , 3 , 4 };
52+ assertEquals (2 , DeterministicQuickSelect .select (arr .clone (), 1 ));
53+ assertEquals (2 , DeterministicQuickSelect .select (arr .clone (), 2 ));
54+ assertEquals (3 , DeterministicQuickSelect .select (arr .clone (), 3 ));
55+ assertEquals (4 , DeterministicQuickSelect .select (arr .clone (), 4 ));
56+ assertEquals (4 , DeterministicQuickSelect .select (arr .clone (), 5 ));
57+ assertEquals (5 , DeterministicQuickSelect .select (arr .clone (), 6 ));
4858 }
4959}
0 commit comments