From 7b097859628d551f3422880905404e7ae1a41345 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Sun, 13 Oct 2024 20:00:15 +0530 Subject: [PATCH 1/6] Add tests, remove `main` in `RangeInSortedArray` --- .../thealgorithms/misc/ThreeSumProblem.java | 19 ----- .../misc/ThreeSumProblemTest.java | 76 +++++++++++++++++++ 2 files changed, 76 insertions(+), 19 deletions(-) create mode 100644 src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java diff --git a/src/main/java/com/thealgorithms/misc/ThreeSumProblem.java b/src/main/java/com/thealgorithms/misc/ThreeSumProblem.java index 1c5f4a440532..8ef10758ef80 100644 --- a/src/main/java/com/thealgorithms/misc/ThreeSumProblem.java +++ b/src/main/java/com/thealgorithms/misc/ThreeSumProblem.java @@ -7,29 +7,10 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; -import java.util.Scanner; import java.util.Set; public class ThreeSumProblem { - public static void main(String[] args) { - Scanner scan = new Scanner(System.in); - System.out.print("Enter the target sum "); - int ts = scan.nextInt(); - System.out.print("Enter the number of elements in the array "); - int n = scan.nextInt(); - System.out.println("Enter all your array elements:"); - int[] arr = new int[n]; - for (int i = 0; i < n; i++) { - arr[i] = scan.nextInt(); - } - ThreeSumProblem th = new ThreeSumProblem(); - System.out.println("Brute Force Approach\n" + (th.bruteForce(arr, ts)) + "\n"); - System.out.println("Two Pointer Approach\n" + (th.twoPointer(arr, ts)) + "\n"); - System.out.println("Hashmap Approach\n" + (th.hashMap(arr, ts))); - scan.close(); - } - public List> bruteForce(int[] nums, int target) { List> arr = new ArrayList>(); diff --git a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java new file mode 100644 index 000000000000..5bafdd06e04a --- /dev/null +++ b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java @@ -0,0 +1,76 @@ +package com.thealgorithms.misc; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class ThreeSumProblemTest { + + private ThreeSumProblem tsp; + + @BeforeEach + public void setup() { + tsp = new ThreeSumProblem(); // Initialize the class before each test + } + + @Test + public void testBruteForce_ValidTriplets() { + int[] nums = {1, 2, -3, 4, -2, -1}; + int target = 0; + List> expected = Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-3, -1, 4)); + assertEquals(expected, tsp.bruteForce(nums, target)); + } + + @Test + public void testBruteForce_NoTripletFound() { + int[] nums = {1, 2, 3, 4, 5}; + int target = 50; // No valid triplet exists + List> expected = new ArrayList<>(); // Expecting an empty list + assertEquals(expected, tsp.bruteForce(nums, target)); + } + + @Test + public void testTwoPointer_ValidTriplets() { + int[] nums = {0, -1, 2, -3, 1}; + int target = 0; + List> expected = Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-1, 0, 1)); + assertEquals(expected, tsp.twoPointer(nums, target)); + } + + @Test + public void testTwoPointer_NegativeNumbers() { + int[] nums = {-5, -4, -3, -2, -1}; + int target = -10; + List> expected = Arrays.asList(Arrays.asList(-5, -4, -1), Arrays.asList(-5, -3, -2)); + assertEquals(expected, tsp.twoPointer(nums, target)); + } + + @Test + public void testHashMap_ValidTriplets() { + int[] nums = {1, 2, -1, -4, 3, 0}; + int target = 2; + List> expected = Arrays.asList(Arrays.asList(-1, 0, 3), Arrays.asList(-1, 1, 2) // Check for distinct triplets + ); + assertEquals(expected, tsp.hashMap(nums, target)); + } + + @Test + public void testHashMap_NoTripletFound() { + int[] nums = {5, 7, 9, 11}; + int target = 10; + List> expected = new ArrayList<>(); + assertEquals(expected, tsp.hashMap(nums, target)); + } + + @Test + public void testHashMap_EmptyArray() { + int[] nums = {}; + int target = 0; + List> expected = new ArrayList<>(); + assertEquals(expected, tsp.hashMap(nums, target)); + } +} From 05193b656e09edcef91ddaa36a7ea1a30a316d31 Mon Sep 17 00:00:00 2001 From: Hardvan Date: Sun, 13 Oct 2024 14:30:30 +0000 Subject: [PATCH 2/6] Update directory --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index 06307d4aca78..5d015762cb63 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) + * [ThreeSumProblemTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.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 85d76b969d70d64d0e1153865602e7c6dad6166f Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Mon, 14 Oct 2024 08:16:43 +0530 Subject: [PATCH 3/6] Fix --- .../thealgorithms/misc/ThreeSumProblemTest.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java index 5bafdd06e04a..4a0505eee2b7 100644 --- a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java +++ b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java @@ -18,7 +18,7 @@ public void setup() { } @Test - public void testBruteForce_ValidTriplets() { + public void testBruteForceValidTriplets() { int[] nums = {1, 2, -3, 4, -2, -1}; int target = 0; List> expected = Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-3, -1, 4)); @@ -26,7 +26,7 @@ public void testBruteForce_ValidTriplets() { } @Test - public void testBruteForce_NoTripletFound() { + public void testBruteForceNoTripletFound() { int[] nums = {1, 2, 3, 4, 5}; int target = 50; // No valid triplet exists List> expected = new ArrayList<>(); // Expecting an empty list @@ -34,7 +34,7 @@ public void testBruteForce_NoTripletFound() { } @Test - public void testTwoPointer_ValidTriplets() { + public void testTwoPointerValidTriplets() { int[] nums = {0, -1, 2, -3, 1}; int target = 0; List> expected = Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-1, 0, 1)); @@ -42,7 +42,7 @@ public void testTwoPointer_ValidTriplets() { } @Test - public void testTwoPointer_NegativeNumbers() { + public void testTwoPointerNegativeNumbers() { int[] nums = {-5, -4, -3, -2, -1}; int target = -10; List> expected = Arrays.asList(Arrays.asList(-5, -4, -1), Arrays.asList(-5, -3, -2)); @@ -50,7 +50,7 @@ public void testTwoPointer_NegativeNumbers() { } @Test - public void testHashMap_ValidTriplets() { + public void testHashMapValidTriplets() { int[] nums = {1, 2, -1, -4, 3, 0}; int target = 2; List> expected = Arrays.asList(Arrays.asList(-1, 0, 3), Arrays.asList(-1, 1, 2) // Check for distinct triplets @@ -59,7 +59,7 @@ public void testHashMap_ValidTriplets() { } @Test - public void testHashMap_NoTripletFound() { + public void testHashMapNoTripletFound() { int[] nums = {5, 7, 9, 11}; int target = 10; List> expected = new ArrayList<>(); @@ -67,7 +67,7 @@ public void testHashMap_NoTripletFound() { } @Test - public void testHashMap_EmptyArray() { + public void testHashMapEmptyArray() { int[] nums = {}; int target = 0; List> expected = new ArrayList<>(); From 2bec18fa969d788bc87c41129815e4c14ba75f5f Mon Sep 17 00:00:00 2001 From: Hardvan Date: Mon, 14 Oct 2024 12:51:03 +0000 Subject: [PATCH 4/6] Update directory --- DIRECTORY.md | 1 + 1 file changed, 1 insertion(+) diff --git a/DIRECTORY.md b/DIRECTORY.md index c28e2cb83dbb..4d81df78b04c 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -1019,6 +1019,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) * [ThreeSumProblemTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java) * [TwoSumProblemTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/TwoSumProblemTest.java) * [WordBoggleTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/misc/WordBoggleTest.java) From 30fa37276a8f87c79a727af4adbc1399219866ce Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Mon, 14 Oct 2024 18:22:02 +0530 Subject: [PATCH 5/6] Fix --- .../misc/ThreeSumProblemTest.java | 64 ++++++------------- 1 file changed, 20 insertions(+), 44 deletions(-) diff --git a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java index 4a0505eee2b7..ab250e41ff05 100644 --- a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java +++ b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java @@ -5,8 +5,11 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; public class ThreeSumProblemTest { @@ -17,60 +20,33 @@ public void setup() { tsp = new ThreeSumProblem(); // Initialize the class before each test } - @Test - public void testBruteForceValidTriplets() { - int[] nums = {1, 2, -3, 4, -2, -1}; - int target = 0; - List> expected = Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-3, -1, 4)); + @ParameterizedTest + @MethodSource("bruteForceTestProvider") + public void testBruteForce(int[] nums, int target, List> expected) { assertEquals(expected, tsp.bruteForce(nums, target)); } - @Test - public void testBruteForceNoTripletFound() { - int[] nums = {1, 2, 3, 4, 5}; - int target = 50; // No valid triplet exists - List> expected = new ArrayList<>(); // Expecting an empty list - assertEquals(expected, tsp.bruteForce(nums, target)); - } - - @Test - public void testTwoPointerValidTriplets() { - int[] nums = {0, -1, 2, -3, 1}; - int target = 0; - List> expected = Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-1, 0, 1)); + @ParameterizedTest + @MethodSource("twoPointerTestProvider") + public void testTwoPointer(int[] nums, int target, List> expected) { assertEquals(expected, tsp.twoPointer(nums, target)); } - @Test - public void testTwoPointerNegativeNumbers() { - int[] nums = {-5, -4, -3, -2, -1}; - int target = -10; - List> expected = Arrays.asList(Arrays.asList(-5, -4, -1), Arrays.asList(-5, -3, -2)); - assertEquals(expected, tsp.twoPointer(nums, target)); + @ParameterizedTest + @MethodSource("hashMapTestProvider") + public void testHashMap(int[] nums, int target, List> expected) { + assertEquals(expected, tsp.hashMap(nums, target)); } - @Test - public void testHashMapValidTriplets() { - int[] nums = {1, 2, -1, -4, 3, 0}; - int target = 2; - List> expected = Arrays.asList(Arrays.asList(-1, 0, 3), Arrays.asList(-1, 1, 2) // Check for distinct triplets - ); - assertEquals(expected, tsp.hashMap(nums, target)); + private static Stream bruteForceTestProvider() { + return Stream.of(Arguments.of(new int[] {1, 2, -3, 4, -2, -1}, 0, Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-3, -1, 4))), Arguments.of(new int[] {1, 2, 3, 4, 5}, 50, new ArrayList<>())); } - @Test - public void testHashMapNoTripletFound() { - int[] nums = {5, 7, 9, 11}; - int target = 10; - List> expected = new ArrayList<>(); - assertEquals(expected, tsp.hashMap(nums, target)); + private static Stream twoPointerTestProvider() { + return Stream.of(Arguments.of(new int[] {0, -1, 2, -3, 1}, 0, Arrays.asList(Arrays.asList(-3, 1, 2), Arrays.asList(-1, 0, 1))), Arguments.of(new int[] {-5, -4, -3, -2, -1}, -10, Arrays.asList(Arrays.asList(-5, -4, -1), Arrays.asList(-5, -3, -2)))); } - @Test - public void testHashMapEmptyArray() { - int[] nums = {}; - int target = 0; - List> expected = new ArrayList<>(); - assertEquals(expected, tsp.hashMap(nums, target)); + private static Stream hashMapTestProvider() { + return Stream.of(Arguments.of(new int[] {1, 2, -1, -4, 3, 0}, 2, Arrays.asList(Arrays.asList(-1, 0, 3), Arrays.asList(-1, 1, 2))), Arguments.of(new int[] {5, 7, 9, 11}, 10, new ArrayList<>()), Arguments.of(new int[] {}, 0, new ArrayList<>())); } } From 91420eb6a667e4fd8560d426f460529ea431cbc8 Mon Sep 17 00:00:00 2001 From: Hardik Pawar Date: Mon, 14 Oct 2024 18:22:39 +0530 Subject: [PATCH 6/6] Fix --- src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java index ab250e41ff05..5353168216ec 100644 --- a/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java +++ b/src/test/java/com/thealgorithms/misc/ThreeSumProblemTest.java @@ -17,7 +17,7 @@ public class ThreeSumProblemTest { @BeforeEach public void setup() { - tsp = new ThreeSumProblem(); // Initialize the class before each test + tsp = new ThreeSumProblem(); } @ParameterizedTest