lots of exercises in java... from https://github.com/exercism/java

ChangeCalculatorTest.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import org.junit.Ignore;
  2. import org.junit.Rule;
  3. import org.junit.Test;
  4. import org.junit.rules.ExpectedException;
  5. import static java.util.Arrays.asList;
  6. import static java.util.Collections.emptyList;
  7. import static java.util.Collections.singletonList;
  8. import static org.junit.Assert.assertEquals;
  9. public class ChangeCalculatorTest {
  10. /*
  11. * See https://github.com/junit-team/junit4/wiki/Rules for information on JUnit Rules in general and
  12. * ExpectedExceptions in particular.
  13. */
  14. @Rule
  15. public ExpectedException expectedException = ExpectedException.none();
  16. @Test
  17. public void testChangeThatCanBeGivenInASingleCoin() {
  18. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 25, 100));
  19. assertEquals(
  20. singletonList(25),
  21. changeCalculator.computeMostEfficientChange(25));
  22. }
  23. @Ignore("Remove to run test")
  24. @Test
  25. public void testChangeThatMustBeGivenInMultipleCoins() {
  26. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 25, 100));
  27. assertEquals(
  28. asList(5, 10),
  29. changeCalculator.computeMostEfficientChange(15));
  30. }
  31. @Ignore("Remove to run test")
  32. @Test
  33. // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
  34. public void testLilliputianCurrencyForWhichGreedyAlgorithmFails() {
  35. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 4, 15, 20, 50));
  36. assertEquals(
  37. asList(4, 4, 15),
  38. changeCalculator.computeMostEfficientChange(23));
  39. }
  40. @Ignore("Remove to run test")
  41. @Test
  42. // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
  43. public void testLowerElbonianCurrencyForWhichGreedyAlgorithmFails() {
  44. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 21, 25));
  45. assertEquals(
  46. asList(21, 21, 21),
  47. changeCalculator.computeMostEfficientChange(63));
  48. }
  49. @Ignore("Remove to run test")
  50. @Test
  51. public void testLargeAmountOfChange() {
  52. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 2, 5, 10, 20, 50, 100));
  53. assertEquals(
  54. asList(2, 2, 5, 20, 20, 50, 100, 100, 100, 100, 100, 100, 100, 100, 100),
  55. changeCalculator.computeMostEfficientChange(999));
  56. }
  57. @Ignore("Remove to run test")
  58. @Test
  59. public void testZeroChange() {
  60. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 21, 25));
  61. assertEquals(
  62. emptyList(),
  63. changeCalculator.computeMostEfficientChange(0));
  64. }
  65. @Ignore("Remove to run test")
  66. @Test
  67. public void testChangeLessThanSmallestCoinInCurrencyCannotBeRepresented() {
  68. ChangeCalculator changeCalculator = new ChangeCalculator(asList(5, 10));
  69. expectedException.expect(IllegalArgumentException.class);
  70. expectedException.expectMessage("The total 3 cannot be represented in the given currency.");
  71. changeCalculator.computeMostEfficientChange(3);
  72. }
  73. @Ignore("Remove to run test")
  74. @Test
  75. public void testChangeLargerThanAllCoinsInCurrencyThatCannotBeRepresented() {
  76. ChangeCalculator changeCalculator = new ChangeCalculator(asList(5, 10));
  77. expectedException.expect(IllegalArgumentException.class);
  78. expectedException.expectMessage("The total 94 cannot be represented in the given currency.");
  79. changeCalculator.computeMostEfficientChange(94);
  80. }
  81. @Ignore("Remove to run test")
  82. @Test
  83. public void testNegativeChangeIsRejected() {
  84. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 2, 5));
  85. expectedException.expect(IllegalArgumentException.class);
  86. expectedException.expectMessage("Negative totals are not allowed.");
  87. changeCalculator.computeMostEfficientChange(-5);
  88. }
  89. }