| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- import org.junit.Ignore;
- import org.junit.Rule;
- import org.junit.Test;
- import org.junit.rules.ExpectedException;
-
- import static java.util.Arrays.asList;
- import static java.util.Collections.emptyList;
- import static java.util.Collections.singletonList;
- import static org.junit.Assert.assertEquals;
-
- public class ChangeCalculatorTest {
-
- /*
- * See https://github.com/junit-team/junit4/wiki/Rules for information on JUnit Rules in general and
- * ExpectedExceptions in particular.
- */
- @Rule
- public ExpectedException expectedException = ExpectedException.none();
-
- @Test
- public void testChangeThatCanBeGivenInASingleCoin() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 25, 100));
-
- assertEquals(
- singletonList(25),
- changeCalculator.computeMostEfficientChange(25));
- }
-
- @Ignore("Remove to run test")
- @Test
- public void testChangeThatMustBeGivenInMultipleCoins() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 25, 100));
-
- assertEquals(
- asList(5, 10),
- changeCalculator.computeMostEfficientChange(15));
- }
-
- @Ignore("Remove to run test")
- @Test
- // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
- public void testLilliputianCurrencyForWhichGreedyAlgorithmFails() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 4, 15, 20, 50));
-
- assertEquals(
- asList(4, 4, 15),
- changeCalculator.computeMostEfficientChange(23));
- }
-
- @Ignore("Remove to run test")
- @Test
- // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
- public void testLowerElbonianCurrencyForWhichGreedyAlgorithmFails() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 21, 25));
-
- assertEquals(
- asList(21, 21, 21),
- changeCalculator.computeMostEfficientChange(63));
- }
-
- @Ignore("Remove to run test")
- @Test
- public void testLargeAmountOfChange() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 2, 5, 10, 20, 50, 100));
-
- assertEquals(
- asList(2, 2, 5, 20, 20, 50, 100, 100, 100, 100, 100, 100, 100, 100, 100),
- changeCalculator.computeMostEfficientChange(999));
- }
-
- @Ignore("Remove to run test")
- @Test
- public void testZeroChange() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 21, 25));
-
- assertEquals(
- emptyList(),
- changeCalculator.computeMostEfficientChange(0));
- }
-
- @Ignore("Remove to run test")
- @Test
- public void testChangeLessThanSmallestCoinInCurrencyCannotBeRepresented() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(5, 10));
-
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("The total 3 cannot be represented in the given currency.");
-
- changeCalculator.computeMostEfficientChange(3);
- }
-
- @Ignore("Remove to run test")
- @Test
- public void testChangeLargerThanAllCoinsInCurrencyThatCannotBeRepresented() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(5, 10));
-
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("The total 94 cannot be represented in the given currency.");
-
- changeCalculator.computeMostEfficientChange(94);
- }
-
- @Ignore("Remove to run test")
- @Test
- public void testNegativeChangeIsRejected() {
- ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 2, 5));
-
- expectedException.expect(IllegalArgumentException.class);
- expectedException.expectMessage("Negative totals are not allowed.");
-
- changeCalculator.computeMostEfficientChange(-5);
- }
-
- }
|