Exemplo n.º 1
0
        public void SingleEqualSign()
        {
            var varContext   = getContext();
            var lambdaParser = new LambdaParser();

            lambdaParser.AllowSingleEqualSign = true;
            Assert.True((bool)lambdaParser.Eval("null = nullVar", varContext));
            Assert.True((bool)lambdaParser.Eval("5 = (5+1-1)", varContext));
        }
        public void ParsePerfNReco()
        {
            var paramList    = new List <string>();
            var lambdaParser = new LambdaParser();
            var exp          = "(a*2 + 100)/b + suka + testObj.Dupel((d + s)*(x + y))";
            var parseResult  = lambdaParser.Parse(exp);

            this.ParamFind(parseResult, ref paramList);
            paramList.ForEach(Console.WriteLine);

            var varContext = new Dictionary <string, object> {
                ["testObj"] = new TestClass()
            };

            foreach (var prm in paramList)
            {
                if (prm.Contains("testObj"))
                {
                    continue;
                }

                varContext.Add(prm, 10);
            }

            var result = (decimal)lambdaParser.Eval(exp, varContext);

            Console.WriteLine(result);
        }
Exemplo n.º 3
0
        protected override Row MergeRows(Row leftRow, Row rightRow)
        {
            Row row = new Row();

            foreach (var mapping in Mappings)
            {
                if (!string.IsNullOrEmpty(mapping.LeftKey))
                {
                    row[mapping.Display] = leftRow[mapping.LeftKey];
                }
                else if (!string.IsNullOrEmpty(mapping.RightKey))
                {
                    row[mapping.Display] = rightRow[mapping.RightKey];
                }
                else if (!string.IsNullOrEmpty(mapping.Formula))
                {
                    var varContext = new Dictionary <string, object>();
                    foreach (System.Collections.DictionaryEntry l in leftRow)
                    {
                        string name = "left_" + l.Key;
                        varContext[name] = l.Value;
                    }
                    foreach (System.Collections.DictionaryEntry r in rightRow)
                    {
                        string name = "right_" + r.Key;
                        varContext[name] = r.Value;
                    }

                    var lambdaParser = new LambdaParser();
                    row[mapping.Display] = lambdaParser.Eval(mapping.Formula, varContext);
                }
            }

            return(row);
        }
Exemplo n.º 4
0
        public void NullComparison()
        {
            var varContext   = getContext();
            var lambdaParser = new LambdaParser();

            Assert.True((bool)lambdaParser.Eval("null == nullVar", varContext));
            Assert.True((bool)lambdaParser.Eval("5>nullVar", varContext));
            Assert.True((bool)lambdaParser.Eval("testObj!=null", varContext));
            Assert.Equal(0, LambdaParser.GetExpressionParameters(lambdaParser.Parse("20 == null")).Length);

            lambdaParser = new LambdaParser(new ValueComparer()
            {
                NullComparison = ValueComparer.NullComparisonMode.Sql
            });
            Assert.False((bool)lambdaParser.Eval("null == nullVar", varContext));
            Assert.False((bool)lambdaParser.Eval("nullVar<5", varContext));
            Assert.False((bool)lambdaParser.Eval("nullVar>5", varContext));
        }
Exemplo n.º 5
0
        public object GetValue(object context)
        {
            var lambdaParser  = new LambdaParser();
            var lambdaContext = new Dictionary <string, object>();

            lambdaContext["ComponentFactory"] = ComponentFactory;
            lambdaContext["Context"]          = context;
            return(lambdaParser.Eval(Expression, lambdaContext));
        }
        public void FuncTestNReco4()
        {
            var lambdaParser = new LambdaParser();
            var varContext   = new Dictionary <string, object>
            {
                ["A"] = 10,
                ["B"] = 12
            };
            var result = lambdaParser.Eval("A * (B + 10)", varContext);

            Console.WriteLine(result);
        }
        public bool LambdaParser(Parameter parameter)
        {
            StringBuilder statementBuilder = new StringBuilder()
                                             .AppendLine("new [] {")
                                             .AppendJoin("," + Environment.NewLine, parameter.Statements)
                                             .AppendLine("}");

            LambdaParser lambdaParser = new LambdaParser();

            object[] results = (object[])lambdaParser.Eval(statementBuilder.ToString(), _ => null);

            return(Assert(results.Select(Convert.ToInt32), parameter.Sum));
        }
        public IEnumerable <float> Calculate(string formulaDefinition, int samplingRate, DecodedScan[] signalsInputData)
        {
            _formulaDefinition = formulaDefinition;
            _samplingRate      = samplingRate;
            _signalsInputData  = signalsInputData;

            for (var sampleIndex = 0; sampleIndex < _signalsInputData.Length; sampleIndex++)
            {
                _formulaVariables["i"] = sampleIndex;

                var resultObject = _lambdaParser.Eval(_formulaDefinition, _formulaVariables);
                var resultValue  = Convert.ToSingle(resultObject);
                yield return(resultValue);
            }
        }
