Test and fix the "operator after equals" case.

This commit is contained in:
Gender Shrapnel 2024-02-08 18:19:48 +01:00
parent 719444c06e
commit b586bfe11e
Signed by: modzero
SSH Key Fingerprint: SHA256:hsF2onMcqHsX09jLIFn7GvltdH9NTfFd/1tCnBNfQ4g
2 changed files with 24 additions and 10 deletions

View File

@ -44,15 +44,14 @@ public record Calculator(CalculatorState State, string LeftOperand, CalculatorOp
public Calculator() : this(CalculatorState.AfterEquals, "0", null, "0") { } public Calculator() : this(CalculatorState.AfterEquals, "0", null, "0") { }
public Calculator OperatorPressed(CalculatorOperator op) => this with public Calculator OperatorPressed(CalculatorOperator op) => new(
{ LeftOperand: State switch {
LeftOperand = State switch { CalculatorState.AfterOperator or CalculatorState.AfterEquals => Display,
CalculatorState.AfterOperator or CalculatorState.AfterEquals => RightOperand,
CalculatorState.AfterDigit => Evaluate(), CalculatorState.AfterDigit => Evaluate(),
}, },
Operator = op, Operator: op,
State = CalculatorState.AfterOperator, RightOperand: Display,
}; State: CalculatorState.AfterOperator);
public Calculator EqualsPressed() => this with { public Calculator EqualsPressed() => this with {
LeftOperand = Evaluate(), LeftOperand = Evaluate(),
@ -61,13 +60,13 @@ public record Calculator(CalculatorState State, string LeftOperand, CalculatorOp
public Calculator DigitPressed(string digit) => this with { public Calculator DigitPressed(string digit) => this with {
LeftOperand = State switch { LeftOperand = State switch {
CalculatorState.AfterEquals or CalculatorState.AfterOperator => RightOperand, CalculatorState.AfterEquals or CalculatorState.AfterOperator => Display,
CalculatorState.AfterDigit => LeftOperand, CalculatorState.AfterDigit => LeftOperand,
}, },
RightOperand = State switch { RightOperand = State switch {
CalculatorState.AfterOperator or CalculatorState.AfterEquals => digit, CalculatorState.AfterOperator or CalculatorState.AfterEquals => digit,
CalculatorState.AfterDigit => RightOperand + digit, CalculatorState.AfterDigit => RightOperand + digit,
}, },
State = CalculatorState.AfterDigit, State = CalculatorState.AfterDigit,
}; };

View File

@ -40,4 +40,19 @@ public class CalculatorTests
calculator = calculator.EqualsPressed(); calculator = calculator.EqualsPressed();
Assert.Equal("8", calculator.Display); 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);
}
} }