From fc7a85b7bc9e87764d79d77cd49274bdcb73477a Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Wed, 9 Oct 2024 12:33:49 +0530 Subject: [PATCH 1/3] Add tests, remove `main` in `SaddlebackSearch` --- .../searches/SaddlebackSearch.java | 35 +----- .../searches/SaddlebackSearchTest.java | 109 ++++++++++++++++++ 2 files changed, 115 insertions(+), 29 deletions(-) create mode 100644 src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java diff --git a/src/main/java/com/thealgorithms/searches/SaddlebackSearch.java b/src/main/java/com/thealgorithms/searches/SaddlebackSearch.java index 5c7a914e3bf2..192c4d26c735 100644 --- a/src/main/java/com/thealgorithms/searches/SaddlebackSearch.java +++ b/src/main/java/com/thealgorithms/searches/SaddlebackSearch.java @@ -1,7 +1,5 @@ package com.thealgorithms.searches; -import java.util.Scanner; - /** * Program to perform Saddleback Search Given a sorted 2D array(elements are * sorted across every row and column, assuming ascending order) of size n*m we @@ -27,10 +25,15 @@ private SaddlebackSearch() { * @param row the current row. * @param col the current column. * @param key the element that we want to search for. + * @throws IllegalArgumentException if the array is empty. * @return The index(row and column) of the element if found. Else returns * -1 -1. */ - private static int[] find(int[][] arr, int row, int col, int key) { + static int[] find(int[][] arr, int row, int col, int key) { + if (arr.length == 0) { + throw new IllegalArgumentException("Array is empty"); + } + // array to store the answer row and column int[] ans = {-1, -1}; if (row < 0 || col >= arr[row].length) { @@ -47,30 +50,4 @@ else if (arr[row][col] > key) { // else we move right return find(arr, row, col + 1, key); } - - /** - * Main method - * - * @param args Command line arguments - */ - public static void main(String[] args) { - // TODO Auto-generated method stub - Scanner sc = new Scanner(System.in); - int[][] arr; - int i; - int j; - int rows = sc.nextInt(); - int col = sc.nextInt(); - arr = new int[rows][col]; - for (i = 0; i < rows; i++) { - for (j = 0; j < col; j++) { - arr[i][j] = sc.nextInt(); - } - } - int ele = sc.nextInt(); - // we start from bottom left corner - int[] ans = find(arr, rows - 1, 0, ele); - System.out.println(ans[0] + " " + ans[1]); - sc.close(); - } } diff --git a/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java b/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java new file mode 100644 index 000000000000..76c036d639b6 --- /dev/null +++ b/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java @@ -0,0 +1,109 @@ +package com.thealgorithms.searches; + +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +import org.junit.jupiter.api.Test; + +class SaddlebackSearchTest { + + /** + * Test searching for an element that exists in the array. + */ + @Test + void testFindElementExists() { + int[][] arr = { + {-10, -5, -3, 4, 9}, + {-6, -2, 0, 5, 10}, + {-4, -1, 1, 6, 12}, + {2, 3, 7, 8, 13}, + {100, 120, 130, 140, 150} + }; + + int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, 4); + assertArrayEquals(new int[]{0, 3}, result, "Element 4 should be found at (0, 3)"); + } + + /** + * Test searching for an element that does not exist in the array. + */ + @Test + void testFindElementNotExists() { + int[][] arr = { + {-10, -5, -3, 4, 9}, + {-6, -2, 0, 5, 10}, + {-4, -1, 1, 6, 12}, + {2, 3, 7, 8, 13}, + {100, 120, 130, 140, 150} + }; + + int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, 1000); + assertArrayEquals(new int[]{-1, -1}, result, "Element 1000 should not be found"); + } + + /** + * Test searching for the smallest element in the array. + */ + @Test + void testFindSmallestElement() { + int[][] arr = { + {-10, -5, -3, 4, 9}, + {-6, -2, 0, 5, 10}, + {-4, -1, 1, 6, 12}, + {2, 3, 7, 8, 13}, + {100, 120, 130, 140, 150} + }; + + int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, -10); + assertArrayEquals(new int[]{0, 0}, result, "Element -10 should be found at (0, 0)"); + } + + /** + * Test searching for the largest element in the array. + */ + @Test + void testFindLargestElement() { + int[][] arr = { + {-10, -5, -3, 4, 9}, + {-6, -2, 0, 5, 10}, + {-4, -1, 1, 6, 12}, + {2, 3, 7, 8, 13}, + {100, 120, 130, 140, 150} + }; + + int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, 150); + assertArrayEquals(new int[]{4, 4}, result, "Element 150 should be found at (4, 4)"); + } + + /** + * Test searching in an empty array. + */ + @Test + void testFindInEmptyArray() { + int[][] arr = {}; + + assertThrows(IllegalArgumentException.class, () -> { SaddlebackSearch.find(arr, 0, 0, 4); }); + } + + /** + * Test searching in a single element array that matches the search key. + */ + @Test + void testFindSingleElementExists() { + int[][] arr = {{5}}; + + int[] result = SaddlebackSearch.find(arr, 0, 0, 5); + assertArrayEquals(new int[]{0, 0}, result, "Element 5 should be found at (0, 0)"); + } + + /** + * Test searching in a single element array that does not match the search key. + */ + @Test + void testFindSingleElementNotExists() { + int[][] arr = {{5}}; + + int[] result = SaddlebackSearch.find(arr, 0, 0, 10); + assertArrayEquals(new int[]{-1, -1}, result, "Element 10 should not be found in single element array"); + } +} From 54e3c3db8c16743ad915a2b41699b066a5b5133d Mon Sep 17 00:00:00 2001 From: Hardvan Date: Wed, 9 Oct 2024 07:04:07 +0000 Subject: [PATCH 2/3] Update directory --- DIRECTORY.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 6042dd1b5e0d..c90f4e3e0776 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -31,6 +31,7 @@ * [IsPowerTwo](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/IsPowerTwo.java) * [LowestSetBit](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/LowestSetBit.java) * [NonRepeatingNumberFinder](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinder.java) + * [NumberAppearingOddTimes](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimes.java) * [NumbersDifferentSigns](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/NumbersDifferentSigns.java) * [ReverseBits](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/ReverseBits.java) * [SingleBitOperations](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/bitmanipulation/SingleBitOperations.java) @@ -638,6 +639,7 @@ * [IsPowerTwoTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/IsPowerTwoTest.java) * [LowestSetBitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/LowestSetBitTest.java) * [NonRepeatingNumberFinderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NonRepeatingNumberFinderTest.java) + * [NumberAppearingOddTimesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NumberAppearingOddTimesTest.java) * [NumbersDifferentSignsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/NumbersDifferentSignsTest.java) * [ReverseBitsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/ReverseBitsTest.java) * [SingleBitOperationsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/bitmanipulation/SingleBitOperationsTest.java) @@ -976,6 +978,7 @@ * [RabinKarpAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/RabinKarpAlgorithmTest.java) * [RecursiveBinarySearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/RecursiveBinarySearchTest.java) * [RowColumnWiseSorted2dArrayBinarySearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/RowColumnWiseSorted2dArrayBinarySearchTest.java) + * [SaddlebackSearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java) * [SortOrderAgnosticBinarySearchTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/SortOrderAgnosticBinarySearchTest.java) * [TestSearchInARowAndColWiseSortedMatrix](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/searches/TestSearchInARowAndColWiseSortedMatrix.java) * sorts From 2ffe3f275bb9e5c115e5db014d852c08d89cfb0f Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Wed, 9 Oct 2024 12:48:23 +0530 Subject: [PATCH 3/3] Fix --- .../searches/SaddlebackSearchTest.java | 44 +++++-------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java b/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java index 76c036d639b6..ec22cbf38152 100644 --- a/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java +++ b/src/test/java/com/thealgorithms/searches/SaddlebackSearchTest.java @@ -12,16 +12,10 @@ class SaddlebackSearchTest { */ @Test void testFindElementExists() { - int[][] arr = { - {-10, -5, -3, 4, 9}, - {-6, -2, 0, 5, 10}, - {-4, -1, 1, 6, 12}, - {2, 3, 7, 8, 13}, - {100, 120, 130, 140, 150} - }; + int[][] arr = {{-10, -5, -3, 4, 9}, {-6, -2, 0, 5, 10}, {-4, -1, 1, 6, 12}, {2, 3, 7, 8, 13}, {100, 120, 130, 140, 150}}; int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, 4); - assertArrayEquals(new int[]{0, 3}, result, "Element 4 should be found at (0, 3)"); + assertArrayEquals(new int[] {0, 3}, result, "Element 4 should be found at (0, 3)"); } /** @@ -29,16 +23,10 @@ void testFindElementExists() { */ @Test void testFindElementNotExists() { - int[][] arr = { - {-10, -5, -3, 4, 9}, - {-6, -2, 0, 5, 10}, - {-4, -1, 1, 6, 12}, - {2, 3, 7, 8, 13}, - {100, 120, 130, 140, 150} - }; + int[][] arr = {{-10, -5, -3, 4, 9}, {-6, -2, 0, 5, 10}, {-4, -1, 1, 6, 12}, {2, 3, 7, 8, 13}, {100, 120, 130, 140, 150}}; int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, 1000); - assertArrayEquals(new int[]{-1, -1}, result, "Element 1000 should not be found"); + assertArrayEquals(new int[] {-1, -1}, result, "Element 1000 should not be found"); } /** @@ -46,16 +34,10 @@ void testFindElementNotExists() { */ @Test void testFindSmallestElement() { - int[][] arr = { - {-10, -5, -3, 4, 9}, - {-6, -2, 0, 5, 10}, - {-4, -1, 1, 6, 12}, - {2, 3, 7, 8, 13}, - {100, 120, 130, 140, 150} - }; + int[][] arr = {{-10, -5, -3, 4, 9}, {-6, -2, 0, 5, 10}, {-4, -1, 1, 6, 12}, {2, 3, 7, 8, 13}, {100, 120, 130, 140, 150}}; int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, -10); - assertArrayEquals(new int[]{0, 0}, result, "Element -10 should be found at (0, 0)"); + assertArrayEquals(new int[] {0, 0}, result, "Element -10 should be found at (0, 0)"); } /** @@ -63,16 +45,10 @@ void testFindSmallestElement() { */ @Test void testFindLargestElement() { - int[][] arr = { - {-10, -5, -3, 4, 9}, - {-6, -2, 0, 5, 10}, - {-4, -1, 1, 6, 12}, - {2, 3, 7, 8, 13}, - {100, 120, 130, 140, 150} - }; + int[][] arr = {{-10, -5, -3, 4, 9}, {-6, -2, 0, 5, 10}, {-4, -1, 1, 6, 12}, {2, 3, 7, 8, 13}, {100, 120, 130, 140, 150}}; int[] result = SaddlebackSearch.find(arr, arr.length - 1, 0, 150); - assertArrayEquals(new int[]{4, 4}, result, "Element 150 should be found at (4, 4)"); + assertArrayEquals(new int[] {4, 4}, result, "Element 150 should be found at (4, 4)"); } /** @@ -93,7 +69,7 @@ void testFindSingleElementExists() { int[][] arr = {{5}}; int[] result = SaddlebackSearch.find(arr, 0, 0, 5); - assertArrayEquals(new int[]{0, 0}, result, "Element 5 should be found at (0, 0)"); + assertArrayEquals(new int[] {0, 0}, result, "Element 5 should be found at (0, 0)"); } /** @@ -104,6 +80,6 @@ void testFindSingleElementNotExists() { int[][] arr = {{5}}; int[] result = SaddlebackSearch.find(arr, 0, 0, 10); - assertArrayEquals(new int[]{-1, -1}, result, "Element 10 should not be found in single element array"); + assertArrayEquals(new int[] {-1, -1}, result, "Element 10 should not be found in single element array"); } }