public void WhenWrongOperatorExpressionIsPassed_Then_ExceptionShouldBeThrown() { var sut = new OperatorTermParser(); Assert.Throws <InvalidOperationException>(() => { var result = sut.Parse("&", 0); }); }
public void WhenExpressionIsPassed_Then_ItShoulBeOperator(string expression) { var sut = new OperatorTermParser(); var result = sut.Parse(expression, 0); Assert.True(result.TermType == TermType.Operator); Assert.True(result.Term == expression); }
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); }