From b0b93d9624fc888154f2dfb418d565ff776a6fc2 Mon Sep 17 00:00:00 2001 From: razan salman Date: Fri, 24 Oct 2025 18:26:57 +0200 Subject: [PATCH 1/3] =?UTF-8?q?Aufgabe=202:=20Gr=C3=BCnen=20Test=20f=C3=BC?= =?UTF-8?q?r=20Subtraktion=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/htw/berlin/prog2/ha1/Calculator.java | 4 +++- .../htw/berlin/prog2/ha1/CalculatorTest.java | 17 ++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 84c04f2..7aa434d 100644 --- a/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -32,8 +32,10 @@ public void pressDigitKey(int digit) { if(digit > 9 || digit < 0) throw new IllegalArgumentException(); if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + { + screen = screen + digit; - screen = screen + digit; + } } /** diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index ddff0da..f6e6f52 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -90,5 +90,20 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen -} + @Test + @DisplayName("should display result after subtracting two positive numbers") + void testPositiveSubtraction() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(9); + calc.pressBinaryOperationKey("-"); + calc.pressDigitKey(4); + calc.pressEqualsKey(); + + String expected = "5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } +} From 1d8b8929ecc9cba68fcbe509dfc82da5e2432f63 Mon Sep 17 00:00:00 2001 From: razan salman Date: Sat, 25 Oct 2025 14:46:06 +0200 Subject: [PATCH 2/3] Add red tests for input validation (9-digit limit) and inverse of zero error --- .../java/htw/berlin/prog2/ha1/Calculator.java | 19 +++++---- .../htw/berlin/prog2/ha1/CalculatorTest.java | 39 ++++++++++++++++++- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 7aa434d..de10f4b 100644 --- a/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -29,13 +29,13 @@ 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 = ""; - { - screen = screen + digit; + if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if (screen.length() < 9) { + screen = screen + digit; + } - } } /** @@ -64,8 +64,12 @@ public void pressClearKey() { public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; + } + + + /** * Empfängt den Wert einer gedrückten unären Operationstaste, also eine der drei Operationen * Quadratwurzel, Prozent, Inversion, welche nur einen Operanden benötigen. @@ -83,9 +87,8 @@ public void pressUnaryOperationKey(String operation) { 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.contains(".") && screen.length() > 11) screen = screen.substring(0, 10);; } /** diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index f6e6f52..e0362f0 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -106,4 +106,41 @@ void testPositiveSubtraction() { assertEquals(expected, actual); } -} + @Test + @DisplayName("should limit input number to 9 digits") + void testInput() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + + + String expected = "999999999"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should display error when calculating inverse of zero") + void testInverse0zero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; // 1/0= Error + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + +} \ No newline at end of file From 6247edc9b99f8d87fd3356f92d98c483792edbe3 Mon Sep 17 00:00:00 2001 From: razan salman Date: Sat, 25 Oct 2025 14:46:06 +0200 Subject: [PATCH 3/3] Add red tests for input validation (9-digit limit) and inverse of zero error --- .../java/htw/berlin/prog2/ha1/Calculator.java | 19 +++++---- .../htw/berlin/prog2/ha1/CalculatorTest.java | 39 ++++++++++++++++++- 2 files changed, 49 insertions(+), 9 deletions(-) diff --git a/src/main/java/htw/berlin/prog2/ha1/Calculator.java b/src/main/java/htw/berlin/prog2/ha1/Calculator.java index 7aa434d..de10f4b 100644 --- a/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -29,13 +29,13 @@ 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 = ""; - { - screen = screen + digit; + if(screen.equals("0") || latestValue == Double.parseDouble(screen)) screen = ""; + if (screen.length() < 9) { + screen = screen + digit; + } - } } /** @@ -64,8 +64,12 @@ public void pressClearKey() { public void pressBinaryOperationKey(String operation) { latestValue = Double.parseDouble(screen); latestOperation = operation; + } + + + /** * Empfängt den Wert einer gedrückten unären Operationstaste, also eine der drei Operationen * Quadratwurzel, Prozent, Inversion, welche nur einen Operanden benötigen. @@ -83,9 +87,8 @@ public void pressUnaryOperationKey(String operation) { 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.contains(".") && screen.length() > 11) screen = screen.substring(0, 10);; } /** diff --git a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java index f6e6f52..e0362f0 100644 --- a/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -106,4 +106,41 @@ void testPositiveSubtraction() { assertEquals(expected, actual); } -} + @Test + @DisplayName("should limit input number to 9 digits") + void testInput() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + calc.pressDigitKey(9); + + + String expected = "999999999"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + @Test + @DisplayName("should display error when calculating inverse of zero") + void testInverse0zero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + String expected = "Error"; // 1/0= Error + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + +} \ No newline at end of file