Exemplo n.º 9
0
        private void ExecuteLuaRule(RuleInfo rule, IIotEntity entity)
        {
            var lParser = new LambdaParser();
            var context = new Dictionary <string, object> {
                { "entity", entity }, { "rule", rule }
            };


            var bResult = (bool)lParser.Eval((string)rule.RuleCondition, context);

            if (bResult)
            {
                _logger.LogInformation($"Executing rule {rule.RuleName}");
                rule.Action.Invoke(entity);
            }
        }
Exemplo n.º 10
0
        public void EvalCachePerf()
        {
            var lambdaParser = new LambdaParser();

            var varContext = new Dictionary <string, object>();

            varContext["a"] = 55;
            varContext["b"] = 2;

            var sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < 10000; i++)
            {
                Assert.AreEqual(105, lambdaParser.Eval("(a*2 + 100)/b", varContext));
            }
            sw.Stop();
            Console.WriteLine("10000 iterations: {0}", sw.Elapsed);
        }
Exemplo n.º 11
0
        public IEnumerable <DecodedScan> Calculate(string formulaDefinition, int samplingRate, DecodedScan[] signalsInputData)
        {
            _formulaDefinition  = formulaDefinition;
            _samplingRate       = samplingRate;
            _signalsInputData   = signalsInputData;
            _currentSampleIndex = -1;

            for (var sampleIndex = 0; sampleIndex < _signalsInputData.Length; sampleIndex++)
            {
                _currentSampleIndex = sampleIndex;

                var resultObject = _lambdaParser.Eval(_formulaDefinition, _formulaVariables);
                var resultValue  = Convert.ToSingle(resultObject);
                yield return(new DecodedScan
                {
                    EpochTimestamp = _signalsInputData[sampleIndex].EpochTimestamp,
                    ChannelValues = new[] { resultValue }
                });
            }
        }
        public object GetFormulaValue(IAggregator[] args)
        {
            int argIdx;

            return(Parser.Eval(Formula, (paramName) => {
                // resolve measure value
                if (ParamNameToArgIdx.TryGetValue(paramName, out argIdx))
                {
                    return args[argIdx].Value;
                }

                // extra context
                if (ExtraEvalContext != null && ExtraEvalContext.ContainsKey(paramName))
                {
                    return ExtraEvalContext[paramName];
                }

                throw new ArgumentException("Unknown variable: " + paramName);
            }));
        }
        public void EvalCachePerfNReco()
        {
            decimal result = decimal.MinValue;
            var     sw     = new Stopwatch();

            sw.Start();
            for (var i = 0; i < 10000; i++)
            {
                var varContext = new Dictionary <string, object>
                {
                    ["a"] = 55,
                    ["b"] = 2
                };
                var lambdaParser = new LambdaParser();
                result = (decimal)lambdaParser.Eval("(a*2 + 100)/b", varContext);
            }

            sw.Stop();
            Console.WriteLine("10000 iterations: {0}", sw.Elapsed);
            Assert.AreEqual(105M, result);
        }
Exemplo n.º 14
0
        public void Eval()
        {
            var lambdaParser = new LambdaParser();

            var varContext = new Dictionary <string, object>();

            varContext["pi"]      = 3.14M;
            varContext["one"]     = 1M;
            varContext["two"]     = 2M;
            varContext["test"]    = "test";
            varContext["now"]     = DateTime.Now;
            varContext["testObj"] = new TestClass();
            varContext["arr1"]    = new double[] { 1.5, 2.5 };
            varContext["NOT"]     = (Func <bool, bool>)((t) => !t);
            varContext["Yes"]     = true;
            varContext["nullVar"] = null;
            varContext["name_with_underscore"]  = "a_b";
            varContext["_name_with_underscore"] = "_a_b";

            Assert.AreEqual("st", lambdaParser.Eval("test.Substring(2)", varContext));

            Assert.AreEqual(3, lambdaParser.Eval("1+2", varContext));
            Assert.AreEqual(6, lambdaParser.Eval("1+2+3", varContext));
            Assert.AreEqual("b{0}_", lambdaParser.Eval("\"b{0}_\"", varContext));

            Assert.AreEqual(3, lambdaParser.Eval("(1+(3-1)*4)/3", varContext));

            Assert.AreEqual(1, lambdaParser.Eval("one*5*one-(-1+5*5%10)", varContext));

            Assert.AreEqual("ab", lambdaParser.Eval("\"a\"+\"b\"", varContext));

            Assert.AreEqual(4.14, lambdaParser.Eval("pi + 1", varContext));

            Assert.AreEqual(5.14, lambdaParser.Eval("2 +pi", varContext));

            Assert.AreEqual(2.14, lambdaParser.Eval("pi + -one", varContext));

            Assert.AreEqual("test1", lambdaParser.Eval("test + \"1\"", varContext));

            Assert.AreEqual("a_b_a_b", lambdaParser.Eval(" name_with_underscore + _name_with_underscore ", varContext));

            Assert.AreEqual(1, lambdaParser.Eval("true or false ? 1 : 0", varContext));

            Assert.AreEqual(true, lambdaParser.Eval("5<=3 ? false : true", varContext));

            Assert.AreEqual(5, lambdaParser.Eval("pi>one && 0<one ? (1+8)/3+1*two : 0", varContext));

            Assert.AreEqual(4, lambdaParser.Eval("pi>0 ? one+two+one : 0", varContext));

            Assert.AreEqual(DateTime.Now.Year, lambdaParser.Eval("now.Year", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" (1+testObj.IntProp)==2 ? testObj.FldTrue : false ", varContext));

            Assert.AreEqual("ab2_3", lambdaParser.Eval(" \"a\"+testObj.Format(\"b{0}_{1}\", 2, \"3\".ToString() ).ToString() ", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" testObj.Hash[\"a\"] == \"1\"", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" (testObj.Hash[\"a\"]-1)==testObj.Hash[\"b\"].Length ", varContext));

            Assert.AreEqual(4.0, lambdaParser.Eval(" arr1[0]+arr1[1] ", varContext));

            Assert.AreEqual(2, lambdaParser.Eval(" (new[]{1,2})[1] ", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" new[]{ one } == new[] { 1 } ", varContext));

            Assert.AreEqual(3, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }.Count ", varContext));

            Assert.AreEqual(2, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }[\"b\"] ", varContext));

            var arr = ((Array)lambdaParser.Eval(" new []{ new dictionary{{\"test\",2}}, new[] { one } }", varContext));

            Assert.AreEqual(2, ((IDictionary)arr.GetValue(0))["test"]);
            Assert.AreEqual(1, ((Array)arr.GetValue(1)).GetValue(0));

            Assert.AreEqual("str", lambdaParser.Eval(" testObj.GetDelegNoParam()() ", varContext));
            Assert.AreEqual("zzz", lambdaParser.Eval(" testObj.GetDelegOneParam()(\"zzz\") ", varContext));

            Assert.AreEqual(false, lambdaParser.Eval("(testObj.FldTrue and false) || (testObj.FldTrue && false)", varContext));
            Assert.AreEqual(true, lambdaParser.Eval("false or testObj.FldTrue", varContext));
            Assert.AreEqual("True", lambdaParser.Eval("testObj.BoolParam(true)", varContext));

            Assert.IsTrue((bool)lambdaParser.Eval("true && NOT( false )", varContext));
            Assert.IsTrue((bool)lambdaParser.Eval("true && !( false )", varContext));
            Assert.IsFalse((bool)lambdaParser.Eval("!Yes", varContext));

            Assert.IsTrue((bool)lambdaParser.Eval("null == nullVar", varContext));
            Assert.IsTrue((bool)lambdaParser.Eval("5>nullVar", varContext));
            Assert.IsTrue((bool)lambdaParser.Eval("testObj!=null", varContext));
            Assert.AreEqual(0, LambdaParser.GetExpressionParameters(lambdaParser.Parse("20 == null")).Length);

            lambdaParser = new LambdaParser(new ValueComparer()
            {
                NullComparison = ValueComparer.NullComparisonMode.Sql
            });
            Assert.IsFalse((bool)lambdaParser.Eval("null == nullVar", varContext));
            Assert.IsFalse((bool)lambdaParser.Eval("nullVar<5", varContext));
            Assert.IsFalse((bool)lambdaParser.Eval("nullVar>5", varContext));
        }
