Skip to content

Add tests, remove main & print methods in CoinChange.java #5642

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Oct 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions DIRECTORY.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -32,8 +23,6 @@ public static int change(int[] coins, int amount) {
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];
Expand Down Expand Up @@ -65,16 +54,7 @@ public static int minimumCoins(int[] coins, int amount) {
}
}
}
// 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();
return minimumCoins[amount];
}
}
Original file line number Diff line number Diff line change
@@ -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));
}
}