|
| 1 | +package com.thealgorithms.sorts; |
| 2 | + |
| 3 | +import static org.junit.jupiter.api.Assertions.assertArrayEquals; |
| 4 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
| 5 | + |
| 6 | +import java.util.stream.Stream; |
| 7 | +import org.junit.jupiter.api.Test; |
| 8 | +import org.junit.jupiter.params.ParameterizedTest; |
| 9 | +import org.junit.jupiter.params.provider.Arguments; |
| 10 | +import org.junit.jupiter.params.provider.MethodSource; |
| 11 | + |
| 12 | +public class StalinSortTest { |
| 13 | + |
| 14 | + @ParameterizedTest |
| 15 | + @MethodSource("provideArraysForStalinSort") |
| 16 | + public void testStalinSort(Comparable[] inputArray, Comparable[] expectedArray) { |
| 17 | + StalinSort stalinSort = new StalinSort(); |
| 18 | + assertArrayEquals(expectedArray, stalinSort.sort(inputArray)); |
| 19 | + } |
| 20 | + |
| 21 | + private static Stream<Arguments> provideArraysForStalinSort() { |
| 22 | + return Stream.of( |
| 23 | + // Test empty array |
| 24 | + Arguments.of(new Integer[] {}, new Integer[] {}), |
| 25 | + |
| 26 | + // Test single element array |
| 27 | + Arguments.of(new Integer[] {4}, new Integer[] {4}), |
| 28 | + |
| 29 | + // Test array with multiple elements |
| 30 | + Arguments.of(new Integer[] {4, 23, 6, 78, 1, 54, 231, 9, 12}, new Integer[] {4, 23, 78, 231}), |
| 31 | + Arguments.of(new Integer[] {5, 5, 5, 5, 5}, new Integer[] {5, 5, 5, 5, 5}), |
| 32 | + Arguments.of(new Integer[] {1, 2, 3, 4, 5}, new Integer[] {1, 2, 3, 4, 5}), |
| 33 | + Arguments.of(new Integer[] {5, 4, 3, 2, 1}, new Integer[] {5}), |
| 34 | + Arguments.of(new String[] {"c", "a", "e", "b", "d"}, new String[] {"c", "e"}), |
| 35 | + |
| 36 | + // Test with negative numbers |
| 37 | + Arguments.of(new Integer[] {-1, -2, -3, 4, 5}, new Integer[] {-1, 4, 5}), |
| 38 | + Arguments.of(new Integer[] {0, -1, -2, 1, 2}, new Integer[] {0, 1, 2}), |
| 39 | + |
| 40 | + // Test mixed values (positive, negative, zero) |
| 41 | + Arguments.of(new Integer[] {3, -1, 0, -5, 2}, new Integer[] {3}), |
| 42 | + |
| 43 | + // Test with duplicate values |
| 44 | + Arguments.of(new Integer[] {10, 10, 10, 10}, new Integer[] {10, 10, 10, 10}), |
| 45 | + Arguments.of(new Integer[] {1, 2, 2, 3, 3, 3, 4}, new Integer[] {1, 2, 2, 3, 3, 3, 4}), |
| 46 | + |
| 47 | + // Test large numbers |
| 48 | + Arguments.of(new Integer[] {Integer.MAX_VALUE, Integer.MIN_VALUE, 0}, new Integer[] {Integer.MAX_VALUE}), |
| 49 | + |
| 50 | + // Test with characters |
| 51 | + Arguments.of(new Character[] {'d', 'a', 'c', 'b'}, new Character[] {'d'}), |
| 52 | + |
| 53 | + // Test with a large dataset |
| 54 | + Arguments.of(new Integer[] {100, 200, 150, 300, 250, 400, 350, 450, 500}, new Integer[] {100, 200, 300, 400, 500}) |
| 55 | + ); |
| 56 | + } |
| 57 | + |
| 58 | + @Test |
| 59 | + public void testWithEmptyArray() { |
| 60 | + StalinSort stalinSort = new StalinSort(); |
| 61 | + Integer[] inputArray = {}; |
| 62 | + Integer[] expectedArray = {}; |
| 63 | + assertArrayEquals(expectedArray, stalinSort.sort(inputArray)); |
| 64 | + } |
| 65 | + |
| 66 | + @Test |
| 67 | + public void testWithNullValues() { |
| 68 | + assertThrows(NullPointerException.class, () -> { |
| 69 | + StalinSort stalinSort = new StalinSort(); |
| 70 | + stalinSort.sort(null); |
| 71 | + }); |
| 72 | + } |
| 73 | + |
| 74 | + @Test |
| 75 | + public void testWithMixedDataTypes() { |
| 76 | + // This test checks the algorithm's capability with mixed types, if applicable. |
| 77 | + // Note: Ensure that your algorithm is capable of handling mixed types; if not, this test will fail. |
| 78 | + assertThrows(ClassCastException.class, () -> { |
| 79 | + StalinSort stalinSort = new StalinSort(); |
| 80 | + stalinSort.sort(new Comparable[] {"a", 1}); |
| 81 | + }); |
| 82 | + } |
| 83 | +} |
0 commit comments