public void WhenSubexpressionIsEmptyOrHasNotMatchingParenthesis_Then_ExceptionShouldBeThrown(string expression) { var sut = new SubExpressionTermParser(); Assert.Throws <InvalidOperationException>(() => { sut.Parse(expression, 0); }); }
public void WhenSubexpressionIsPassed_Then_CorrecTermIsCreated(string expression, string expectedTerm) { var sut = new SubExpressionTermParser(); var result = sut.Parse(expression, 0); Assert.True(result.TermType == TermType.Expression); Assert.True(result.Term == expectedTerm); }
public List <MathParserTermResult> Parse(string expression, bool allowParameters = false) { var terms = new List <MathParserTermResult>(); if (String.IsNullOrWhiteSpace(expression)) { throw new ArgumentNullException("Expression cannot be empty!"); } var i = 0; while (i < expression.Length) { MathParserTermResult term = null; if (Char.IsDigit(expression[i])) { term = new NumberTermParser().Parse(expression, i); } else if (OperatorTermParser.IsOperator(expression[i])) { term = new OperatorTermParser().Parse(expression, i); } else if (Char.IsLetter(expression[i])) { term = new FunctionOrConstTermParser().Parse(expression, i); } else if (SubExpressionTermParser.IsOpenParenthesis(expression[i])) { term = new SubExpressionTermParser().Parse(expression, i); } else if (allowParameters && expression[i] == ',') { i++; continue; } if (term != null) { i = term.EndPos; terms.Add(term); } else { throw new InvalidOperationException($"Wrong character '{expression[i]}' at [{i}]!"); } } return(terms); }