From 2956ea30d2115a206af735d3447b0e9ea9e1fcd8 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 19:52:52 +0100 Subject: [PATCH 1/9] =?UTF-8?q?Gr=C3=BCner=20Test?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/CalculatorTest.java | 12 +++++++++++- 1 file changed, 11 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..dde257c 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -87,7 +87,17 @@ void testMultipleDecimalDots() { assertEquals(expected, actual); } - + @Test + @DisplayName("should toggle negative sign correctly") + void testToggleNegativeSign() { + Calculator calc = new Calculator(); + calc.pressDigitKey(5); + calc.pressNegativeKey(); + calc.pressNegativeKey(); + String expected = "5"; + String actual = calc.readScreen(); + assertEquals(expected, actual); + } //TODO hier weitere Tests erstellen } From d07be1c0bac8d2103a1f8d1fd559ad5815403606 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 21:02:35 +0100 Subject: [PATCH 2/9] Roter Test 1 --- .../java/htw/berlin/prog2/ha1/Calculator.java | 2 +- .../htw/berlin/prog2/ha1/CalculatorTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) 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..a68ecbe 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -130,4 +130,4 @@ public void pressEqualsKey() { if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } -} +} \ No newline at end of file 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 dde257c..2b7d958 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -99,6 +99,22 @@ void testToggleNegativeSign() { assertEquals(expected, actual); } + + @Test + @DisplayName("should display error when performing unary operation with invalid input") + void testInvalidUnaryOperationInput() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); // 0 für 1/x + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; // Erwartetes Verhalten: 1/0 führt zu einem Fehler + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + //TODO hier weitere Tests erstellen } From 14377c143ba0ec53a4b4a16be8ebfb63131249b0 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 21:03:49 +0100 Subject: [PATCH 3/9] Roter Test 1 BugFix --- .../java/htw/berlin/prog2/ha1/Calculator.java | 15 +++++++++------ 1 file changed, 9 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 a68ecbe..6ebebdd 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -75,15 +75,18 @@ 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" -> { + if (latestValue == 0) yield Double.NaN; // Fehler, wenn 1/0 + yield 1 / 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); - + if (screen.equals("NaN") || 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); } /** From eae0f108e665c7fe2e357d51e09c69755002fd45 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 21:16:03 +0100 Subject: [PATCH 4/9] Roter Test 1 BugFix Richtiger Teil --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 1 - 1 file changed, 1 deletion(-) 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 6ebebdd..b0a8549 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -86,7 +86,6 @@ public void pressUnaryOperationKey(String operation) { screen = Double.toString(result); if (screen.equals("NaN") || 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); } /** From 7e07f2d2ab91cad74bcb8b28bfd7b126f67896d8 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 21:26:10 +0100 Subject: [PATCH 5/9] =?UTF-8?q?Roter=20Test=201=20BugFix=20Gel=C3=B6st?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b0a8549..318b3cd 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -85,7 +85,7 @@ public void pressUnaryOperationKey(String operation) { }; screen = Double.toString(result); if (screen.equals("NaN") || 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); } /** From 15570b36cf720669f73b74cd29c3da7c9646e259 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 21:36:32 +0100 Subject: [PATCH 6/9] =?UTF-8?q?Roter=20Test=201=20BugFix=20Gel=C3=B6st=20m?= =?UTF-8?q?it=20Java=20doc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 1 + 1 file changed, 1 insertion(+) 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 318b3cd..05bfb16 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -69,6 +69,7 @@ public void pressBinaryOperationKey(String operation) { * Quadratwurzel, Prozent, Inversion, welche nur einen Operanden benötigen. * Beim Drücken der Taste wird direkt die Operation auf den aktuellen Zahlenwert angewendet und * der Bildschirminhalt mit dem Ergebnis aktualisiert. + * Wenn der aktuelle Wert 0 ist und die Inversionsoperation gedrückt wird, wird "Error" angezeigt. * @param operation "√" für Quadratwurzel, "%" für Prozent, "1/x" für Inversion */ public void pressUnaryOperationKey(String operation) { From 1e076c1760dc38510d38272c03c4e5a48ec43413 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 22:14:19 +0100 Subject: [PATCH 7/9] Roter Test 2 --- .../java/htw/berlin/prog2/ha1/Calculator.java | 11 ++++++---- .../htw/berlin/prog2/ha1/CalculatorTest.java | 21 ++++++++++++++++++- 2 files changed, 27 insertions(+), 5 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 05bfb16..76aaa83 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -29,13 +29,14 @@ public String readScreen() { * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { - if(digit > 9 || digit < 0) throw new IllegalArgumentException(); + if (digit > 9 || digit < 0) throw new IllegalArgumentException(); - if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if (screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; screen = screen + digit; } + /** * Empfängt den Befehl der C- bzw. CE-Taste (Clear bzw. Clear Entry). * Einmaliges Drücken der Taste löscht die zuvor eingegebenen Ziffern auf dem Bildschirm @@ -76,10 +77,11 @@ public void pressUnaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; var result = switch(operation) { - case "√" -> Math.sqrt(latestValue); + case "√" -> (latestValue == 0) ? 0 : Math.sqrt(latestValue); // Spezieller Fall für √0 case "%" -> latestValue / 100; case "1/x" -> { if (latestValue == 0) yield Double.NaN; // Fehler, wenn 1/0 + if (latestValue == 1) yield 1; // Spezieller Fall für 1/x bei 1 yield 1 / latestValue; } default -> throw new IllegalArgumentException(); @@ -121,6 +123,7 @@ 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); @@ -133,4 +136,4 @@ public void pressEqualsKey() { if(screen.endsWith(".0")) screen = screen.substring(0,screen.length()-2); if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); } -} \ No newline at end of file +} 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 2b7d958..a132581 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -115,6 +115,25 @@ void testInvalidUnaryOperationInput() { } - //TODO hier weitere Tests erstellen + + + @Test + @DisplayName("should not accept more than 10 digits") + void testTooManyDigits() { + Calculator calc = new Calculator(); + + // Eingabe von 11 Ziffern, was über die 10-stellige Grenze hinausgeht + for (int i = 0; i < 11; i++) { + calc.pressDigitKey(1); + } + + String expected = "1111111111"; // Der Bildschirm sollte nur die ersten 10 Ziffern anzeigen + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + //TODO hier weitere Tests erstellen } From 8c57f6bf449d8b0c4f95ca11df04bf938c59f0b7 Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 22:18:13 +0100 Subject: [PATCH 8/9] Roter Test 2 Bugfix mit Java Doc --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 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 76aaa83..7a5634b 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -26,17 +26,22 @@ public String readScreen() { * drücken kann muss der Wert positiv und einstellig sein und zwischen 0 und 9 liegen. * Führt in jedem Fall dazu, dass die gerade gedrückte Ziffer auf dem Bildschirm angezeigt * oder rechts an die zuvor gedrückte Ziffer angehängt angezeigt wird. + * Es wird ein Fehler angezeigt, wenn mehr als 10 Ziffern eingegeben werden. * @param digit Die Ziffer, deren Taste gedrückt wurde */ public void pressDigitKey(int digit) { if (digit > 9 || digit < 0) throw new IllegalArgumentException(); + // Überprüfung auf maximale Länge von 10 Ziffern + if (screen.length() >= 10) return; // Ignoriert weitere Zifferneingaben, wenn die maximale Länge erreicht ist + if (screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; screen = screen + digit; } + /** * Empfängt den Befehl der C- bzw. CE-Taste (Clear bzw. Clear Entry). * Einmaliges Drücken der Taste löscht die zuvor eingegebenen Ziffern auf dem Bildschirm @@ -77,11 +82,10 @@ public void pressUnaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; var result = switch(operation) { - case "√" -> (latestValue == 0) ? 0 : Math.sqrt(latestValue); // Spezieller Fall für √0 + case "√" -> Math.sqrt(latestValue); case "%" -> latestValue / 100; case "1/x" -> { if (latestValue == 0) yield Double.NaN; // Fehler, wenn 1/0 - if (latestValue == 1) yield 1; // Spezieller Fall für 1/x bei 1 yield 1 / latestValue; } default -> throw new IllegalArgumentException(); From 3357fcde49522efccfa792a3208bce9f6aa2dc7e Mon Sep 17 00:00:00 2001 From: Kaan Date: Sun, 3 Nov 2024 22:25:31 +0100 Subject: [PATCH 9/9] Roter Test 2 Bugfix mit Java Doc --- app/src/main/java/htw/berlin/prog2/ha1/Calculator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 7a5634b..120aebd 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -32,7 +32,7 @@ public String readScreen() { public void pressDigitKey(int digit) { if (digit > 9 || digit < 0) throw new IllegalArgumentException(); - // Überprüfung auf maximale Länge von 10 Ziffern + // Überprüfung auf maximale Länge von 10 Ziffern. if (screen.length() >= 10) return; // Ignoriert weitere Zifferneingaben, wenn die maximale Länge erreicht ist if (screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = "";