public void Run()
        {
            string expression;

            ShowHelp();

            while ((expression = AskForInput()) != "")
            {
                try
                {
                    NotationConverter converter = new NotationConverter(expression);
                    converter.Convert();
                    calculator.Calculate(converter.PolishNotation);
                    ShowResult();
                }
                catch (InvalidExpressionException ex)
                {
                    Console.WriteLine(ex.Message);
                }
                catch (DivideByZeroException ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
        private float GetExpressionResult(string infix)
        {
            NotationConverter converter = new NotationConverter(infix);

            converter.Convert();
            calc.Calculate(converter.PolishNotation);

            return(calc.Result);
        }
        public void CorrectUnaryMinus()
        {
            NotationConverter converter = new NotationConverter("-4");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "4", "_" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectDifferenceOf2Numbers()
        {
            NotationConverter converter = new NotationConverter("41-5");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "41", "5", "-" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectDivisionOf2Numbers()
        {
            NotationConverter converter = new NotationConverter("4/31");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "4", "31", "/" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectCommaProcessing()
        {
            NotationConverter converter = new NotationConverter("pow((3    )   ,(3))");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "3", "3", "pow" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectSumOf2Digits()
        {
            NotationConverter converter = new NotationConverter("4+5");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "4", "5", "+" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectWorkWithMultiplyFunctionsAndOperatorsInPow()
        {
            NotationConverter converter = new NotationConverter("pow(cos(1) + pow(2 + 3, 2), sin(5))");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "1", "cos", "2", "3", "+", "2", "pow", "+", "5", "sin", "pow" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectWorkIfMultiplyFunctions()
        {
            NotationConverter converter = new NotationConverter("sin(pow(5, -cos(3)))");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "5", "3", "cos", "_", "pow", "sin" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectWorkWithDifferentPriorities()
        {
            NotationConverter converter = new NotationConverter("-4+5*6+1/2*3+7");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "4", "_", "5", "6", "*", "+", "1", "2", "/", "3", "*", "+", "7", "+" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void CorrectSumOfManyNumbers()
        {
            NotationConverter converter = new NotationConverter("4+5+6+1+2+3+7");

            converter.Convert();
            var result   = converter.PolishNotation;
            var expected = PushToStack(new string[] { "4", "5", "+", "6", "+", "1", "+", "2", "+", "3", "+", "7", "+" });

            CollectionAssert.AreEqual(result, expected);
        }
        public void ThrowsExeptionIfIncorrectBracket2()
        {
            NotationConverter converter = new NotationConverter("()(");

            converter.Convert();
        }