Exemplo n.º 15
0
        public void Eval()
        {
            var lambdaParser = new LambdaParser();

            var varContext = new Dictionary <string, object>();

            varContext["pi"]      = 3.14M;
            varContext["one"]     = 1M;
            varContext["two"]     = 2M;
            varContext["test"]    = "test";
            varContext["now"]     = DateTime.Now;
            varContext["testObj"] = new TestClass();
            varContext["arr1"]    = new double[] { 1.5, 2.5 };

            Assert.AreEqual(3, lambdaParser.Eval("1+2", varContext));
            Assert.AreEqual(6, lambdaParser.Eval("1+2+3", varContext));
            Assert.AreEqual("b{0}_", lambdaParser.Eval("\"b{0}_\"", varContext));

            Assert.AreEqual(3, lambdaParser.Eval("(1+(3-1)*4)/3", varContext));

            Assert.AreEqual(1, lambdaParser.Eval("one*5*one-(-1+5*5%10)", varContext));

            Assert.AreEqual("ab", lambdaParser.Eval("\"a\"+\"b\"", varContext));

            Assert.AreEqual(4.14, lambdaParser.Eval("pi + 1", varContext));

            Assert.AreEqual(5.14, lambdaParser.Eval("2 +pi", varContext));

            Assert.AreEqual(2.14, lambdaParser.Eval("pi + -one", varContext));

            Assert.AreEqual("test1", lambdaParser.Eval("test + \"1\"", varContext));

            Assert.AreEqual(1, lambdaParser.Eval("true or false ? 1 : 0", varContext));

            Assert.AreEqual(true, lambdaParser.Eval("5<=3 ? false : true", varContext));

            Assert.AreEqual(5, lambdaParser.Eval("pi>one && 0<one ? (1+8)/3+1*two : 0", varContext));

            Assert.AreEqual(4, lambdaParser.Eval("pi==true ? one+two+one : 0", varContext));

            Assert.AreEqual(DateTime.Now.Year, lambdaParser.Eval("now.Year", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" (1+testObj.IntProp)==2 ? testObj.FldTrue : false ", varContext));

            Assert.AreEqual("ab2_3", lambdaParser.Eval(" \"a\"+testObj.Format(\"b{0}_{1}\", 2, \"3\".ToString() ).ToString() ", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" testObj.Hash[\"a\"] == \"1\"", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" (testObj.Hash[\"a\"]-1)==testObj.Hash[\"b\"].Length ", varContext));

            Assert.AreEqual(4.0, lambdaParser.Eval(" arr1[0]+arr1[1] ", varContext));

            Assert.AreEqual(2, lambdaParser.Eval(" (new[]{1,2})[1] ", varContext));

            Assert.AreEqual(true, lambdaParser.Eval(" new[]{ one } == new[] { 1 } ", varContext));

            Assert.AreEqual(3, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }.Count ", varContext));

            Assert.AreEqual(2, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }[\"b\"] ", varContext));

            var arr = ((Array)lambdaParser.Eval(" new []{ new dictionary{{\"test\",2}}, new[] { one } }", varContext));

            Assert.AreEqual(2, ((IDictionary)arr.GetValue(0))["test"]);
            Assert.AreEqual(1, ((Array)arr.GetValue(1)).GetValue(0));

            Assert.AreEqual("str", lambdaParser.Eval(" testObj.GetDelegNoParam()() ", varContext));
            Assert.AreEqual("zzz", lambdaParser.Eval(" testObj.GetDelegOneParam()(\"zzz\") ", varContext));

            Assert.AreEqual(false, lambdaParser.Eval("(testObj.FldTrue and false) || (testObj.FldTrue && false)", varContext));
            Assert.AreEqual(true, lambdaParser.Eval("false or testObj.FldTrue", varContext));
            Assert.AreEqual("True", lambdaParser.Eval("testObj.BoolParam(true)", varContext));
        }
