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() : 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,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user