public void GetArithmeticSignTypeTest_IncorrectSymbol_ThrowException(char symbol)
        {
            ArithmeticSignHelpers.GetArithmeticSignType(symbol);

            //assert
            //throw ArgumentException
        }
        public void GetArithmeticSignTypeTest_CorrectArithmeticSign(char symbolSign, ArithmeticSign expectedSign)
        {
            var actualSign = ArithmeticSignHelpers.GetArithmeticSignType(symbolSign);

            Assert.AreEqual(expectedSign, actualSign, $"Sign: {actualSign} != {expectedSign}");
        }
        public void IsNegativeNumberTest_CorrectSymbol(char symbol, bool expectedValue)
        {
            bool actualValue = ArithmeticSignHelpers.IsNegativeNumber(symbol);

            Assert.AreEqual(expectedValue, actualValue, $"Incorrectly recognized symbol: {symbol}");
        }
Ejemplo n.º 4
0
 public ExpressionTerm(char sign, IEnumerable <ITerm> expression)
 {
     this.Sign       = ArithmeticSignHelpers.GetArithmeticSignType(sign);
     this.Expression = expression.ToList();
 }
Ejemplo n.º 5
0
 public NumberTerm(char sign, decimal digit)
 {
     this.Sign  = ArithmeticSignHelpers.GetArithmeticSignType(sign);
     this.Digit = digit;
 }
        public List <ITerm> GetParsedExpression(string str)
        {
            List <ITerm> expression = new List <ITerm>();

            bool isNumber         = false;
            bool isNegativeNumber = false;

            int startNumberIndex = 0;

            var sign           = ArithmeticSign.Sum;
            var signExpression = ArithmeticSign.Sum;

            int  nestedExpressionCount = 0;
            bool isNewNestedExpression = false;

            for (int i = 0; i < str.Length; i++)
            {
                var isStartBracket = str[i].IsStartBracket();
                var isEndBracket   = str[i].IsEndBracket();
                var isOperation    = (str[i].IsArithmeticSign() || isStartBracket || isEndBracket);

                if (isOperation)
                {
                    if (isStartBracket)
                    {
                        nestedExpressionCount++;
                        signExpression = sign;
                        isNumber       = false;
                        continue;
                    }

                    if (isEndBracket && str[i - 1].IsEndBracket())
                    {
                        nestedExpressionCount--;
                        if (nestedExpressionCount == 0)
                        {
                            isNewNestedExpression = true;
                        }
                        continue;
                    }

                    if (isNumber || isEndBracket)
                    {
                        if (startNumberIndex == i)
                        {
                            startNumberIndex++;
                            isNegativeNumber = true;
                            continue;
                        }

                        var numberTerm = CreateNumberTerm(str, i, startNumberIndex, sign, isNegativeNumber);

                        if (nestedExpressionCount == 0)
                        {
                            expression.Add(numberTerm);
                        }
                        else if (nestedExpressionCount == 1)
                        {
                            ExpressionTerm innerExpression = GetOrCreateFirstInnerExpression(expression, signExpression, isNewNestedExpression);
                            innerExpression.Expression.Add(numberTerm);
                            isNewNestedExpression = false;
                        }
                        else if (nestedExpressionCount > 1)
                        {
                            IList <ITerm> innerExpression = GetOrCreateSubsequentInnerExpression(expression, nestedExpressionCount, signExpression);
                            innerExpression.Add(numberTerm);
                            isNewNestedExpression = false;
                        }

                        if (isEndBracket)
                        {
                            nestedExpressionCount--;
                            if (nestedExpressionCount == 0)
                            {
                                isNewNestedExpression = true;
                            }

                            i++;
                        }

                        isNumber = false;
                        i--;
                    }
                    else
                    {
                        isNumber         = true;
                        isNegativeNumber = false;
                        startNumberIndex = i + 1;

                        sign = ArithmeticSignHelpers.GetArithmeticSignType(str[i]);
                    }
                }
            }

            if (str[^ 1].IsEndBracket() == false)