public void ExecutesLambdaFunction() { Dictionary <string, object> vars = new Dictionary <string, object>(); Expression.RegisterFunction("ident", "{|n| $n}", vars); FunctionNode fn = new FunctionNode(); fn.Text = "ident"; StringLiteralNode str = new StringLiteralNode(); str.Text = "theValue"; fn.addChild(str); IExpression exp = fn; Assert.AreEqual(str.Text, exp.GetValue(null, vars)); }
public void ExecutesDelegate() { Dictionary <string, object> vars = new Dictionary <string, object>(); vars["concat"] = new TestCallback(Concat); FunctionNode fn = new FunctionNode(); fn.Text = "concat"; StringLiteralNode str = new StringLiteralNode(); str.Text = "theValue"; fn.addChild(str); StringLiteralNode str2 = new StringLiteralNode(); str2.Text = "theValue"; fn.addChild(str2); IExpression exp = fn; Assert.AreEqual(string.Format("{0},{1},{2}", this.GetHashCode(), str.Text, str2.Text), exp.GetValue(null, vars)); }
public void ExecutesDelegatePerformance() { Dictionary <string, object> vars = new Dictionary <string, object>(5); WaitCallback noop = delegate(object arg) { // noop }; vars["noop"] = noop; FunctionNode fn = new FunctionNode(); fn.Text = "noop"; StringLiteralNode str = new StringLiteralNode(); str.Text = "theArg"; fn.addChild(str); int ITERATIONS = 10000000; StopWatch watch = new StopWatch(); using (watch.Start("Duration Direct: {0}")) { for (int i = 0; i < ITERATIONS; i++) { ((WaitCallback)vars["noop"])(str.getText()); } } using (watch.Start("Duration SpEL: {0}")) { for (int i = 0; i < ITERATIONS; i++) { fn.GetValue(null, vars); } } }