diff --git a/src/main/java/tdd/setup/Calculator.java b/src/main/java/tdd/setup/Calculator.java index 171f6d6..480f4e1 100644 --- a/src/main/java/tdd/setup/Calculator.java +++ b/src/main/java/tdd/setup/Calculator.java @@ -1,10 +1,12 @@ package tdd.setup; + // behaviour inspired by https://www.online-calculator.com/ public class Calculator { private String screen = "0"; + private double latestValue; private String latestOperation = ""; @@ -18,8 +20,12 @@ public void pressDigitKey(int digit) { if(latestOperation.isEmpty()) { screen = screen + digit; } else { - latestValue = Double.parseDouble(screen); - screen = Integer.toString(digit); + if (latestValue == 0) { + latestValue = Double.parseDouble(screen); + screen = "0"; + } + screen = screen + digit; + } } @@ -34,11 +40,12 @@ public void pressOperationKey(String operation) { } public void pressDotKey() { - if(!screen.endsWith(".")) screen = screen + "."; + if(!screen.contains(".")) screen = screen + "."; } public void pressNegative() { screen = screen.startsWith("-") ? screen.substring(1) : "-" + screen; + } public void pressEquals() { @@ -47,6 +54,8 @@ public void pressEquals() { case "-" -> latestValue - Double.parseDouble(screen); case "x" -> latestValue * Double.parseDouble(screen); case "/" -> latestValue / Double.parseDouble(screen); + case "" -> latestValue = Double.parseDouble(screen); + //case "" -> latestValue Double.parseDouble(screen); default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); diff --git a/src/main/main.iml b/src/main/main.iml new file mode 100644 index 0000000..2185ddd --- /dev/null +++ b/src/main/main.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/java/tdd/setup/CalculatorTest.java b/src/test/java/tdd/setup/CalculatorTest.java index 3bf16e9..36edc6f 100644 --- a/src/test/java/tdd/setup/CalculatorTest.java +++ b/src/test/java/tdd/setup/CalculatorTest.java @@ -16,4 +16,72 @@ void calculatorCanDoTwoPlusTwo() { calc.pressEquals(); assertEquals("4", calc.readScreen()); } -} + + @Test + @DisplayName("mein test1") + void calculatorCanDoTwoMinusTwo() { + Calculator calc = new Calculator(); + calc.pressDigitKey(2); + calc.pressOperationKey("-"); + calc.pressDigitKey(2); + calc.pressEquals(); + assertEquals("0", calc.readScreen()); + } + + @Test + @DisplayName("mein test2") + void calculatorCanDoEightyPlusTwenty() { + Calculator calc = new Calculator(); + calc.pressDigitKey(8); + calc.pressDigitKey(0); + calc.pressOperationKey("+"); + calc.pressDigitKey(2); + calc.pressDigitKey(0); + calc.pressEquals(); + assertEquals("100", calc.readScreen()); + } + + @Test + @DisplayName("mein test3") + void calculatorCanDoJustTwo() { + Calculator calc = new Calculator(); + calc.pressDigitKey(2); + calc.pressEquals(); + assertEquals("2", calc.readScreen()); + } + + @Test + @DisplayName("mein test4") + void calculatorCanDoClear() { + Calculator calc = new Calculator(); + calc.pressDigitKey(2); + calc.pressOperationKey("-"); + calc.pressDigitKey(3); + calc.pressClearKey(); + assertEquals("0", calc.readScreen()); + } + + @Test + @DisplayName("mein test5") + void calculatorCanDoNegative() { + Calculator calc = new Calculator(); + calc.pressNegative(); + calc.pressDigitKey(2); + calc.pressEquals(); + assertEquals("-2", calc.readScreen()); + } + + @Test + @DisplayName("mein test6") + void calculatorCanDot() { + Calculator calc = new Calculator(); + calc.pressDigitKey(0); + calc.pressDotKey(); + calc.pressDigitKey(2); + calc.pressDotKey(); + calc.pressEquals(); + assertEquals("0.2", calc.readScreen()); + } + + } + diff --git a/src/test/test.iml b/src/test/test.iml new file mode 100644 index 0000000..9077291 --- /dev/null +++ b/src/test/test.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file