From b586bfe11efa7e71a918a3e989fb1e85009de011 Mon Sep 17 00:00:00 2001 From: ModZero Date: Thu, 8 Feb 2024 18:19:48 +0100 Subject: [PATCH] Test and fix the "operator after equals" case. --- Server/Calculator.cs | 19 +++++++++---------- ServerTests/CalculatorTests.cs | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/Server/Calculator.cs b/Server/Calculator.cs index 4f78828..52eeb4a 100644 --- a/Server/Calculator.cs +++ b/Server/Calculator.cs @@ -44,15 +44,14 @@ public record Calculator(CalculatorState State, string LeftOperand, CalculatorOp public Calculator() : this(CalculatorState.AfterEquals, "0", null, "0") { } - public Calculator OperatorPressed(CalculatorOperator op) => this with - { - LeftOperand = State switch { - CalculatorState.AfterOperator or CalculatorState.AfterEquals => RightOperand, + public Calculator OperatorPressed(CalculatorOperator op) => new( + LeftOperand: State switch { + CalculatorState.AfterOperator or CalculatorState.AfterEquals => Display, CalculatorState.AfterDigit => Evaluate(), - }, - Operator = op, - State = CalculatorState.AfterOperator, - }; + }, + Operator: op, + RightOperand: Display, + State: CalculatorState.AfterOperator); public Calculator EqualsPressed() => this with { LeftOperand = Evaluate(), @@ -61,13 +60,13 @@ public record Calculator(CalculatorState State, string LeftOperand, CalculatorOp public Calculator DigitPressed(string digit) => this with { LeftOperand = State switch { - CalculatorState.AfterEquals or CalculatorState.AfterOperator => RightOperand, + CalculatorState.AfterEquals or CalculatorState.AfterOperator => Display, CalculatorState.AfterDigit => LeftOperand, }, RightOperand = State switch { CalculatorState.AfterOperator or CalculatorState.AfterEquals => digit, CalculatorState.AfterDigit => RightOperand + digit, - }, + }, State = CalculatorState.AfterDigit, }; diff --git a/ServerTests/CalculatorTests.cs b/ServerTests/CalculatorTests.cs index 249fa11..a972c50 100644 --- a/ServerTests/CalculatorTests.cs +++ b/ServerTests/CalculatorTests.cs @@ -40,4 +40,19 @@ public class CalculatorTests calculator = calculator.EqualsPressed(); Assert.Equal("8", calculator.Display); } + + [Fact] + public void OperatorAfterEquals() + { + var calculator = new Calculator() + .DigitPressed("2") + .OperatorPressed(CalculatorOperator.Multiplication) + .DigitPressed("3") + .EqualsPressed(); + Assert.Equal("6", calculator.Display); + calculator = calculator.OperatorPressed(CalculatorOperator.Addition); + Assert.Equal("6", calculator.Display); + calculator = calculator.EqualsPressed(); + Assert.Equal("12", calculator.Display); + } } \ No newline at end of file