Test and fix the "operator after equals" case.
This commit is contained in:
		| @@ -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,7 +60,7 @@ 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 { | ||||||
|   | |||||||
| @@ -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); | ||||||
|  |     } | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user