Test and fix the "operator after equals" case.
This commit is contained in:
parent
719444c06e
commit
b586bfe11e
@ -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,
|
||||
};
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user