Exemplo n.º 16
0
        public static List <object> QDapperData([FromQuery] Dictionary <string, string> param = null)
        {
            string sql       = "";
            var    mappingId = param["mappingId"];
            var    key       = param["key"];

            param.Remove("mappingId");
            param.Remove("key");
            XmlDocument doc = new XmlDocument();
            XmlNode     xn;
            var         hasParameter = true;

            try
            {
                doc.Load(string.Format(@"./Config/Sql/{0}.xml", mappingId));
                xn = doc.SelectSingleNode("mappings");
            }
            catch (Exception e)
            {
                return(new List <object> {
                    e
                });
            }

            XmlNodeList xns = xn.ChildNodes;

            foreach (XmlNode x in xns)
            {
                XmlElement element = (XmlElement)x;

                if (element.GetAttribute("name") == key)
                {
                    XmlNodeList sql_if = element.SelectSingleNode("sql").SelectNodes("if");
                    foreach (XmlNode y in sql_if)
                    {
                        var matches = _regex.Matches(y.Attributes["test"].Value);
                        foreach (Match item in matches)
                        {
                            var matchName = item.Value.Trim("@".ToArray());
                            if ((param == null || (!param.ContainsKey(matchName))))
                            {
                                y.ParentNode?.RemoveChild(y);
                                hasParameter = false;
                                break;
                            }
                            if (!_variables.ContainsKey(matchName))
                            {
                                _variables.TryAdd(matchName, param[matchName]);
                            }

                            if (hasParameter)
                            {
                                var success = (bool)_lambdaParser.Eval(y.Attributes["test"].Value.Replace("@", ""), _variables);
                                if (!success)
                                {
                                    y.ParentNode?.RemoveChild(y);
                                }
                            }
                        }
                    }
                    sql = x.SelectSingleNode("sql").InnerText;
                }
            }
            var dbArgs = new DynamicParameters();

            foreach (var pair in param)
            {
                dbArgs.Add(pair.Key, pair.Value);
            }

            List <object> gs = DbContext.Query <object>(sql, dbArgs).ToList();

            return(gs);
        }
