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); }
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); }
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)); }
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); } }
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); } }
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); }
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); }
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)); }
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)); }
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); }
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)); }