static void Main(string[] args) { while (true) { string input = PromptGetResponse(Messages.Prompt_EnterExpression); if (input.ToLower() == QuitKeyword.ToLower()) { break; } string postfix; int result; try { postfix = ShuntingYardAlgorithm.Convert(input); } catch (Exception) { DisplayMessage(Messages.ErrorMessage_PostfixParseFailed, isError: true); continue; } try { result = ReversePolishNotation.Evaluate(postfix); } catch (Exception ex) { // special case in that it's very clear what the problem is if (ex is DivideByZeroException) { DisplayMessage(Messages.ErrorMessage_EvaluationGeneratesDivideByZero, isError: true); } else { DisplayMessage(Messages.ErrorMessage_EvaluationFailed, isError: true); } continue; } DisplayMessage($"{Messages.Message_Result} {result}"); } }
public void WhenConvert_InvalidExpression_ThrowsException(string input) { Assert.ThrowsException <FormatException>(() => ShuntingYardAlgorithm.Convert(input)); }
public void WhenConvert_ValidExpression_Returns_CorrectResult(string input, string expectedOutput) { var output = ShuntingYardAlgorithm.Convert(input); Assert.AreEqual(expectedOutput, output); }