Skip to content

Commit 1eedaeb

Browse files
NarekDWDebasish Biswas
andauthored
Move common tests for sorting algorithms to the base test class (TheAlgorithms#3782)
* bug fix for CircularBuffer + refactoring + add unit tests * change Insertion sort to classical implementation + add isSorted function to SortUtils + add SortUtilsRandomGenerator for generating random values and arrays * little fix * move all common tests to SortingAlgorithmTest and utilize them Co-authored-by: Debasish Biswas <[email protected]>
1 parent ce55420 commit 1eedaeb

File tree

7 files changed

+222
-324
lines changed

7 files changed

+222
-324
lines changed

src/main/java/com/thealgorithms/sorts/SortUtils.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,11 @@ static <T extends Comparable<T>> boolean isSorted(T[] array) {
112112
return false;
113113
return true;
114114
}
115+
116+
static <T extends Comparable<T>> boolean isSorted(List<T> list) {
117+
for (int i = 1; i < list.size(); i++)
118+
if (less(list.get(i), list.get(i - 1)))
119+
return false;
120+
return true;
121+
}
115122
}
Lines changed: 4 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,8 @@
11
package com.thealgorithms.sorts;
22

3-
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
4-
import static org.junit.jupiter.api.Assertions.assertTrue;
5-
6-
import org.junit.jupiter.api.BeforeEach;
7-
import org.junit.jupiter.api.Test;
8-
9-
public class HeapSortTest {
10-
private HeapSort heapSort;
11-
12-
@BeforeEach
13-
void setUp() {
14-
heapSort = new HeapSort();
15-
}
16-
17-
@Test
18-
void shouldAcceptWhenEmptyArrayIsPassed() {
19-
Integer[] array = new Integer[]{};
20-
Integer[] expected = new Integer[]{};
21-
22-
Integer[] sorted = heapSort.sort(array);
23-
24-
assertArrayEquals(expected, sorted);
25-
}
26-
27-
@Test
28-
void shouldAcceptWhenSingleValuedArrayIsPassed() {
29-
Integer[] array = new Integer[]{2};
30-
Integer[] expected = new Integer[]{2};
31-
32-
Integer[] sorted = heapSort.sort(array);
33-
34-
assertArrayEquals(expected, sorted);
35-
}
36-
37-
@Test
38-
void shouldAcceptWhenArrayWithAllPositiveValuesIsPassed() {
39-
Integer[] array = new Integer[]{60, 7, 55, 9, 999, 3};
40-
Integer[] expected = new Integer[]{3, 7, 9, 55, 60, 999};
41-
42-
Integer[] sorted = heapSort.sort(array);
43-
44-
assertArrayEquals(expected, sorted);
45-
}
46-
47-
@Test
48-
void shouldAcceptWhenArrayWithAllNegativeValuesIsPassed() {
49-
Integer[] array = new Integer[]{-60, -7, -55, -9, -999, -3};
50-
Integer[] expected = new Integer[]{-999, -60, -55, -9, -7, -3};
51-
52-
Integer[] sorted = heapSort.sort(array);
53-
54-
assertArrayEquals(expected, sorted);
3+
public class HeapSortTest extends SortingAlgorithmTest {
4+
@Override
5+
SortAlgorithm getSortAlgorithm() {
6+
return new HeapSort();
557
}
56-
57-
@Test
58-
void shouldAcceptWhenArrayWithRealNumberValuesIsPassed() {
59-
Integer[] array = new Integer[]{60, -7, 55, 9, -999, -3};
60-
Integer[] expected = new Integer[]{-999, -7, -3, 9, 55, 60};
61-
62-
Integer[] sorted = heapSort.sort(array);
63-
64-
assertArrayEquals(expected, sorted);
65-
}
66-
67-
@Test
68-
void shouldAcceptWhenArrayWithDuplicateValueIsPassed() {
69-
Integer[] array = new Integer[]{60, 7, 55, 55, 999, 3};
70-
Integer[] expected = new Integer[]{3, 7, 55, 55, 60, 999};
71-
72-
Integer[] sorted = heapSort.sort(array);
73-
74-
assertArrayEquals(expected, sorted);
75-
}
76-
77-
@Test
78-
void shouldAcceptWhenStringValueArrayIsPassed() {
79-
String[] array = {"z", "a", "x", "b", "y"};
80-
String[] expected = {"a", "b", "x", "y", "z"};
81-
82-
String[] sorted = heapSort.sort(array);
83-
84-
assertArrayEquals(expected, sorted);
85-
}
86-
87-
@Test
88-
void shouldAcceptWhenRandomArrayIsPassed() {
89-
int randomSize = SortUtilsRandomGenerator.generateInt(10_000);
90-
Double[] array = SortUtilsRandomGenerator.generateArray(randomSize);
91-
Double[] sorted = heapSort.sort(array);
92-
assertTrue(SortUtils.isSorted(sorted));
93-
}
94-
958
}
Lines changed: 4 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,95 +1,8 @@
11
package com.thealgorithms.sorts;
22

3-
import org.junit.jupiter.api.BeforeEach;
4-
import org.junit.jupiter.api.Test;
5-
6-
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
7-
import static org.junit.jupiter.api.Assertions.assertTrue;
8-
9-
public class MergeSortTest {
10-
11-
private MergeSort mergeSort;
12-
13-
@BeforeEach
14-
void setUp() {
15-
mergeSort = new MergeSort();
16-
}
17-
18-
@Test
19-
void shouldAcceptWhenEmptyArrayIsPassed() {
20-
Integer [] array = new Integer[]{};
21-
Integer [] expected = new Integer[]{};
22-
23-
Integer []sorted = mergeSort.sort(array);
24-
25-
assertArrayEquals(expected, sorted);
26-
}
27-
28-
@Test
29-
void shouldAcceptWhenSingleValuedArrayIsPassed() {
30-
Integer [] array = new Integer[]{2};
31-
Integer [] expected = new Integer[]{2};
32-
33-
Integer [] sorted = mergeSort.sort(array);
34-
35-
assertArrayEquals(expected, sorted);
36-
}
37-
38-
@Test
39-
void shouldAcceptWhenArrayWithAllPositiveValuesIsPassed() {
40-
Integer [] array = new Integer[]{60, 7, 55, 9, 999, 3};
41-
Integer [] expected = new Integer[]{3, 7, 9, 55, 60, 999};
42-
43-
Integer [] sorted = mergeSort.sort(array);
44-
45-
assertArrayEquals(expected, sorted);
46-
}
47-
48-
@Test
49-
void shouldAcceptWhenArrayWithAllNegativeValuesIsPassed() {
50-
Integer [] array = new Integer[]{-60, -7, -55, -9, -999, -3};
51-
Integer [] expected = new Integer[]{-999, -60, -55, -9, -7, -3};
52-
53-
Integer [] sorted = mergeSort.sort(array);
54-
55-
assertArrayEquals(expected, sorted);
56-
}
57-
58-
@Test
59-
void shouldAcceptWhenArrayWithRealNumberValuesIsPassed() {
60-
Integer [] array = new Integer[]{60, -7, 55, 9, -999, -3};
61-
Integer [] expected = new Integer[]{-999, -7, -3, 9, 55, 60};
62-
63-
Integer [] sorted = mergeSort.sort(array);
64-
65-
assertArrayEquals(expected, sorted);
66-
}
67-
68-
@Test
69-
void shouldAcceptWhenArrayWithDuplicateValueIsPassed() {
70-
Integer [] array = new Integer[]{60, 7, 55, 55, 999, 3};
71-
Integer [] expected = new Integer[]{3, 7, 55, 55, 60, 999};
72-
73-
Integer [] sorted = mergeSort.sort(array);
74-
75-
assertArrayEquals(expected, sorted);
76-
}
77-
78-
@Test
79-
void shouldAcceptWhenStringValueArrayIsPassed() {
80-
String[] array = {"z", "a", "x", "b", "y"};
81-
String[] expected = {"a", "b", "x", "y", "z"};
82-
83-
String[] sorted = mergeSort.sort(array);
84-
85-
assertArrayEquals(expected, sorted);
86-
}
87-
88-
@Test
89-
void shouldAcceptWhenRandomArrayIsPassed() {
90-
int randomSize = SortUtilsRandomGenerator.generateInt(10_000);
91-
Double[] array = SortUtilsRandomGenerator.generateArray(randomSize);
92-
Double[] sorted = mergeSort.sort(array);
93-
assertTrue(SortUtils.isSorted(sorted));
3+
public class MergeSortTest extends SortingAlgorithmTest {
4+
@Override
5+
SortAlgorithm getSortAlgorithm() {
6+
return new MergeSort();
947
}
958
}
Lines changed: 4 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,12 @@
11
package com.thealgorithms.sorts;
22

3-
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
4-
5-
import org.junit.jupiter.api.Test;
6-
73
/**
84
* @author Akshay Dubey (https://github.com/itsAkshayDubey)
95
* @see QuickSort
106
*/
11-
class QuickSortTest {
12-
13-
private QuickSort quickSort = new QuickSort();
14-
15-
@Test
16-
void quickSortEmptyArrayShouldPass() {
17-
Integer[] array = {};
18-
Integer[] sorted = quickSort.sort(array);
19-
Integer[] expected = {};
20-
assertArrayEquals(expected, sorted);
21-
}
22-
23-
@Test
24-
void quickSortSingleValueArrayShouldPass() {
25-
Integer[] array = { 7 };
26-
Integer[] sorted = quickSort.sort(array);
27-
Integer[] expected = { 7 };
28-
assertArrayEquals(expected, sorted);
29-
}
30-
31-
@Test
32-
void quickSortWithIntegerArrayShouldPass() {
33-
Integer[] array = { 49, 4, 36, 9, 144, 1 };
34-
Integer[] sorted = quickSort.sort(array);
35-
Integer[] expected = { 1, 4, 9, 36, 49, 144 };
36-
assertArrayEquals(expected, sorted);
37-
}
38-
39-
@Test
40-
void quickSortForArrayWithNegativeValuesShouldPass() {
41-
Integer[] array = { 49, -36, -144, -49, 1, 9 };
42-
Integer[] sorted = quickSort.sort(array);
43-
Integer[] expected = { -144, -49, -36, 1, 9, 49 };
44-
assertArrayEquals(expected, sorted);
45-
}
46-
47-
@Test
48-
void quickSortForArrayWithDuplicateValuesShouldPass() {
49-
Integer[] array = { 36, 1, 49, 1, 4, 9 };
50-
Integer[] sorted = quickSort.sort(array);
51-
Integer[] expected = { 1, 1, 4, 9, 36, 49 };
52-
assertArrayEquals(expected, sorted);
53-
}
54-
55-
@Test
56-
void quickSortWithStringArrayShouldPass() {
57-
String[] array = { "c", "a", "e", "b", "d" };
58-
String[] sorted = quickSort.sort(array);
59-
String[] expected = { "a", "b", "c", "d", "e" };
60-
assertArrayEquals(expected, sorted);
7+
class QuickSortTest extends SortingAlgorithmTest {
8+
@Override
9+
SortAlgorithm getSortAlgorithm() {
10+
return new QuickSort();
6111
}
6212
}

src/test/java/com/thealgorithms/sorts/SortUtilsTest.java

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import org.junit.jupiter.api.Test;
44

5+
import java.util.List;
6+
57
import static org.junit.jupiter.api.Assertions.*;
68

79
class SortUtilsTest {
@@ -19,7 +21,7 @@ void isSortedWithSingleElement() {
1921
}
2022

2123
@Test
22-
void isSortedTrue() {
24+
void isSortedArrayTrue() {
2325
Integer[] array = {1, 1, 2, 3, 5, 8, 11};
2426
assertTrue(SortUtils.isSorted(array));
2527

@@ -31,7 +33,7 @@ void isSortedTrue() {
3133
}
3234

3335
@Test
34-
void isSortedFalse() {
36+
void isSortedArrayFalse() {
3537
Double[] array = {1.0, 3.0, -0.15};
3638
assertFalse(SortUtils.isSorted(array));
3739

@@ -41,4 +43,28 @@ void isSortedFalse() {
4143
Integer[] array3 = {5, 4, 3, 2, 1};
4244
assertFalse(SortUtils.isSorted(array3));
4345
}
46+
47+
@Test
48+
void isSortedListTrue() {
49+
List<Integer> list = List.of(1, 1, 2, 3, 5, 8, 11);
50+
assertTrue(SortUtils.isSorted(list));
51+
52+
List<Integer> identicalList = List.of(1, 1, 1, 1, 1);
53+
assertTrue(SortUtils.isSorted(identicalList));
54+
55+
List<Double> doubles = List.of(-15.123, -15.111, 0.0, 0.12, 0.15);
56+
assertTrue(SortUtils.isSorted(doubles));
57+
}
58+
59+
@Test
60+
void isSortedListFalse() {
61+
List<Double> list = List.of(1.0, 3.0, -0.15);
62+
assertFalse(SortUtils.isSorted(list));
63+
64+
List<Integer> array2 = List.of(14, 15, 16, 1);
65+
assertFalse(SortUtils.isSorted(array2));
66+
67+
List<Integer> array3 = List.of(5, 4, 3, 2, 1);
68+
assertFalse(SortUtils.isSorted(array3));
69+
}
4470
}

0 commit comments

Comments
 (0)