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

ChangeCalculatorTest.java 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. /*
  10. * version: 1.1.0
  11. */
  12. public class ChangeCalculatorTest {
  13. @Rule
  14. public ExpectedException expectedException = ExpectedException.none();
  15. @Test
  16. public void testChangeThatCanBeGivenInASingleCoin() {
  17. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 25, 100));
  18. assertEquals(
  19. singletonList(25),
  20. changeCalculator.computeMostEfficientChange(25));
  21. }
  22. @Ignore("Remove to run test")
  23. @Test
  24. public void testChangeThatMustBeGivenInMultipleCoins() {
  25. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 25, 100));
  26. assertEquals(
  27. asList(5, 10),
  28. changeCalculator.computeMostEfficientChange(15));
  29. }
  30. @Ignore("Remove to run test")
  31. @Test
  32. // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
  33. public void testLilliputianCurrency() {
  34. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 4, 15, 20, 50));
  35. assertEquals(
  36. asList(4, 4, 15),
  37. changeCalculator.computeMostEfficientChange(23));
  38. }
  39. @Ignore("Remove to run test")
  40. @Test
  41. // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
  42. public void testLowerElbonianCurrency() {
  43. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 21, 25));
  44. assertEquals(
  45. asList(21, 21, 21),
  46. changeCalculator.computeMostEfficientChange(63));
  47. }
  48. @Ignore("Remove to run test")
  49. @Test
  50. public void testLargeAmountOfChange() {
  51. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 2, 5, 10, 20, 50, 100));
  52. assertEquals(
  53. asList(2, 2, 5, 20, 20, 50, 100, 100, 100, 100, 100, 100, 100, 100, 100),
  54. changeCalculator.computeMostEfficientChange(999));
  55. }
  56. @Ignore("Remove to run test")
  57. @Test
  58. // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
  59. public void testPossibleChangeWithoutUnitCoinAvailable() {
  60. ChangeCalculator changeCalculator = new ChangeCalculator(asList(2, 5, 10, 20, 50));
  61. assertEquals(
  62. asList(2, 2, 2, 5, 10),
  63. changeCalculator.computeMostEfficientChange(21));
  64. }
  65. @Ignore("Remove to run test")
  66. @Test
  67. // https://en.wikipedia.org/wiki/Change-making_problem#Greedy_method
  68. public void testAnotherPossibleChangeWithoutUnitCoinAvailable() {
  69. ChangeCalculator changeCalculator = new ChangeCalculator(asList(4, 5));
  70. assertEquals(
  71. asList(4, 4, 4, 5, 5, 5),
  72. changeCalculator.computeMostEfficientChange(27));
  73. }
  74. @Ignore("Remove to run test")
  75. @Test
  76. public void testZeroChange() {
  77. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 5, 10, 21, 25));
  78. assertEquals(
  79. emptyList(),
  80. changeCalculator.computeMostEfficientChange(0));
  81. }
  82. @Ignore("Remove to run test")
  83. @Test
  84. public void testChangeLessThanSmallestCoinInCurrencyCannotBeRepresented() {
  85. ChangeCalculator changeCalculator = new ChangeCalculator(asList(5, 10));
  86. expectedException.expect(IllegalArgumentException.class);
  87. expectedException.expectMessage("The total 3 cannot be represented in the given currency.");
  88. changeCalculator.computeMostEfficientChange(3);
  89. }
  90. @Ignore("Remove to run test")
  91. @Test
  92. public void testChangeLargerThanAllCoinsInCurrencyThatCannotBeRepresented() {
  93. ChangeCalculator changeCalculator = new ChangeCalculator(asList(5, 10));
  94. expectedException.expect(IllegalArgumentException.class);
  95. expectedException.expectMessage("The total 94 cannot be represented in the given currency.");
  96. changeCalculator.computeMostEfficientChange(94);
  97. }
  98. @Ignore("Remove to run test")
  99. @Test
  100. public void testNegativeChangeIsRejected() {
  101. ChangeCalculator changeCalculator = new ChangeCalculator(asList(1, 2, 5));
  102. expectedException.expect(IllegalArgumentException.class);
  103. expectedException.expectMessage("Negative totals are not allowed.");
  104. changeCalculator.computeMostEfficientChange(-5);
  105. }
  106. }