From 5b3e34de634c2cc541c0634c5842fd2483b60328 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNgogaSandro=E2=80=9D?= Date: Tue, 29 Oct 2024 15:54:15 +0100 Subject: [PATCH 1/5] =?UTF-8?q?Neuer=20gr=C3=BCner=20Test=20eingef=C3=BCgt?= =?UTF-8?q?,=20bei=20der=20zwei=20Zahlen=20zusammen=20multipliziert=20werd?= =?UTF-8?q?en=20und=20das=20erwartete=20Ergebnis=20auch=20gezeigt=20wird.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0da..b25a56c 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -89,6 +89,21 @@ void testMultipleDecimalDots() { } - //TODO hier weitere Tests erstellen + @Test + @DisplayName(value = "should display the product of the numbers") + void testProductOfNumbers() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(6); + calc.pressDigitKey(0); + calc.pressBinaryOperationKey("x"); + calc.pressDigitKey(4); + calc.pressEqualsKey(); + + String expected = "240"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } } From ed377c05f0642760b471e47ac7c3b82ab4df70db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNgogaSandro=E2=80=9D?= Date: Thu, 31 Oct 2024 19:09:42 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Commit=20f=C3=BCr=201.=20roter=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../htw/berlin/prog2/ha1/CalculatorTest.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index b25a56c..731768d 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -105,5 +105,24 @@ void testProductOfNumbers() { assertEquals(expected, actual); } + + @Test + @DisplayName("should display correct result when equals is pressed multiple times after subtraction") + void testRepeatedEqualsSubtraction() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(1); + calc.pressEqualsKey(); // Ergebnis sollte 4 sein + calc.pressEqualsKey(); // Ergebnis sollte 3 sein + calc.pressEqualsKey(); // Ergebnis sollte 2 sein + + String expected = "2"; // Erwartetes Ergebnis nach dreimaligem Drücken von "=": 5 - 1 - 1 - 1 = 2 + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + } From 08f56f1879eec8fe445990431bddfca38f904743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNgogaSandro=E2=80=9D?= Date: Thu, 31 Oct 2024 19:10:46 +0100 Subject: [PATCH 3/5] =?UTF-8?q?Commit=20f=C3=BCr=20den=20Fix=20des=201.=20?= =?UTF-8?q?roten=20Tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f2..7e05cbb 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -10,10 +10,13 @@ public class Calculator { private String screen = "0"; - private double latestValue; + private Double latestValue = 0.0; private String latestOperation = ""; + private Double lastOperand; + private String lastOperator; + /** * @return den aktuellen Bildschirminhalt als String */ @@ -118,16 +121,30 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { - var result = switch(latestOperation) { - case "+" -> latestValue + Double.parseDouble(screen); - case "-" -> latestValue - Double.parseDouble(screen); - case "x" -> latestValue * Double.parseDouble(screen); - case "/" -> latestValue / Double.parseDouble(screen); + + // Falls keine gültige Operation vorhanden ist, nichts tun + if (latestOperation == null) { + return; + } + + // Letzten Operanden und Operator speichern, falls noch nicht gesetzt + if (lastOperand == null || lastOperator == null) { + lastOperand = Double.parseDouble(screen); + lastOperator = latestOperation; + } + + var result = switch(lastOperator) { + case "+" -> latestValue + lastOperand; + case "-" -> latestValue - lastOperand; + case "x" -> latestValue * lastOperand; + case "/" -> (lastOperand != 0) ? latestValue / lastOperand : Double.POSITIVE_INFINITY; default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); if(screen.equals("Infinity")) screen = "Error"; if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + + latestValue = result; } } From 7df3a90460dc28acbfa2b56dd3c2d870913e5f65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNgogaSandro=E2=80=9D?= Date: Sat, 2 Nov 2024 18:47:16 +0100 Subject: [PATCH 4/5] =?UTF-8?q?Commit=20f=C3=BCr=202.=20roter=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/CalculatorTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index 731768d..a4611b7 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -124,5 +124,20 @@ void testRepeatedEqualsSubtraction() { assertEquals(expected, actual); } + @Test + @DisplayName("should change the sign of the number when pressing the negation key") + void testNegationKey() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(5); + calc.pressDotKey(); + calc.pressDigitKey(5); + calc.pressUnaryOperationKey("±"); + + String expected = "-5.5"; // Erwartet: Die Zahl sollte das Vorzeichen wechseln + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } } From b0d9d1a81eae081e2845059afebacac3d0c387b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNgogaSandro=E2=80=9D?= Date: Sat, 2 Nov 2024 18:47:48 +0100 Subject: [PATCH 5/5] =?UTF-8?q?Commit=20f=C3=BCr=20den=20Fix=20des=202.=20?= =?UTF-8?q?roten=20Tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 22 ++++++++----------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 7e05cbb..4215c2c 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -9,11 +9,8 @@ public class Calculator { private String screen = "0"; - private Double latestValue = 0.0; - private String latestOperation = ""; - private Double lastOperand; private String lastOperator; @@ -65,6 +62,8 @@ public void pressClearKey() { public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; + lastOperand = null; + lastOperator = latestOperation; } /** @@ -78,15 +77,15 @@ public void pressUnaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; var result = switch(operation) { - case "√" -> Math.sqrt(Double.parseDouble(screen)); - case "%" -> Double.parseDouble(screen) / 100; - case "1/x" -> 1 / Double.parseDouble(screen); + case "√" -> Math.sqrt(latestValue); + case "%" -> latestValue/ 100; + case "1/x" -> 1 / latestValue; + case "±" -> -latestValue; default -> throw new IllegalArgumentException(); }; screen = Double.toString(result); if(screen.equals("NaN")) screen = "Error"; if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); - } /** @@ -121,18 +120,15 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { - // Falls keine gültige Operation vorhanden ist, nichts tun - if (latestOperation == null) { + if (latestOperation == null && lastOperator == null) { return; } - // Letzten Operanden und Operator speichern, falls noch nicht gesetzt - if (lastOperand == null || lastOperator == null) { + if (lastOperand == null) { lastOperand = Double.parseDouble(screen); lastOperator = latestOperation; } - var result = switch(lastOperator) { case "+" -> latestValue + lastOperand; case "-" -> latestValue - lastOperand; @@ -147,4 +143,4 @@ public void pressEqualsKey() { latestValue = result; } -} +} \ No newline at end of file