From 6b3a46a898c97c4bd2a1726a291e77fe2d69cc39 Mon Sep 17 00:00:00 2001 From: pskell Date: Tue, 22 Oct 2024 18:00:30 +0200 Subject: [PATCH] Ha1 done --- .../java/htw/berlin/prog2/ha1/Calculator.java | 26 ++++++-- .../htw/berlin/prog2/ha1/CalculatorTest.java | 66 +++++++++++++++++++ 2 files changed, 85 insertions(+), 7 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..b4aa170 100644 --- a/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java +++ b/app/src/main/java/htw/berlin/prog2/ha1/Calculator.java @@ -12,6 +12,8 @@ public class Calculator { private double latestValue; + private double latestLatestValue; + private String latestOperation = ""; /** @@ -60,6 +62,9 @@ public void pressClearKey() { * @param operation "+" für Addition, "-" für Substraktion, "x" für Multiplikation, "/" für Division */ public void pressBinaryOperationKey(String operation) { + if(!(latestValue ==0)) { + latestLatestValue = latestValue; + } latestValue = Double.parseDouble(screen); latestOperation = operation; } @@ -84,6 +89,7 @@ public void pressUnaryOperationKey(String operation) { if(screen.equals("NaN")) screen = "Error"; if(screen.contains(".") && screen.length() > 11) screen = screen.substring(0, 10); + toString(result); } /** @@ -118,16 +124,22 @@ public void pressNegativeKey() { * und das Ergebnis direkt angezeigt. */ public void pressEqualsKey() { - var result = switch(latestOperation) { - case "+" -> latestValue + Double.parseDouble(screen); + var result = switch (latestOperation) { + case "+" -> latestValue + Double.parseDouble(screen) + latestLatestValue; case "-" -> latestValue - Double.parseDouble(screen); - case "x" -> latestValue * Double.parseDouble(screen); + case "x" -> latestValue * Double.parseDouble(screen) + latestLatestValue; case "/" -> latestValue / Double.parseDouble(screen); 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); + toString(result); + } + public void toString(double result) { + 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); + if(screen.equals("NaN")) screen = "Error"; + } + } 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..87d3357 100644 --- a/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java +++ b/app/src/test/java/htw/berlin/prog2/ha1/CalculatorTest.java @@ -90,5 +90,71 @@ void testMultipleDecimalDots() { //TODO hier weitere Tests erstellen + + @Test + @DisplayName("should display correct answer when using sine function") + void testSineFunction() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(2); + calc.pressUnaryOperationKey("1/x"); + + + String expected = "0.5"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should display 6 after adding 1, 2 and 3") + void testTwoOperations() { + Calculator calc = new Calculator(); + calc.pressDigitKey(1); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(2); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + + String expected = "6"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + @Test + @DisplayName("should display 7 after adding 1 to the multiplication of 2 and 3, Order is important") + void testOperationOrder() { + Calculator calc = new Calculator(); + calc.pressDigitKey(1); + calc.pressBinaryOperationKey("+"); + calc.pressDigitKey(2); + calc.pressBinaryOperationKey("x"); + calc.pressDigitKey(3); + calc.pressEqualsKey(); + + String expected = "7"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + //Bonustest + @Test + @DisplayName("should display Error after using the Sine Function on Zero") + void testSineFunctionWithZero() { + Calculator calc = new Calculator(); + + calc.pressDigitKey(0); + calc.pressUnaryOperationKey("1/x"); + + + String expected = "Error"; + String actual = calc.readScreen(); + + assertEquals(expected, actual); + } + + + + }