Exemplo n.º 1
0
        public void FuncDependency()
        {
            var expr = VCExpression.ParseDefault("1 + f()", ("f", _ => 1));
            var deps = expr.Expression.Dependencies.ToList();

            Assert.That(deps, Is.EquivalentTo(new IDependency[] { new FuncDependency("f") }));
        }
Exemplo n.º 2
0
        public void NoDependency()
        {
            var expr = VCExpression.ParseDefault("1 + 1");
            var deps = expr.Expression.Dependencies.ToList();

            Assert.That(deps, Is.Empty);
        }
Exemplo n.º 3
0
        public void MixedDependencies()
        {
            var expr = VCExpression.ParseDefault("A ? now() : today()");
            var deps = expr.Expression.Dependencies.ToList();

            Assert.That(deps, Is.EquivalentTo(new IDependency[] { new PropDependency("A"), TemporalDependency.Now, TemporalDependency.Today }));
        }
Exemplo n.º 4
0
 public static List <ParseResult <object> > ParseMultiple(string exprString)
 {
     return(new List <ParseResult <object> >
     {
         VCExpression.ParseDefault(exprString),
         CSharpExpression.ParseMethod(exprString)
     });
 }
Exemplo n.º 5
0
        public void PropertyDeps(string exprString, params string[] deps)
        {
            var expr    = VCExpression.ParseDefault(exprString);
            var depList = expr.Expression.Dependencies.ToList();

            Assert.That(depList, Is.All.TypeOf <PropDependency>());
            var propDefs = depList.OfType <PropDependency>().ToList();

            Assert.That(propDefs.Select(p => p.Name), Is.EquivalentTo(deps));
        }
Exemplo n.º 6
0
        public void ParseErrorTest(string exprString, string exprError)
        {
            var parseResult = VCExpression.ParseDefault(exprString);

            Assert.That(parseResult.Success, Is.False);
            var exprMessage = string.Join(
                "\n",
                parseResult.ParseErrors.Select(e => e.GetExprError(exprString)));

            Assert.That(exprMessage, Is.EqualTo(exprError));
        }
Exemplo n.º 7
0
        public void AccessValueInDictionary()
        {
            var expr = VCExpression.ParseDefault(
                "(a + b) * c");

            var dic = new Dictionary <string, object>
            {
                { "a", 10 },
                { "b", 5 },
                { "c", 3 }
            };

            var result = expr.Expression.Evaluate(dic);

            Assert.That(result, Is.EqualTo(45));
        }
Exemplo n.º 8
0
        public void EvalLegacyMathFunction(string exprString, object expected)
        {
            var funcs = new DefaultFunctions <object>();

            funcs.Register("GetValue", (a, b) => Convert.ToDouble(a[1]));
            var parseResult = VCExpression.ParseDefault(exprString, funcs);
            var expr        = parseResult.Expression;
            var result      = expr.Evaluate(new { });

            Assert.That(result, Is.EqualTo(expected));

            var funcs2 = new DefaultCSharpFunctions();

            funcs2.Register("GetValue", (a, b) => $"Convert.ToDouble({a[1]})");
            var parseResult2 = CSharpExpression.ParseMethod(exprString, funcs2);
            var expr2        = parseResult2.Expression;
            var result2      = expr2.Evaluate(new { });

            Assert.That(result2, Is.EqualTo(expected));
        }
Exemplo n.º 9
0
        public void AccessDictionaryInDictionary_WithOverride()
        {
            var expr = VCExpression.ParseDefault(
                "let x = a + b.b_value in x");

            var dic = new Dictionary <string, object>
            {
                { "a", 10 },
                {
                    "b",
                    new Dictionary <string, object>()
                    {
                        { "b_value", 5 }
                    }
                }
            };

            var result = expr.Expression.Evaluate(dic);

            Assert.That(result, Is.EqualTo(15));
        }
Exemplo n.º 10
0
        public void AccessDictionaryInDictionary_WithOtherCalculation()
        {
            var expr = VCExpression.ParseDefault(
                "(a + b.b_value) ^ 2 * c + 25");

            var dic = new Dictionary <string, object>
            {
                { "a", 10 },
                {
                    "b",
                    new Dictionary <string, object>()
                    {
                        { "b_value", 5 }
                    }
                },
                { "c", 3 }
            };

            var result = expr.Expression.Evaluate(dic);

            Assert.That(result, Is.EqualTo(700));
        }