From 6ddb26f48d79b983a3f8f2509fae4c67aef612f7 Mon Sep 17 00:00:00 2001 From: Hardik Pawar <97388607+Hardvan@users.noreply.github.com> Date: Thu, 10 Oct 2024 00:34:04 +0530 Subject: [PATCH] Add tests, remove `main` & `print` methods in `CoinChange.java` (#5642) --- DIRECTORY.md | 1 + .../dynamicprogramming/CoinChange.java | 22 +---- .../dynamicprogramming/CoinChangeTest.java | 80 +++++++++++++++++++ 3 files changed, 82 insertions(+), 21 deletions(-) create mode 100644 src/test/java/com/thealgorithms/dynamicprogramming/CoinChangeTest.java diff --git a/DIRECTORY.md b/DIRECTORY.md index 70de110e8..0c235b792 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -786,6 +786,7 @@ * [BruteForceKnapsackTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/BruteForceKnapsackTest.java) * [CatalanNumberTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/CatalanNumberTest.java) * [ClimbStairsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/ClimbStairsTest.java) + * [CoinChangeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/CoinChangeTest.java) * [CountFriendsPairingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/CountFriendsPairingTest.java) * [EditDistanceTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/EditDistanceTest.java) * [EggDroppingTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/dynamicprogramming/EggDroppingTest.java) diff --git a/src/main/java/com/thealgorithms/dynamicprogramming/CoinChange.java b/src/main/java/com/thealgorithms/dynamicprogramming/CoinChange.java index 12cc29faa..7edc9603d 100644 --- a/src/main/java/com/thealgorithms/dynamicprogramming/CoinChange.java +++ b/src/main/java/com/thealgorithms/dynamicprogramming/CoinChange.java @@ -7,15 +7,6 @@ public final class CoinChange { private CoinChange() { } - // Driver Program - public static void main(String[] args) { - int amount = 12; - int[] coins = {2, 4, 5}; - - System.out.println("Number of combinations of getting change for " + amount + " is: " + change(coins, amount)); - System.out.println("Minimum number of coins required for amount :" + amount + " is: " + minimumCoins(coins, amount)); - } - /** * This method finds the number of combinations of getting change for a * given amount and change coins @@ -32,8 +23,6 @@ public final class CoinChange { for (int i = coin; i < amount + 1; i++) { combinations[i] += combinations[i - coin]; } - // Uncomment the below line to see the state of combinations for each coin - // printAmount(combinations); } return combinations[amount]; @@ -65,16 +54,7 @@ public final class CoinChange { } } } - // Uncomment the below line to see the state of combinations for each coin - // printAmount(minimumCoins); + return minimumCoins[amount]; } - - // A basic print method which prints all the contents of the array - public static void printAmount(int[] arr) { - for (int i = 0; i < arr.length; i++) { - System.out.print(arr[i] + " "); - } - System.out.println(); - } } diff --git a/src/test/java/com/thealgorithms/dynamicprogramming/CoinChangeTest.java b/src/test/java/com/thealgorithms/dynamicprogramming/CoinChangeTest.java new file mode 100644 index 000000000..10bc6600a --- /dev/null +++ b/src/test/java/com/thealgorithms/dynamicprogramming/CoinChangeTest.java @@ -0,0 +1,80 @@ +package com.thealgorithms.dynamicprogramming; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class CoinChangeTest { + + @Test + void testChangeBasic() { + int amount = 12; + int[] coins = {2, 4, 5}; + + assertEquals(5, CoinChange.change(coins, amount)); + } + + @Test + void testChangeNoCoins() { + int amount = 12; + int[] coins = {}; + + assertEquals(0, CoinChange.change(coins, amount)); + } + + @Test + void testChangeNoAmount() { + int amount = 0; + int[] coins = {2, 4, 5}; + + assertEquals(1, CoinChange.change(coins, amount)); + } + + @Test + void testChangeImpossibleAmount() { + int amount = 3; + int[] coins = {2, 4, 5}; + + assertEquals(0, CoinChange.change(coins, amount)); + } + + @Test + void testMinimumCoinsBasic() { + int amount = 12; + int[] coins = {2, 4, 5}; + + assertEquals(3, CoinChange.minimumCoins(coins, amount)); + } + + @Test + void testMinimumCoinsNoCoins() { + int amount = 12; + int[] coins = {}; + + assertEquals(Integer.MAX_VALUE, CoinChange.minimumCoins(coins, amount)); + } + + @Test + void testMinimumCoinsNoAmount() { + int amount = 0; + int[] coins = {2, 4, 5}; + + assertEquals(0, CoinChange.minimumCoins(coins, amount)); + } + + @Test + void testMinimumCoinsImpossibleAmount() { + int amount = 3; + int[] coins = {2, 4, 5}; + + assertEquals(Integer.MAX_VALUE, CoinChange.minimumCoins(coins, amount)); + } + + @Test + void testMinimumCoinsExactAmount() { + int amount = 10; + int[] coins = {1, 5, 10}; + + assertEquals(1, CoinChange.minimumCoins(coins, amount)); + } +}