Ejemplo n.º 1
0
    public void CompilesNestedExpressionsToHeirarchy()
    {
        var expressionString   = "(2 - (4 * (2 - .1))/3 >= 3)";
        var tokens             = Tokenizer.Tokenize(expressionString).ToArray();
        var expressionCompiler = new ExpressionCompiler(new Dictionary <string, ParameterExpression>());
        var nestedExpression   = expressionCompiler.GetHeirarchicalExpression(tokens);

        Assert.AreEqual(7, nestedExpression.tokenSeries.Count);
        Assert.AreEqual(2, ((nestedExpression.tokenSeries[0] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
        Assert.AreEqual(TokenType.SUBTRACT, (nestedExpression.tokenSeries[1] as TokenOperator)?.type);
        Assert.IsTrue((nestedExpression.tokenSeries[2] as TokenExpression)?.isTokenSeries);
        Assert.AreEqual(TokenType.DIVIDE, (nestedExpression.tokenSeries[3] as TokenOperator)?.type);
        Assert.AreEqual(3, ((nestedExpression.tokenSeries[4] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
        Assert.AreEqual(TokenType.GREATER_THAN_OR_EQ, (nestedExpression.tokenSeries[5] as TokenOperator)?.type);
        Assert.AreEqual(3, ((nestedExpression.tokenSeries[6] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);

        var innerSeries1 = (nestedExpression.tokenSeries[2] as TokenExpression).tokenSeries;

        Assert.AreEqual(4, ((innerSeries1[0] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
        Assert.AreEqual(TokenType.MULTIPLY, (innerSeries1[1] as TokenOperator)?.type);
        Assert.IsTrue((innerSeries1[2] as TokenExpression)?.isTokenSeries);

        var innerSeries2 = (innerSeries1[2] as TokenExpression).tokenSeries;

        Assert.AreEqual(2, ((innerSeries2[0] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
        Assert.AreEqual(TokenType.SUBTRACT, (innerSeries2[1] as TokenOperator)?.type);
        Assert.AreEqual(0.1f, ((innerSeries2[2] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
    }
Ejemplo n.º 2
0
    public void CompilesNestedExpressionWithParameterToHeirarchy()
    {
        var expressionString = "(2 - (4 * vary))";

        var expressionCompiler = new ExpressionCompiler("vary");
        var tokens             = Tokenizer.Tokenize(expressionString, expressionCompiler.parameters.Keys.ToArray()).ToArray();
        var nestedExpression   = expressionCompiler.GetHeirarchicalExpression(tokens);

        Assert.AreEqual(3f, nestedExpression.tokenSeries.Count);
        Assert.AreEqual(2f, ((nestedExpression.tokenSeries[0] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
        Assert.AreEqual(TokenType.SUBTRACT, (nestedExpression.tokenSeries[1] as TokenOperator)?.type);
        Assert.IsTrue((nestedExpression.tokenSeries[2] as TokenExpression)?.isTokenSeries);

        var innerSeries1 = (nestedExpression.tokenSeries[2] as TokenExpression).tokenSeries;

        Assert.AreEqual(4f, ((innerSeries1[0] as TokenExpression)?.compiledExpression as OperatorBuilder).nodeValue);
        Assert.AreEqual(TokenType.MULTIPLY, (innerSeries1[1] as TokenOperator)?.type);
        Assert.AreEqual("vary", ((innerSeries1[2] as TokenExpression)?.compiledExpression as OperatorBuilder).parameter.Name);
    }