Skip to content
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

test #58

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open

test #58

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
13 changes: 13 additions & 0 deletions .classpath
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,19 @@
<attribute name="m2e-apt" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="test" value="true"/>
<attribute name="optional" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="target/generated-test-sources/test-annotations">
<attributes>
<attribute name="optional" value="true"/>
Expand Down
11 changes: 11 additions & 0 deletions .project
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,15 @@
<nature>org.eclipse.jdt.core.javanature</nature>
<nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>
<filteredResources>
<filter>
<id>1685771014683</id>
<name></name>
<type>30</type>
<matcher>
<id>org.eclipse.core.resources.regexFilterMatcher</id>
<arguments>node_modules|\.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__</arguments>
</matcher>
</filter>
</filteredResources>
</projectDescription>
4 changes: 4 additions & 0 deletions .settings/org.eclipse.core.resources.prefs
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
eclipse.preferences.version=1
encoding//src/main/java=UTF-8
encoding//src/test/java=UTF-8
encoding/<project>=UTF-8
3 changes: 3 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"java.debug.settings.onBuildFailureProceed": true
}
7 changes: 7 additions & 0 deletions src/main/java/com/mycompany/fibonacci/FibonacciTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.mycompany.fibonacci;

public class FibonacciTest {
int fib(int n){
return 0;
}
}
18 changes: 18 additions & 0 deletions src/main/java/com/mycompany/money/Bank.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.mycompany.money;

import java.util.HashMap;
import java.util.Map;

public class Bank {
private Map<Pair, Integer> 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));
}
}
Empty file.
5 changes: 5 additions & 0 deletions src/main/java/com/mycompany/money/Expression.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.mycompany.money;

public interface Expression {
Money reduce(Bank bank, String to);
}
Empty file.
46 changes: 46 additions & 0 deletions src/main/java/com/mycompany/money/Money.java
Original file line number Diff line number Diff line change
@@ -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");
}
}
17 changes: 17 additions & 0 deletions src/main/java/com/mycompany/money/Pair.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/mycompany/money/Sum.java
Original file line number Diff line number Diff line change
@@ -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);
}
}
16 changes: 16 additions & 0 deletions src/test/java/com/mycompany/fibonacci/FibonacciTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
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));
assertEquals(1, fib(1));
}
}
85 changes: 85 additions & 0 deletions src/test/java/com/mycompany/money/MoneyTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
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() {
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 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);
}
}