コード例 #1
0
        public void Parse(string input, string formatted)
        {
            var n = MathExpressionParser.Parse(input, out var err);

            Assert.IsNull(err, $"The expression was expected to be valid, but failed to parse: '{err}'");
            Assert.AreEqual(formatted, Format(n));
        }
        protected override void OnDefineNode()
        {
            m_RootExpression = MathExpressionParser.Parse(Expression, out m_ExpressionError);
            m_Variables.Clear();

            if (m_ExpressionError == null)
            {
                try
                {
                    GetVariables(m_RootExpression);
                }
                catch (Exception e)
                {
                    m_ExpressionError = e.Message;
                }
            }

            MainOutputPort = this.AddDataOutputPort <float>(null, nameof(MainOutputPort));
        }
コード例 #3
0
        public void InvalidExpressions(string input)
        {
            var n = MathExpressionParser.Parse(input, out var err);

            Assert.IsNotNull(err, $"The expression was expected to be invalid, but was parsed: '{n}'");
        }
コード例 #4
0
 public void MathExpressionParser_Can_Parse_And_Evaluate_Variable()
 {
     var input = this.GetPostfixTokenStream("x");
     MathExpressionParser parser = new MathExpressionParser();
     MathExpression expression = parser.Parse(input);
     MathExpressionContext context = new MathExpressionContext();
     context.Define("x", 42);
     Assert.AreEqual(42D, expression.Evaluate(context));
 }
コード例 #5
0
 public void MathExpressionParser_Tokens_Must_Be_In_Postfix_Notation()
 {
     TokenStream stream = new TokenStream(Enumerable.Empty<Token>(), TokenNotation.Infix);
     MathExpressionParser parser = new MathExpressionParser();
     var exception = Assert.Throws<MathExpressionException>(() => parser.Parse(stream));
     Assert.AreEqual("Tokens are not in postfix notation.", exception.Details);
 }
コード例 #6
0
 public void MathExpressionParser_TokenStream_With_Invalid_Token_Will_Throw()
 {
     var tokens = new List<Token>();
     tokens.Add(new Token(TokenType.Numeric, 1D));
     tokens.Add(new Token(TokenType.Numeric, 2D));
     tokens.Add(new Token(TokenType.Unknown, "?"));
     TokenStream stream = new TokenStream(tokens, TokenNotation.Postfix);
     MathExpressionParser parser = new MathExpressionParser();
     var exception = Assert.Throws<MathExpressionException>(() => parser.Parse(stream));
     Assert.AreEqual("Expected arithmetic operator in token stream.", exception.Details);
 }
コード例 #7
0
 public void MathExpressionParser_TokenStream_Must_Be_Provided()
 {
     MathExpressionParser parser = new MathExpressionParser();
     var exception = Assert.Throws<ArgumentNullException>(() => parser.Parse((TokenStream)null));
     Assert.AreEqual("tokens", exception.ParamName);
 }
コード例 #8
0
 public void MathExpressionParser_No_Tokens_In_Stream_Returns_ConstantExpression()
 {
     TokenStream stream = new TokenStream(Enumerable.Empty<Token>(), TokenNotation.Postfix);
     MathExpressionParser parser = new MathExpressionParser();
     MathExpression expression = parser.Parse(stream);
     Assert.IsNotNull(expression);
     Assert.IsInstanceOf<NumericExpression>(expression);
     Assert.AreEqual(0D, ((NumericExpression)expression).Value);
 }