From 8f55a769c4ebd37e8113f6125550269a25ca2fd2 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 19:49:54 +0530 Subject: [PATCH 1/4] Add tests, remove `main` in `RangeInSortedArray` --- .../misc/RangeInSortedArray.java | 9 --- .../misc/RangeInSortedArrayTest.java | 64 +++++++++++++++++++ 2 files changed, 64 insertions(+), 9 deletions(-) create mode 100644 src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java diff --git a/src/main/java/com/thealgorithms/misc/RangeInSortedArray.java b/src/main/java/com/thealgorithms/misc/RangeInSortedArray.java index 0dfc8ac32a6f..6d3caa1814b6 100644 --- a/src/main/java/com/thealgorithms/misc/RangeInSortedArray.java +++ b/src/main/java/com/thealgorithms/misc/RangeInSortedArray.java @@ -1,18 +1,9 @@ package com.thealgorithms.misc; -import java.util.Arrays; - public final class RangeInSortedArray { private RangeInSortedArray() { } - public static void main(String[] args) { - // Testcases - assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 3), new int[] {2, 4}); - assert Arrays.equals(sortedRange(new int[] {1, 2, 3, 3, 3, 4, 5}, 4), new int[] {5, 5}); - assert Arrays.equals(sortedRange(new int[] {0, 1, 2}, 3), new int[] {-1, -1}); - } - // Get the 1st and last occurrence index of a number 'key' in a non-decreasing array 'nums' // Gives [-1, -1] in case element doesn't exist in array public static int[] sortedRange(int[] nums, int key) { diff --git a/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java b/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java new file mode 100644 index 000000000000..4670635fc0fb --- /dev/null +++ b/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java @@ -0,0 +1,64 @@ +package com.thealgorithms.misc; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class RangeInSortedArrayTest { + + @Test + public void testSortedRangeWithMultipleOccurrences() { + int[] nums = {1, 2, 3, 3, 3, 4, 5}; + assertArrayEquals(new int[] {2, 4}, RangeInSortedArray.sortedRange(nums, 3), "Range for key 3 should be [2, 4]"); + } + + @Test + public void testSortedRangeWithSingleOccurrence() { + int[] nums = {1, 2, 3, 3, 3, 4, 5}; + assertArrayEquals(new int[] {5, 5}, RangeInSortedArray.sortedRange(nums, 4), "Range for key 4 should be [5, 5]"); + } + + @Test + public void testSortedRangeWithNoOccurrences() { + int[] nums = {0, 1, 2}; + assertArrayEquals(new int[] {-1, -1}, RangeInSortedArray.sortedRange(nums, 3), "Range for key 3 should be [-1, -1] since it doesn't exist"); + } + + @Test + public void testSortedRangeInEmptyArray() { + int[] nums = {}; + assertArrayEquals(new int[] {-1, -1}, RangeInSortedArray.sortedRange(nums, 1), "Range for any key in an empty array should be [-1, -1]"); + } + + @Test + public void testSortedRangeAtStartAndEnd() { + int[] nums = {1, 1, 1, 2, 3, 4, 5, 5, 5}; + assertArrayEquals(new int[] {0, 2}, RangeInSortedArray.sortedRange(nums, 1), "Range for key 1 should be [0, 2]"); + assertArrayEquals(new int[] {6, 8}, RangeInSortedArray.sortedRange(nums, 5), "Range for key 5 should be [6, 8]"); + } + + @Test + public void testGetCountLessThanWithExistingKey() { + int[] nums = {1, 2, 3, 3, 4, 5}; + assertEquals(4, RangeInSortedArray.getCountLessThan(nums, 3), "Count of elements less than 3 should be 2"); + } + + @Test + public void testGetCountLessThanWithNonExistingKey() { + int[] nums = {1, 2, 3, 3, 4, 5}; + assertEquals(5, RangeInSortedArray.getCountLessThan(nums, 4), "Count of elements less than 4 should be 5"); + } + + @Test + public void testGetCountLessThanWithAllSmallerElements() { + int[] nums = {1, 2, 2, 3}; + assertEquals(4, RangeInSortedArray.getCountLessThan(nums, 5), "Count of elements less than 5 should be 4"); + } + + @Test + public void testGetCountLessThanWithNoSmallerElements() { + int[] nums = {2, 3, 4, 5}; + assertEquals(0, RangeInSortedArray.getCountLessThan(nums, 1), "Count of elements less than 1 should be 0"); + } +} From abc9f3bf7402ba4b9a362fe0f81ae3bfaf954e41 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Sun, 13 Oct 2024 14:20:11 +0000 Subject: [PATCH 2/4] Update directory --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 06307d4aca78..d6ab4c8addb9 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -995,6 +995,7 @@ * [MedianOfRunningArrayTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MedianOfRunningArrayTest.java) * [MirrorOfMatrixTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/MirrorOfMatrixTest.java) * [PalindromeSinglyLinkedListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/PalindromeSinglyLinkedListTest.java) + * [RangeInSortedArrayTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java) * [TwoSumProblemTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/TwoSumProblemTest.java) * others * [ArrayLeftRotationTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/ArrayLeftRotationTest.java) From c8c415cd0885c1592fc8f8c9351d1470cc350219 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 20:07:43 +0530 Subject: [PATCH 3/4] Fix --- .../java/com/thealgorithms/misc/RangeInSortedArrayTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java b/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java index 4670635fc0fb..8b0e74f09b43 100644 --- a/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java +++ b/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java @@ -61,4 +61,10 @@ public void testGetCountLessThanWithNoSmallerElements() { int[] nums = {2, 3, 4, 5}; assertEquals(0, RangeInSortedArray.getCountLessThan(nums, 1), "Count of elements less than 1 should be 0"); } + + @Test + public void testGetCountLessThanWithEmptyArray() { + int[] nums = {}; + assertEquals(0, RangeInSortedArray.getCountLessThan(nums, 1), "Count of elements less than 1 in an empty array should be 0"); + } } From 4345eebfb7f9cd3f1df7ec11ea9d7cdcc6175a83 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Mon, 14 Oct 2024 08:43:02 +0530 Subject: [PATCH 4/4] Fix --- .../misc/RangeInSortedArrayTest.java | 73 +++++-------------- 1 file changed, 19 insertions(+), 54 deletions(-) diff --git a/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java b/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java index 8b0e74f09b43..7630d3e78dc7 100644 --- a/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java +++ b/src/test/java/com/thealgorithms/misc/RangeInSortedArrayTest.java @@ -3,68 +3,33 @@ import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; -import org.junit.jupiter.api.Test; +import java.util.stream.Stream; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; public class RangeInSortedArrayTest { - @Test - public void testSortedRangeWithMultipleOccurrences() { - int[] nums = {1, 2, 3, 3, 3, 4, 5}; - assertArrayEquals(new int[] {2, 4}, RangeInSortedArray.sortedRange(nums, 3), "Range for key 3 should be [2, 4]"); + @ParameterizedTest(name = "Test case {index}: {3}") + @MethodSource("provideSortedRangeTestCases") + void testSortedRange(int[] nums, int key, int[] expectedRange, String description) { + assertArrayEquals(expectedRange, RangeInSortedArray.sortedRange(nums, key), description); } - @Test - public void testSortedRangeWithSingleOccurrence() { - int[] nums = {1, 2, 3, 3, 3, 4, 5}; - assertArrayEquals(new int[] {5, 5}, RangeInSortedArray.sortedRange(nums, 4), "Range for key 4 should be [5, 5]"); + private static Stream provideSortedRangeTestCases() { + return Stream.of(Arguments.of(new int[] {1, 2, 3, 3, 3, 4, 5}, 3, new int[] {2, 4}, "Range for key 3 with multiple occurrences"), Arguments.of(new int[] {1, 2, 3, 3, 3, 4, 5}, 4, new int[] {5, 5}, "Range for key 4 with single occurrence"), + Arguments.of(new int[] {0, 1, 2}, 3, new int[] {-1, -1}, "Range for non-existent key"), Arguments.of(new int[] {}, 1, new int[] {-1, -1}, "Range in empty array"), Arguments.of(new int[] {1, 1, 1, 2, 3, 4, 5, 5, 5}, 1, new int[] {0, 2}, "Range for key at start"), + Arguments.of(new int[] {1, 1, 1, 2, 3, 4, 5, 5, 5}, 5, new int[] {6, 8}, "Range for key at end")); } - @Test - public void testSortedRangeWithNoOccurrences() { - int[] nums = {0, 1, 2}; - assertArrayEquals(new int[] {-1, -1}, RangeInSortedArray.sortedRange(nums, 3), "Range for key 3 should be [-1, -1] since it doesn't exist"); + @ParameterizedTest(name = "Test case {index}: {3}") + @MethodSource("provideGetCountLessThanTestCases") + void testGetCountLessThan(int[] nums, int key, int expectedCount, String description) { + assertEquals(expectedCount, RangeInSortedArray.getCountLessThan(nums, key), description); } - @Test - public void testSortedRangeInEmptyArray() { - int[] nums = {}; - assertArrayEquals(new int[] {-1, -1}, RangeInSortedArray.sortedRange(nums, 1), "Range for any key in an empty array should be [-1, -1]"); - } - - @Test - public void testSortedRangeAtStartAndEnd() { - int[] nums = {1, 1, 1, 2, 3, 4, 5, 5, 5}; - assertArrayEquals(new int[] {0, 2}, RangeInSortedArray.sortedRange(nums, 1), "Range for key 1 should be [0, 2]"); - assertArrayEquals(new int[] {6, 8}, RangeInSortedArray.sortedRange(nums, 5), "Range for key 5 should be [6, 8]"); - } - - @Test - public void testGetCountLessThanWithExistingKey() { - int[] nums = {1, 2, 3, 3, 4, 5}; - assertEquals(4, RangeInSortedArray.getCountLessThan(nums, 3), "Count of elements less than 3 should be 2"); - } - - @Test - public void testGetCountLessThanWithNonExistingKey() { - int[] nums = {1, 2, 3, 3, 4, 5}; - assertEquals(5, RangeInSortedArray.getCountLessThan(nums, 4), "Count of elements less than 4 should be 5"); - } - - @Test - public void testGetCountLessThanWithAllSmallerElements() { - int[] nums = {1, 2, 2, 3}; - assertEquals(4, RangeInSortedArray.getCountLessThan(nums, 5), "Count of elements less than 5 should be 4"); - } - - @Test - public void testGetCountLessThanWithNoSmallerElements() { - int[] nums = {2, 3, 4, 5}; - assertEquals(0, RangeInSortedArray.getCountLessThan(nums, 1), "Count of elements less than 1 should be 0"); - } - - @Test - public void testGetCountLessThanWithEmptyArray() { - int[] nums = {}; - assertEquals(0, RangeInSortedArray.getCountLessThan(nums, 1), "Count of elements less than 1 in an empty array should be 0"); + private static Stream provideGetCountLessThanTestCases() { + return Stream.of(Arguments.of(new int[] {1, 2, 3, 3, 4, 5}, 3, 4, "Count of elements less than existing key"), Arguments.of(new int[] {1, 2, 3, 3, 4, 5}, 4, 5, "Count of elements less than non-existing key"), Arguments.of(new int[] {1, 2, 2, 3}, 5, 4, "Count with all smaller elements"), + Arguments.of(new int[] {2, 3, 4, 5}, 1, 0, "Count with no smaller elements"), Arguments.of(new int[] {}, 1, 0, "Count in empty array")); } }