public void Send_WithCustomEvaluator_SendsAllMessages() { // Arrange var evaluator = new MyEvaluator(); var appender = new MyBufferedAppender(evaluator) { SendAsync = true }; appender.ActivateOptions(); ConfigureAppender(appender); var logger = LogManager.GetLogger(this.GetType()); // Act logger.InfoFormat("Message 1"); logger.InfoFormat("Message 2"); logger.InfoFormat("Message 3"); StopApplication(); // Assert Assert.That(MessageSink.Logs.Count, Is.EqualTo(3), "All remaining messages should be sent at the end"); }
public void TestMethod1() { MyEvaluator myEvaluator = new MyEvaluator(typeof(int), "1+1", "plus"); var result = myEvaluator.EvaluateInt("plus"); var intType = typeof(Int32); }
public void NormalTest1() { var evaluator = new MyEvaluator(); Assert.Equal(20, evaluator.Eval("(8 - 5 % 7) + 3 ** 2 + 8")); Assert.Equal(-5, evaluator.Eval("-9 // 2")); Assert.Throws <ArgumentException>(() => evaluator.Eval("(8 mod 5 % 7) + 3 ** 2 + 8")); }
static void Main(string[] args) { // I would like to make the evaluators definition as simple as possible // to allow extensibility // to avoid BNF rules syntax as there are already many tools to do that var ev = new MyEvaluator(); var val = ev.Eval<int>("1+2*3"); }
static void Main(string[] args) { // I would like to make the evaluators definition as simple as possible // to allow extensibility // to avoid BNF rules syntax as there are already many tools to do that var ev = new MyEvaluator(); var val = ev.Eval <int>("1+2*3"); }
private bool ExecuteExpression() { if (String.IsNullOrEmpty(ifCondition.Expression)) { throw new ArgumentNullException(nameof(ifCondition.Expression)); } // 分析表达式 // 分析逻辑表达式的情况 var expressions = ifCondition.Expression.Split(new string[] { ">", "<", "==", ">=", "<=", "!=" }, StringSplitOptions.RemoveEmptyEntries); string newExpression = ifCondition.Expression; if (expressions.Length == 2) { var expre_left = expressions[0]; var key_value = expre_left.Split('.'); if (key_value.Length == 2) { Variable variable = null; switch (key_value[0]) { case "Locals": variable = Locals[key_value[1]]; break; case "Parameters": variable = Parameters[key_value[1]]; break; default: break; } if (variable == null) { throw new ArgumentNullException(expre_left); } switch (variable.VariableType.Name) { case nameof(Int32): newExpression = newExpression.Replace(expre_left, variable.GetValue <Int32>().ToString()); break; case nameof(String): newExpression = newExpression.Replace(expre_left, "\"" + variable.GetValueString() + "\""); break; case nameof(Boolean): newExpression = newExpression.Replace(expre_left, variable.GetValue <Boolean>().ToString()); break; default: break; } } } return(MyEvaluator.EvaluateToBool(newExpression)); }
public override void Run() { statementExpression = stepSetting as StatementExpression; if (String.IsNullOrEmpty(statementExpression.Expression)) { throw new ArgumentNullException(nameof(statementExpression.Expression)); } // 分析表达式 // 分析逻辑表达式的情况 var expressions = statementExpression.Expression.Split(new string[] { "=" }, StringSplitOptions.RemoveEmptyEntries); string newExpression = statementExpression.Expression; if (expressions.Length == 2) { var expre_left = expressions[0]; var expre_right = expressions[1]; var key_value = expre_left.Split('.'); if (key_value.Length == 2) { Variable variable = null; switch (key_value[0]) { case "Locals": variable = Locals[key_value[1]]; break; case "Parameters": variable = Parameters[key_value[1]]; break; default: break; } if (variable == null) { throw new ArgumentNullException(expre_left); } MyEvaluator myEvaluator = new MyEvaluator(new EvaluatorItem(variable.VariableType, expre_right, "_")); variable.Value = myEvaluator.Evaluate("_"); } } }