Пример #1
0
        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);
        }