From 0212c7154e4e01c7647b3d53bffe82847c9df20b Mon Sep 17 00:00:00 2001 From: I-am-Naka Date: Tue, 6 Jun 2023 15:26:49 +0000 Subject: [PATCH 1/3] FibonacciTest start --- .classpath | 13 +++++++++++++ .project | 11 +++++++++++ .settings/org.eclipse.core.resources.prefs | 4 ++++ .../com/mycompany/fibonacci/FibonacciTest.java | 7 +++++++ .../com/mycompany/fibonacci/FibonacciTest.java | 15 +++++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 src/main/java/com/mycompany/fibonacci/FibonacciTest.java create mode 100644 src/test/java/com/mycompany/fibonacci/FibonacciTest.java diff --git a/.classpath b/.classpath index 9ba41a249..b3a434205 100644 --- a/.classpath +++ b/.classpath @@ -31,6 +31,19 @@ + + + + + + + + + + + + + diff --git a/.project b/.project index 700a32c79..ab0742645 100644 --- a/.project +++ b/.project @@ -20,4 +20,15 @@ org.eclipse.jdt.core.javanature org.eclipse.m2e.core.maven2Nature + + + 1685771014683 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 000000000..f9fe34593 --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/test/java=UTF-8 +encoding/=UTF-8 diff --git a/src/main/java/com/mycompany/fibonacci/FibonacciTest.java b/src/main/java/com/mycompany/fibonacci/FibonacciTest.java new file mode 100644 index 000000000..61de1d5ca --- /dev/null +++ b/src/main/java/com/mycompany/fibonacci/FibonacciTest.java @@ -0,0 +1,7 @@ +package com.mycompany.fibonacci; + +public class FibonacciTest { + int fib(int n){ + return 0; + } +} diff --git a/src/test/java/com/mycompany/fibonacci/FibonacciTest.java b/src/test/java/com/mycompany/fibonacci/FibonacciTest.java new file mode 100644 index 000000000..16c74b61a --- /dev/null +++ b/src/test/java/com/mycompany/fibonacci/FibonacciTest.java @@ -0,0 +1,15 @@ +package com.mycompany.fibonacci; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; + +public class FibonacciTest { + int fib(int n){ + return 0; + } + @Test + public void testFibonacci() { + assertEquals(0, fib(0)); + } +} From 439bd01d07bab12a152bdb39a7ad3c892465a126 Mon Sep 17 00:00:00 2001 From: I-am-Naka Date: Thu, 8 Jun 2023 15:34:54 +0000 Subject: [PATCH 2/3] =?UTF-8?q?test=E9=A7=86=E5=8B=95=E9=96=8B=E7=99=BA?= =?UTF-8?q?=EF=BC=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/mycompany/money/Dollar.java | 15 ++++++++++++ .../mycompany/fibonacci/FibonacciTest.java | 1 + .../java/com/mycompany/money/MoneyTest.java | 23 +++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 src/main/java/com/mycompany/money/Dollar.java create mode 100644 src/test/java/com/mycompany/money/MoneyTest.java diff --git a/src/main/java/com/mycompany/money/Dollar.java b/src/main/java/com/mycompany/money/Dollar.java new file mode 100644 index 000000000..4cbb8aec9 --- /dev/null +++ b/src/main/java/com/mycompany/money/Dollar.java @@ -0,0 +1,15 @@ +package com.mycompany.money; + +class Dollar { + int amount; + Dollar(int amount){ + this.amount = amount; + } + Dollar times(int multiplier){ + return new Dollar(amount * multiplier); + } + public boolean equals(Object object){ + Dollar dollar = (Dollar) object; + return amount == dollar.amount; + } +} diff --git a/src/test/java/com/mycompany/fibonacci/FibonacciTest.java b/src/test/java/com/mycompany/fibonacci/FibonacciTest.java index 16c74b61a..f009b6563 100644 --- a/src/test/java/com/mycompany/fibonacci/FibonacciTest.java +++ b/src/test/java/com/mycompany/fibonacci/FibonacciTest.java @@ -11,5 +11,6 @@ int fib(int n){ @Test public void testFibonacci() { assertEquals(0, fib(0)); + assertEquals(1, fib(1)); } } diff --git a/src/test/java/com/mycompany/money/MoneyTest.java b/src/test/java/com/mycompany/money/MoneyTest.java new file mode 100644 index 000000000..8f0b60843 --- /dev/null +++ b/src/test/java/com/mycompany/money/MoneyTest.java @@ -0,0 +1,23 @@ +package com.mycompany.money; + +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class MoneyTest { + @Test + public void testMultiplication(){ + Dollar five = new Dollar(5); + Dollar product = five.times(2); + assertEquals(10, product.amount); + product = five.times(3); + assertEquals(15, product.amount); + } + @Test + public void testEquality(){ + assertTrue(new Dollar(5).equals(new Dollar(5))); + assertFalse(new Dollar(5).equals(new Dollar(6))); + } +} From da245e0b1ab6f007438b61a5cb6e3d726766ba09 Mon Sep 17 00:00:00 2001 From: I-am-Naka Date: Sat, 10 Jun 2023 07:23:35 +0000 Subject: [PATCH 3/3] =?UTF-8?q?TDD=20P.115=20=E9=80=94=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 3 + src/main/java/com/mycompany/money/Bank.java | 18 +++++ src/main/java/com/mycompany/money/Dollar.java | 15 ---- .../java/com/mycompany/money/Expression.java | 5 ++ src/main/java/com/mycompany/money/Franc.java | 0 src/main/java/com/mycompany/money/Money.java | 46 +++++++++++ src/main/java/com/mycompany/money/Pair.java | 17 ++++ src/main/java/com/mycompany/money/Sum.java | 14 ++++ .../java/com/mycompany/money/MoneyTest.java | 80 ++++++++++++++++--- 9 files changed, 174 insertions(+), 24 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 src/main/java/com/mycompany/money/Bank.java create mode 100644 src/main/java/com/mycompany/money/Expression.java create mode 100644 src/main/java/com/mycompany/money/Franc.java create mode 100644 src/main/java/com/mycompany/money/Money.java create mode 100644 src/main/java/com/mycompany/money/Pair.java create mode 100644 src/main/java/com/mycompany/money/Sum.java diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..c995aa5ce --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "java.debug.settings.onBuildFailureProceed": true +} \ No newline at end of file diff --git a/src/main/java/com/mycompany/money/Bank.java b/src/main/java/com/mycompany/money/Bank.java new file mode 100644 index 000000000..c6bfaf550 --- /dev/null +++ b/src/main/java/com/mycompany/money/Bank.java @@ -0,0 +1,18 @@ +package com.mycompany.money; + +import java.util.HashMap; +import java.util.Map; + +public class Bank { + private Map rates = new HashMap<>(); + Money reduce(Expression source, String to){ + return source.reduce(this, to); + } + void addRate(String from, String to, int rate){ + rates.put(new Pair(from, to), rate); + } + int rate(String from, String to){ + if(from.equals(to)) return 1; + return rates.get(new Pair(from, to)); + } +} diff --git a/src/main/java/com/mycompany/money/Dollar.java b/src/main/java/com/mycompany/money/Dollar.java index 4cbb8aec9..e69de29bb 100644 --- a/src/main/java/com/mycompany/money/Dollar.java +++ b/src/main/java/com/mycompany/money/Dollar.java @@ -1,15 +0,0 @@ -package com.mycompany.money; - -class Dollar { - int amount; - Dollar(int amount){ - this.amount = amount; - } - Dollar times(int multiplier){ - return new Dollar(amount * multiplier); - } - public boolean equals(Object object){ - Dollar dollar = (Dollar) object; - return amount == dollar.amount; - } -} diff --git a/src/main/java/com/mycompany/money/Expression.java b/src/main/java/com/mycompany/money/Expression.java new file mode 100644 index 000000000..e331749df --- /dev/null +++ b/src/main/java/com/mycompany/money/Expression.java @@ -0,0 +1,5 @@ +package com.mycompany.money; + +public interface Expression { + Money reduce(Bank bank, String to); +} diff --git a/src/main/java/com/mycompany/money/Franc.java b/src/main/java/com/mycompany/money/Franc.java new file mode 100644 index 000000000..e69de29bb diff --git a/src/main/java/com/mycompany/money/Money.java b/src/main/java/com/mycompany/money/Money.java new file mode 100644 index 000000000..f57d48ebc --- /dev/null +++ b/src/main/java/com/mycompany/money/Money.java @@ -0,0 +1,46 @@ +package com.mycompany.money; + +class Money implements Expression { + protected int amount; + protected String currency; + + Money(int amount, String currency) { + this.amount = amount; + this.currency = currency; + } + + Money times(int multiplier) { + return new Money(amount * multiplier, currency); + }; + + Expression plus(Money addend) { + return new Sum(this, addend); + } + + public Money reduce(Bank bank, String to) { + int rate = bank.rate(currency, to); + return new Money(amount / rate, to); + } + + String currency() { + return currency; + } + + public boolean equals(Object object) { + Money money = (Money) object; + return amount == money.amount + && currency().equals(money.currency()); + } + + public String toString() { + return amount + " " + currency; + } + + static Money dollar(int amount) { + return new Money(amount, "USD"); + } + + static Money franc(int amount) { + return new Money(amount, "CHF"); + } +} diff --git a/src/main/java/com/mycompany/money/Pair.java b/src/main/java/com/mycompany/money/Pair.java new file mode 100644 index 000000000..e87311a46 --- /dev/null +++ b/src/main/java/com/mycompany/money/Pair.java @@ -0,0 +1,17 @@ +package com.mycompany.money; + +public class Pair { + private String from; + private String to; + Pair(String from, String to){ + this.from = from; + this.to = to; + } + public boolean equals(Object object){ + Pair pair = (Pair) object; + return from.equals(pair.from) && to.equals(pair.to); + } + public int hashCode(){ + return 0; + } +} diff --git a/src/main/java/com/mycompany/money/Sum.java b/src/main/java/com/mycompany/money/Sum.java new file mode 100644 index 000000000..a126239a5 --- /dev/null +++ b/src/main/java/com/mycompany/money/Sum.java @@ -0,0 +1,14 @@ +package com.mycompany.money; + +public class Sum implements Expression{ + Money augend; + Money addend; + Sum(Money augend, Money addend){ + this.augend = augend; + this.addend = addend; + } + public Money reduce(Bank bank, String to){ + int amount = augend.reduce(bank, to).amount + addend.reduce(bank, to).amount; + return new Money(amount, to); + } +} diff --git a/src/test/java/com/mycompany/money/MoneyTest.java b/src/test/java/com/mycompany/money/MoneyTest.java index 8f0b60843..f4e96393e 100644 --- a/src/test/java/com/mycompany/money/MoneyTest.java +++ b/src/test/java/com/mycompany/money/MoneyTest.java @@ -8,16 +8,78 @@ public class MoneyTest { @Test - public void testMultiplication(){ - Dollar five = new Dollar(5); - Dollar product = five.times(2); - assertEquals(10, product.amount); - product = five.times(3); - assertEquals(15, product.amount); + public void testMultiplication() { + Money five = Money.dollar(5); + assertEquals(Money.dollar(10), five.times(2)); + assertEquals(Money.dollar(15), five.times(3)); } + + @Test + public void testEquality() { + assertTrue(Money.dollar(5).equals(Money.dollar(5))); + assertFalse(Money.dollar(5).equals(Money.dollar(6))); + assertFalse(Money.franc(5).equals(Money.dollar(5))); + } + + @Test + public void testCurrency() { + assertEquals("USD", Money.dollar(1).currency()); + assertEquals("CHF", Money.franc(1).currency()); + } + + @Test + public void testSimpleAddition() { + Money five = Money.dollar(5); + Expression sum = five.plus(five); + Bank bank = new Bank(); + Money reduced = bank.reduce(sum, "USD"); + assertEquals(Money.dollar(10), reduced); + } + + @Test + public void testPlusReturnsSum() { + Money five = Money.dollar(5); + Expression result = five.plus(five); + Sum sum = (Sum) result; + assertEquals(five, sum.augend); + assertEquals(five, sum.addend); + } + + @Test + public void testReduceSum() { + Expression sum = new Sum(Money.dollar(3), Money.dollar(4)); + Bank bank = new Bank(); + Money result = bank.reduce(sum, "USD"); + assertEquals(Money.dollar(7), result); + } + + @Test + public void testReduceMoney() { + Bank bank = new Bank(); + Money result = bank.reduce(Money.dollar(1), "USD"); + assertEquals(Money.dollar(1), result); + } + + @Test + public void testReduceMoneyDifferentCurrency() { + Bank bank = new Bank(); + bank.addRate("CHF", "USD", 2); + Money result = bank.reduce(Money.franc(2), "USD"); + assertEquals(Money.dollar(1), result); + } + + @Test + public void testIdentityRate() { + assertEquals(1, new Bank().rate("USD", "USD")); + } + @Test - public void testEquality(){ - assertTrue(new Dollar(5).equals(new Dollar(5))); - assertFalse(new Dollar(5).equals(new Dollar(6))); + public void testMixedAddition() { + Money fiveBucks = Money.dollar(5); + Money tenFrancs = Money.franc(10); + Bank bank = new Bank(); + bank.addRate("CHF", "USD", 2); + Money result = bank.reduce(fiveBucks.plus(tenFrancs), "USD"); + assertEquals(Money.dollar(10), result); } }