public void PartialEvalMemberInit() { Expression <Func <int, Test> > expr = x => new Test { List = new List <int>(x), Next = { Next = { List = { 1, 2, 3, x } }, List = { 1, 2, 3 } } }; var evaled = (LambdaExpression)ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.MemberInit, evaled.Body.NodeType); expr = x => new Test { List = new List <int>(3), Next = { Next = { List = { 1, 2, 3 } }, List = { 1, 2, 3 } } }; evaled = (LambdaExpression)ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Constant, evaled.Body.NodeType); }
public void PartialEvalListInit() { Expression <Func <int, List <int> > > expr = x => new List <int> { x, x, x, 2 }; Assert.Equal(ExpressionType.ListInit, expr.Body.NodeType); var evaled = (LambdaExpression)ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.ListInit, evaled.Body.NodeType); expr = x => new List <int> { 1, 2, 3, 4 }; Assert.Equal(ExpressionType.ListInit, expr.Body.NodeType); evaled = (LambdaExpression)ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Constant, evaled.Body.NodeType); expr = x => new List <int> { FuncEval(1), x }; Assert.Equal(ExpressionType.ListInit, expr.Body.NodeType); var listInit = (ListInitExpression)expr.Body; Assert.Equal(ExpressionType.Call, listInit.Initializers[0].Arguments[0].NodeType); evaled = (LambdaExpression)ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.ListInit, evaled.Body.NodeType); listInit = (ListInitExpression)evaled.Body; Assert.Equal(ExpressionType.Constant, listInit.Initializers[0].Arguments[0].NodeType); }
public void PartialEvalDontEvalsWhatThrows() { Expression <Func <int> > test = () => 2 + FuncDontEval(1); var expr = test.Body; Assert.Equal(ExpressionType.Add, expr.NodeType); var evaled = ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Add, evaled.NodeType); }
public void PartialEvalEvalsAll() { Expression <Func <int> > test = () => 2 + FuncEval(1); var expr = test.Body; Assert.Equal(ExpressionType.Add, expr.NodeType); var evaled = ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Constant, evaled.NodeType); }
public void PartialEvalEvalsVoid() { var c = new ClassWithVoid(); Expression <Action> test = () => c.SetValue(12); var expr = test.Body; Assert.Equal(ExpressionType.Call, expr.NodeType); var evaled = ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Default, evaled.NodeType); Assert.Equal(12, c.Value); }
public void PartialDontEvalsVoidThatThrows() { var c = new ClassWithVoid(); Expression <Action> test = () => c.InvokeWith42(10); var expr = test.Body; Assert.Equal(ExpressionType.Call, expr.NodeType); var evaled = ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Call, evaled.NodeType); test = () => c.InvokeWith42(42); expr = test.Body; Assert.Equal(ExpressionType.Call, expr.NodeType); evaled = ExpressionEx.PartialEval(expr); Assert.Equal(ExpressionType.Default, evaled.NodeType); Assert.Equal(42, c.Value); }