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}"); }
public ExpressionTerm(char sign, IEnumerable <ITerm> expression) { this.Sign = ArithmeticSignHelpers.GetArithmeticSignType(sign); this.Expression = expression.ToList(); }
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)