Exemplo n.º 17
0
        public void Eval()
        {
            var lambdaParser = new LambdaParser();

            var varContext = getContext();

            Assert.Equal("st", lambdaParser.Eval("test.Substring(2)", varContext));

            Assert.Equal(true, lambdaParser.Eval("NOT(NOT(1==1))", varContext));

            Assert.Equal(3M, lambdaParser.Eval("1+2", varContext));
            Assert.Equal(6M, lambdaParser.Eval("1+2+3", varContext));
            Assert.Equal("b{0}_", lambdaParser.Eval("\"b{0}_\"", varContext));

            Assert.Equal(3M, lambdaParser.Eval("(1+(3-1)*4)/3", varContext));

            Assert.Equal(1M, lambdaParser.Eval("one*5*one-(-1+5*5%10)", varContext));

            Assert.Equal("ab", lambdaParser.Eval("\"a\"+\"b\"", varContext));

            Assert.Equal(4.14M, lambdaParser.Eval("pi + 1", varContext));

            Assert.Equal(5.14M, lambdaParser.Eval("2 +pi", varContext));

            Assert.Equal(2.14M, lambdaParser.Eval("pi + -one", varContext));

            Assert.Equal("test1", lambdaParser.Eval("test + \"1\"", varContext));

            Assert.Equal("a_b_a_b", lambdaParser.Eval(" name_with_underscore + _name_with_underscore ", varContext));

            Assert.Equal(1M, lambdaParser.Eval("true or false ? 1 : 0", varContext));

            Assert.Equal(true, lambdaParser.Eval("5<=3 ? false : true", varContext));

            Assert.Equal(5M, lambdaParser.Eval("pi>one && 0<one ? (1+8)/3+1*two : 0", varContext));

            Assert.Equal(4M, lambdaParser.Eval("pi>0 ? one+two+one : 0", varContext));

            Assert.Equal(DateTime.Now.Year, lambdaParser.Eval("now.Year", varContext));

            Assert.Equal(true, lambdaParser.Eval(" (1+testObj.IntProp)==2 ? testObj.FldTrue : false ", varContext));

            Assert.Equal("ab2_3", lambdaParser.Eval(" \"a\"+testObj.Format(\"b{0}_{1}\", 2, \"3\".ToString() ).ToString() ", varContext));

            Assert.Equal(true, lambdaParser.Eval(" testObj.Hash[\"a\"] == \"1\"", varContext));

            Assert.Equal(true, lambdaParser.Eval(" (testObj.Hash[\"a\"]-1)==testObj.Hash[\"b\"].Length ", varContext));

            Assert.Equal(4.0M, lambdaParser.Eval(" arr1[0]+arr1[1] ", varContext));

            Assert.Equal(2M, lambdaParser.Eval(" (new[]{1,2})[1] ", varContext));

            Assert.Equal(true, lambdaParser.Eval(" new[]{ one } == new[] { 1 } ", varContext));

            Assert.Equal(3, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }.Count ", varContext));

            Assert.Equal(2M, lambdaParser.Eval(" new dictionary{ {\"a\", 1}, {\"b\", 2}, {\"c\", 3} }[\"b\"] ", varContext));

            var arr = ((Array)lambdaParser.Eval(" new []{ new dictionary{{\"test\",2}}, new[] { one } }", varContext));

            Assert.Equal(2M, ((IDictionary)arr.GetValue(0))["test"]);
            Assert.Equal(1M, ((Array)arr.GetValue(1)).GetValue(0));

            Assert.Equal("str", lambdaParser.Eval(" testObj.GetDelegNoParam()() ", varContext));
            Assert.Equal("zzz", lambdaParser.Eval(" testObj.GetDelegOneParam()(\"zzz\") ", varContext));

            Assert.Equal(false, lambdaParser.Eval("(testObj.FldTrue and false) || (testObj.FldTrue && false)", varContext));
            Assert.Equal(true, lambdaParser.Eval("false or testObj.FldTrue", varContext));
            Assert.Equal("True", lambdaParser.Eval("testObj.BoolParam(true)", varContext));
            Assert.Equal("True", lambdaParser.Eval("getTestObj().BoolParam(true)", varContext));
            Assert.Equal("NReco.Linq.Tests.LambdaParserTests+TestClass", lambdaParser.Eval("toString(testObj)", varContext));

            Assert.True((bool)lambdaParser.Eval("true && NOT( false )", varContext));
            Assert.True((bool)lambdaParser.Eval("true && !( false )", varContext));
            Assert.False((bool)lambdaParser.Eval("!Yes", varContext));

            Assert.True((bool)lambdaParser.Eval("5>two && (5>7 || test.Contains(\"t\") )", varContext));
            Assert.True((bool)lambdaParser.Eval("null!=test && test!=null && test.Contains(\"t\") && true == Yes && false==!Yes && false!=Yes", varContext));

            Assert.Equal(new DateTime().AddDays(2), lambdaParser.Eval("day1 + oneDay", varContext));
            Assert.Equal(new DateTime().AddDays(2), lambdaParser.Eval("oneDay + day1", varContext));
            Assert.Equal(new DateTime().AddDays(1), lambdaParser.Eval("day2 - oneDay", varContext));
            Assert.Equal(new DateTime().AddDays(1), lambdaParser.Eval("day2 + -oneDay", varContext));
            Assert.Equal(new DateTime().AddDays(1), lambdaParser.Eval("-oneDay + day2", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0), lambdaParser.Eval("day2 - day1", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0).Negate(), lambdaParser.Eval("day1 - day2", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0), lambdaParser.Eval("day2 - day1", varContext));
            Assert.Equal(new TimeSpan(2, 0, 0, 0), lambdaParser.Eval("oneDay + oneDay", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0), lambdaParser.Eval("twoDays - oneDay", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0), lambdaParser.Eval("twoDays + -oneDay", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0).Negate(), lambdaParser.Eval("oneDay - twoDays", varContext));
            Assert.Equal(new TimeSpan(1, 0, 0, 0).Negate(), lambdaParser.Eval("-twoDays + oneDay", varContext));
        }