public void DynamicAwait_Visitor() { var res = DynamicCSharpExpression.DynamicAwait(Expression.Default(typeof(Task <int>))); var v = new V(); Assert.AreSame(res, v.Visit(res)); Assert.IsTrue(v.Visited); }
public void DynamicAwait_Compile() { var e = Expression.Constant(Task.FromResult(42)); var expr = DynamicCSharpExpression.DynamicAwait(e); var f = CSharpExpression.AsyncLambda <Func <Task <object> > >(expr); Assert.AreEqual(42, f.Compile()().Result); }
public void DynamicAwait_Properties_Void() { var e = Expression.Default(typeof(Task)); var expr = DynamicCSharpExpression.DynamicAwait(e, true); Assert.AreEqual(CSharpExpressionType.Await, expr.CSharpNodeType); Assert.AreSame(e, expr.Operand); Assert.AreEqual(typeof(void), expr.Type); Assert.IsNull(expr.GetAwaiterMethod); }
public void DynamicAwait_CantReduce() { var e = Expression.Default(typeof(Task <int>)); var expr = DynamicCSharpExpression.DynamicAwait(e); Assert.IsFalse(expr.CanReduce); Assert.AreSame(expr, expr.Reduce()); var f = Expression.Lambda <Func <object> >(expr); AssertEx.Throws <ArgumentException>(() => f.Compile()); }
public void DynamicAwait_Update() { var e = Expression.Default(typeof(Task <int>)); var expr = DynamicCSharpExpression.DynamicAwait(e); Assert.AreSame(expr, expr.Update(e)); var f = Expression.Default(typeof(Task <int>)); var upd = expr.Update(f); Assert.AreNotSame(upd, expr); Assert.AreSame(f, upd.Operand); }
public void DynamicAwait_Properties_Void() { var e = Expression.Default(typeof(Task)); var expr = DynamicCSharpExpression.DynamicAwait(e, true); Assert.AreEqual(CSharpExpressionType.Await, expr.CSharpNodeType); Assert.AreSame(e, expr.Operand); Assert.AreEqual(typeof(void), expr.Type); Assert.IsTrue(expr.Info.IsDynamic); if (expr.Info is DynamicAwaitInfo d) { Assert.IsNull(d.Context); Assert.IsTrue(d.ResultDiscarded); } else { Assert.Fail(); } }
public void DynamicAwait_Factory_ArgumentChecking() { AssertEx.Throws <ArgumentNullException>(() => DynamicCSharpExpression.DynamicAwait(default(Expression))); AssertEx.Throws <ArgumentNullException>(() => DynamicCSharpExpression.DynamicAwait(default(Expression), false)); AssertEx.Throws <ArgumentNullException>(() => DynamicCSharpExpression.DynamicAwait(default(Expression), false, typeof(DynamicAwaitTests))); }
public void Dynamic_UnaryAssign_GeneratedFactories() { var oe = Expression.Parameter(typeof(object)); var od = DynamicCSharpExpression.DynamicArgument(oe); var ue0 = DynamicCSharpExpression.DynamicPreIncrementAssign(oe); Assert.AreEqual(CSharpExpressionType.PreIncrementAssign, ue0.OperationNodeType); Assert.AreSame(oe, ue0.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue0.Flags); var ud0 = DynamicCSharpExpression.DynamicPreIncrementAssign(od); Assert.AreEqual(CSharpExpressionType.PreIncrementAssign, ud0.OperationNodeType); Assert.AreSame(od, ud0.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud0.Flags); var uf0 = DynamicCSharpExpression.DynamicPreIncrementAssign(od, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.PreIncrementAssign, uf0.OperationNodeType); Assert.AreSame(od, uf0.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf0.Flags); var uc0 = DynamicCSharpExpression.DynamicPreIncrementAssign(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.PreIncrementAssign, uc0.OperationNodeType); Assert.AreSame(od, uc0.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc0.Flags); Assert.AreEqual(typeof(int), uc0.Context); var ue1 = DynamicCSharpExpression.DynamicPreDecrementAssign(oe); Assert.AreEqual(CSharpExpressionType.PreDecrementAssign, ue1.OperationNodeType); Assert.AreSame(oe, ue1.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue1.Flags); var ud1 = DynamicCSharpExpression.DynamicPreDecrementAssign(od); Assert.AreEqual(CSharpExpressionType.PreDecrementAssign, ud1.OperationNodeType); Assert.AreSame(od, ud1.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud1.Flags); var uf1 = DynamicCSharpExpression.DynamicPreDecrementAssign(od, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.PreDecrementAssign, uf1.OperationNodeType); Assert.AreSame(od, uf1.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf1.Flags); var uc1 = DynamicCSharpExpression.DynamicPreDecrementAssign(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.PreDecrementAssign, uc1.OperationNodeType); Assert.AreSame(od, uc1.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc1.Flags); Assert.AreEqual(typeof(int), uc1.Context); var ue2 = DynamicCSharpExpression.DynamicPostIncrementAssign(oe); Assert.AreEqual(CSharpExpressionType.PostIncrementAssign, ue2.OperationNodeType); Assert.AreSame(oe, ue2.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue2.Flags); var ud2 = DynamicCSharpExpression.DynamicPostIncrementAssign(od); Assert.AreEqual(CSharpExpressionType.PostIncrementAssign, ud2.OperationNodeType); Assert.AreSame(od, ud2.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud2.Flags); var uf2 = DynamicCSharpExpression.DynamicPostIncrementAssign(od, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.PostIncrementAssign, uf2.OperationNodeType); Assert.AreSame(od, uf2.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf2.Flags); var uc2 = DynamicCSharpExpression.DynamicPostIncrementAssign(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.PostIncrementAssign, uc2.OperationNodeType); Assert.AreSame(od, uc2.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc2.Flags); Assert.AreEqual(typeof(int), uc2.Context); var ue3 = DynamicCSharpExpression.DynamicPostDecrementAssign(oe); Assert.AreEqual(CSharpExpressionType.PostDecrementAssign, ue3.OperationNodeType); Assert.AreSame(oe, ue3.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue3.Flags); var ud3 = DynamicCSharpExpression.DynamicPostDecrementAssign(od); Assert.AreEqual(CSharpExpressionType.PostDecrementAssign, ud3.OperationNodeType); Assert.AreSame(od, ud3.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud3.Flags); var uf3 = DynamicCSharpExpression.DynamicPostDecrementAssign(od, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.PostDecrementAssign, uf3.OperationNodeType); Assert.AreSame(od, uf3.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf3.Flags); var uc3 = DynamicCSharpExpression.DynamicPostDecrementAssign(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.PostDecrementAssign, uc3.OperationNodeType); Assert.AreSame(od, uc3.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc3.Flags); Assert.AreEqual(typeof(int), uc3.Context); var ue4 = DynamicCSharpExpression.DynamicPreIncrementAssignChecked(oe); Assert.AreEqual(CSharpExpressionType.PreIncrementAssignChecked, ue4.OperationNodeType); Assert.AreSame(oe, ue4.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ue4.Flags); var ud4 = DynamicCSharpExpression.DynamicPreIncrementAssignChecked(od); Assert.AreEqual(CSharpExpressionType.PreIncrementAssignChecked, ud4.OperationNodeType); Assert.AreSame(od, ud4.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ud4.Flags); var uf4 = DynamicCSharpExpression.DynamicPreIncrementAssignChecked(od, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.PreIncrementAssignChecked, uf4.OperationNodeType); Assert.AreSame(od, uf4.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uf4.Flags); var uc4 = DynamicCSharpExpression.DynamicPreIncrementAssignChecked(od, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.PreIncrementAssignChecked, uc4.OperationNodeType); Assert.AreSame(od, uc4.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uc4.Flags); Assert.AreEqual(typeof(int), uc4.Context); var ue5 = DynamicCSharpExpression.DynamicPreDecrementAssignChecked(oe); Assert.AreEqual(CSharpExpressionType.PreDecrementAssignChecked, ue5.OperationNodeType); Assert.AreSame(oe, ue5.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ue5.Flags); var ud5 = DynamicCSharpExpression.DynamicPreDecrementAssignChecked(od); Assert.AreEqual(CSharpExpressionType.PreDecrementAssignChecked, ud5.OperationNodeType); Assert.AreSame(od, ud5.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ud5.Flags); var uf5 = DynamicCSharpExpression.DynamicPreDecrementAssignChecked(od, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.PreDecrementAssignChecked, uf5.OperationNodeType); Assert.AreSame(od, uf5.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uf5.Flags); var uc5 = DynamicCSharpExpression.DynamicPreDecrementAssignChecked(od, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.PreDecrementAssignChecked, uc5.OperationNodeType); Assert.AreSame(od, uc5.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uc5.Flags); Assert.AreEqual(typeof(int), uc5.Context); var ue6 = DynamicCSharpExpression.DynamicPostIncrementAssignChecked(oe); Assert.AreEqual(CSharpExpressionType.PostIncrementAssignChecked, ue6.OperationNodeType); Assert.AreSame(oe, ue6.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ue6.Flags); var ud6 = DynamicCSharpExpression.DynamicPostIncrementAssignChecked(od); Assert.AreEqual(CSharpExpressionType.PostIncrementAssignChecked, ud6.OperationNodeType); Assert.AreSame(od, ud6.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ud6.Flags); var uf6 = DynamicCSharpExpression.DynamicPostIncrementAssignChecked(od, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.PostIncrementAssignChecked, uf6.OperationNodeType); Assert.AreSame(od, uf6.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uf6.Flags); var uc6 = DynamicCSharpExpression.DynamicPostIncrementAssignChecked(od, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.PostIncrementAssignChecked, uc6.OperationNodeType); Assert.AreSame(od, uc6.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uc6.Flags); Assert.AreEqual(typeof(int), uc6.Context); var ue7 = DynamicCSharpExpression.DynamicPostDecrementAssignChecked(oe); Assert.AreEqual(CSharpExpressionType.PostDecrementAssignChecked, ue7.OperationNodeType); Assert.AreSame(oe, ue7.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ue7.Flags); var ud7 = DynamicCSharpExpression.DynamicPostDecrementAssignChecked(od); Assert.AreEqual(CSharpExpressionType.PostDecrementAssignChecked, ud7.OperationNodeType); Assert.AreSame(od, ud7.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ud7.Flags); var uf7 = DynamicCSharpExpression.DynamicPostDecrementAssignChecked(od, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.PostDecrementAssignChecked, uf7.OperationNodeType); Assert.AreSame(od, uf7.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uf7.Flags); var uc7 = DynamicCSharpExpression.DynamicPostDecrementAssignChecked(od, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.PostDecrementAssignChecked, uc7.OperationNodeType); Assert.AreSame(od, uc7.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uc7.Flags); Assert.AreEqual(typeof(int), uc7.Context); }
public void Dynamic_BinaryAssign_GeneratedFactories() { var le = Expression.Parameter(typeof(object)); var re = Expression.Constant(2); var ld = DynamicCSharpExpression.DynamicArgument(le); var rd = DynamicCSharpExpression.DynamicArgument(re); var be0 = DynamicCSharpExpression.DynamicAssign(le, re); Assert.AreEqual(CSharpExpressionType.Assign, be0.OperationNodeType); Assert.AreSame(le, be0.Left.Expression); Assert.AreSame(re, be0.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be0.Flags); var bd0 = DynamicCSharpExpression.DynamicAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.Assign, bd0.OperationNodeType); Assert.AreSame(ld, bd0.Left); Assert.AreSame(rd, bd0.Right); Assert.AreEqual(CSharpBinderFlags.None, bd0.Flags); var bf0 = DynamicCSharpExpression.DynamicAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.Assign, bf0.OperationNodeType); Assert.AreSame(ld, bf0.Left); Assert.AreSame(rd, bf0.Right); Assert.AreEqual(CSharpBinderFlags.None, bf0.Flags); var bc0 = DynamicCSharpExpression.DynamicAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.Assign, bc0.OperationNodeType); Assert.AreSame(ld, bc0.Left); Assert.AreSame(rd, bc0.Right); Assert.AreEqual(CSharpBinderFlags.None, bc0.Flags); Assert.AreEqual(typeof(int), bc0.Context); var be1 = DynamicCSharpExpression.DynamicAddAssign(le, re); Assert.AreEqual(CSharpExpressionType.AddAssign, be1.OperationNodeType); Assert.AreSame(le, be1.Left.Expression); Assert.AreSame(re, be1.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be1.Flags); var bd1 = DynamicCSharpExpression.DynamicAddAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.AddAssign, bd1.OperationNodeType); Assert.AreSame(ld, bd1.Left); Assert.AreSame(rd, bd1.Right); Assert.AreEqual(CSharpBinderFlags.None, bd1.Flags); var bf1 = DynamicCSharpExpression.DynamicAddAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.AddAssign, bf1.OperationNodeType); Assert.AreSame(ld, bf1.Left); Assert.AreSame(rd, bf1.Right); Assert.AreEqual(CSharpBinderFlags.None, bf1.Flags); var bc1 = DynamicCSharpExpression.DynamicAddAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.AddAssign, bc1.OperationNodeType); Assert.AreSame(ld, bc1.Left); Assert.AreSame(rd, bc1.Right); Assert.AreEqual(CSharpBinderFlags.None, bc1.Flags); Assert.AreEqual(typeof(int), bc1.Context); var be2 = DynamicCSharpExpression.DynamicAndAssign(le, re); Assert.AreEqual(CSharpExpressionType.AndAssign, be2.OperationNodeType); Assert.AreSame(le, be2.Left.Expression); Assert.AreSame(re, be2.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be2.Flags); var bd2 = DynamicCSharpExpression.DynamicAndAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.AndAssign, bd2.OperationNodeType); Assert.AreSame(ld, bd2.Left); Assert.AreSame(rd, bd2.Right); Assert.AreEqual(CSharpBinderFlags.None, bd2.Flags); var bf2 = DynamicCSharpExpression.DynamicAndAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.AndAssign, bf2.OperationNodeType); Assert.AreSame(ld, bf2.Left); Assert.AreSame(rd, bf2.Right); Assert.AreEqual(CSharpBinderFlags.None, bf2.Flags); var bc2 = DynamicCSharpExpression.DynamicAndAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.AndAssign, bc2.OperationNodeType); Assert.AreSame(ld, bc2.Left); Assert.AreSame(rd, bc2.Right); Assert.AreEqual(CSharpBinderFlags.None, bc2.Flags); Assert.AreEqual(typeof(int), bc2.Context); var be3 = DynamicCSharpExpression.DynamicDivideAssign(le, re); Assert.AreEqual(CSharpExpressionType.DivideAssign, be3.OperationNodeType); Assert.AreSame(le, be3.Left.Expression); Assert.AreSame(re, be3.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be3.Flags); var bd3 = DynamicCSharpExpression.DynamicDivideAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.DivideAssign, bd3.OperationNodeType); Assert.AreSame(ld, bd3.Left); Assert.AreSame(rd, bd3.Right); Assert.AreEqual(CSharpBinderFlags.None, bd3.Flags); var bf3 = DynamicCSharpExpression.DynamicDivideAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.DivideAssign, bf3.OperationNodeType); Assert.AreSame(ld, bf3.Left); Assert.AreSame(rd, bf3.Right); Assert.AreEqual(CSharpBinderFlags.None, bf3.Flags); var bc3 = DynamicCSharpExpression.DynamicDivideAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.DivideAssign, bc3.OperationNodeType); Assert.AreSame(ld, bc3.Left); Assert.AreSame(rd, bc3.Right); Assert.AreEqual(CSharpBinderFlags.None, bc3.Flags); Assert.AreEqual(typeof(int), bc3.Context); var be4 = DynamicCSharpExpression.DynamicExclusiveOrAssign(le, re); Assert.AreEqual(CSharpExpressionType.ExclusiveOrAssign, be4.OperationNodeType); Assert.AreSame(le, be4.Left.Expression); Assert.AreSame(re, be4.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be4.Flags); var bd4 = DynamicCSharpExpression.DynamicExclusiveOrAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.ExclusiveOrAssign, bd4.OperationNodeType); Assert.AreSame(ld, bd4.Left); Assert.AreSame(rd, bd4.Right); Assert.AreEqual(CSharpBinderFlags.None, bd4.Flags); var bf4 = DynamicCSharpExpression.DynamicExclusiveOrAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.ExclusiveOrAssign, bf4.OperationNodeType); Assert.AreSame(ld, bf4.Left); Assert.AreSame(rd, bf4.Right); Assert.AreEqual(CSharpBinderFlags.None, bf4.Flags); var bc4 = DynamicCSharpExpression.DynamicExclusiveOrAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.ExclusiveOrAssign, bc4.OperationNodeType); Assert.AreSame(ld, bc4.Left); Assert.AreSame(rd, bc4.Right); Assert.AreEqual(CSharpBinderFlags.None, bc4.Flags); Assert.AreEqual(typeof(int), bc4.Context); var be5 = DynamicCSharpExpression.DynamicLeftShiftAssign(le, re); Assert.AreEqual(CSharpExpressionType.LeftShiftAssign, be5.OperationNodeType); Assert.AreSame(le, be5.Left.Expression); Assert.AreSame(re, be5.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be5.Flags); var bd5 = DynamicCSharpExpression.DynamicLeftShiftAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.LeftShiftAssign, bd5.OperationNodeType); Assert.AreSame(ld, bd5.Left); Assert.AreSame(rd, bd5.Right); Assert.AreEqual(CSharpBinderFlags.None, bd5.Flags); var bf5 = DynamicCSharpExpression.DynamicLeftShiftAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.LeftShiftAssign, bf5.OperationNodeType); Assert.AreSame(ld, bf5.Left); Assert.AreSame(rd, bf5.Right); Assert.AreEqual(CSharpBinderFlags.None, bf5.Flags); var bc5 = DynamicCSharpExpression.DynamicLeftShiftAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.LeftShiftAssign, bc5.OperationNodeType); Assert.AreSame(ld, bc5.Left); Assert.AreSame(rd, bc5.Right); Assert.AreEqual(CSharpBinderFlags.None, bc5.Flags); Assert.AreEqual(typeof(int), bc5.Context); var be6 = DynamicCSharpExpression.DynamicModuloAssign(le, re); Assert.AreEqual(CSharpExpressionType.ModuloAssign, be6.OperationNodeType); Assert.AreSame(le, be6.Left.Expression); Assert.AreSame(re, be6.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be6.Flags); var bd6 = DynamicCSharpExpression.DynamicModuloAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.ModuloAssign, bd6.OperationNodeType); Assert.AreSame(ld, bd6.Left); Assert.AreSame(rd, bd6.Right); Assert.AreEqual(CSharpBinderFlags.None, bd6.Flags); var bf6 = DynamicCSharpExpression.DynamicModuloAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.ModuloAssign, bf6.OperationNodeType); Assert.AreSame(ld, bf6.Left); Assert.AreSame(rd, bf6.Right); Assert.AreEqual(CSharpBinderFlags.None, bf6.Flags); var bc6 = DynamicCSharpExpression.DynamicModuloAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.ModuloAssign, bc6.OperationNodeType); Assert.AreSame(ld, bc6.Left); Assert.AreSame(rd, bc6.Right); Assert.AreEqual(CSharpBinderFlags.None, bc6.Flags); Assert.AreEqual(typeof(int), bc6.Context); var be7 = DynamicCSharpExpression.DynamicMultiplyAssign(le, re); Assert.AreEqual(CSharpExpressionType.MultiplyAssign, be7.OperationNodeType); Assert.AreSame(le, be7.Left.Expression); Assert.AreSame(re, be7.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be7.Flags); var bd7 = DynamicCSharpExpression.DynamicMultiplyAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.MultiplyAssign, bd7.OperationNodeType); Assert.AreSame(ld, bd7.Left); Assert.AreSame(rd, bd7.Right); Assert.AreEqual(CSharpBinderFlags.None, bd7.Flags); var bf7 = DynamicCSharpExpression.DynamicMultiplyAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.MultiplyAssign, bf7.OperationNodeType); Assert.AreSame(ld, bf7.Left); Assert.AreSame(rd, bf7.Right); Assert.AreEqual(CSharpBinderFlags.None, bf7.Flags); var bc7 = DynamicCSharpExpression.DynamicMultiplyAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.MultiplyAssign, bc7.OperationNodeType); Assert.AreSame(ld, bc7.Left); Assert.AreSame(rd, bc7.Right); Assert.AreEqual(CSharpBinderFlags.None, bc7.Flags); Assert.AreEqual(typeof(int), bc7.Context); var be8 = DynamicCSharpExpression.DynamicOrAssign(le, re); Assert.AreEqual(CSharpExpressionType.OrAssign, be8.OperationNodeType); Assert.AreSame(le, be8.Left.Expression); Assert.AreSame(re, be8.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be8.Flags); var bd8 = DynamicCSharpExpression.DynamicOrAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.OrAssign, bd8.OperationNodeType); Assert.AreSame(ld, bd8.Left); Assert.AreSame(rd, bd8.Right); Assert.AreEqual(CSharpBinderFlags.None, bd8.Flags); var bf8 = DynamicCSharpExpression.DynamicOrAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.OrAssign, bf8.OperationNodeType); Assert.AreSame(ld, bf8.Left); Assert.AreSame(rd, bf8.Right); Assert.AreEqual(CSharpBinderFlags.None, bf8.Flags); var bc8 = DynamicCSharpExpression.DynamicOrAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.OrAssign, bc8.OperationNodeType); Assert.AreSame(ld, bc8.Left); Assert.AreSame(rd, bc8.Right); Assert.AreEqual(CSharpBinderFlags.None, bc8.Flags); Assert.AreEqual(typeof(int), bc8.Context); var be9 = DynamicCSharpExpression.DynamicRightShiftAssign(le, re); Assert.AreEqual(CSharpExpressionType.RightShiftAssign, be9.OperationNodeType); Assert.AreSame(le, be9.Left.Expression); Assert.AreSame(re, be9.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be9.Flags); var bd9 = DynamicCSharpExpression.DynamicRightShiftAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.RightShiftAssign, bd9.OperationNodeType); Assert.AreSame(ld, bd9.Left); Assert.AreSame(rd, bd9.Right); Assert.AreEqual(CSharpBinderFlags.None, bd9.Flags); var bf9 = DynamicCSharpExpression.DynamicRightShiftAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.RightShiftAssign, bf9.OperationNodeType); Assert.AreSame(ld, bf9.Left); Assert.AreSame(rd, bf9.Right); Assert.AreEqual(CSharpBinderFlags.None, bf9.Flags); var bc9 = DynamicCSharpExpression.DynamicRightShiftAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.RightShiftAssign, bc9.OperationNodeType); Assert.AreSame(ld, bc9.Left); Assert.AreSame(rd, bc9.Right); Assert.AreEqual(CSharpBinderFlags.None, bc9.Flags); Assert.AreEqual(typeof(int), bc9.Context); var be10 = DynamicCSharpExpression.DynamicSubtractAssign(le, re); Assert.AreEqual(CSharpExpressionType.SubtractAssign, be10.OperationNodeType); Assert.AreSame(le, be10.Left.Expression); Assert.AreSame(re, be10.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be10.Flags); var bd10 = DynamicCSharpExpression.DynamicSubtractAssign(ld, rd); Assert.AreEqual(CSharpExpressionType.SubtractAssign, bd10.OperationNodeType); Assert.AreSame(ld, bd10.Left); Assert.AreSame(rd, bd10.Right); Assert.AreEqual(CSharpBinderFlags.None, bd10.Flags); var bf10 = DynamicCSharpExpression.DynamicSubtractAssign(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(CSharpExpressionType.SubtractAssign, bf10.OperationNodeType); Assert.AreSame(ld, bf10.Left); Assert.AreSame(rd, bf10.Right); Assert.AreEqual(CSharpBinderFlags.None, bf10.Flags); var bc10 = DynamicCSharpExpression.DynamicSubtractAssign(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(CSharpExpressionType.SubtractAssign, bc10.OperationNodeType); Assert.AreSame(ld, bc10.Left); Assert.AreSame(rd, bc10.Right); Assert.AreEqual(CSharpBinderFlags.None, bc10.Flags); Assert.AreEqual(typeof(int), bc10.Context); var be11 = DynamicCSharpExpression.DynamicAddAssignChecked(le, re); Assert.AreEqual(CSharpExpressionType.AddAssignChecked, be11.OperationNodeType); Assert.AreSame(le, be11.Left.Expression); Assert.AreSame(re, be11.Right.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, be11.Flags); var bd11 = DynamicCSharpExpression.DynamicAddAssignChecked(ld, rd); Assert.AreEqual(CSharpExpressionType.AddAssignChecked, bd11.OperationNodeType); Assert.AreSame(ld, bd11.Left); Assert.AreSame(rd, bd11.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bd11.Flags); var bf11 = DynamicCSharpExpression.DynamicAddAssignChecked(ld, rd, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.AddAssignChecked, bf11.OperationNodeType); Assert.AreSame(ld, bf11.Left); Assert.AreSame(rd, bf11.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bf11.Flags); var bc11 = DynamicCSharpExpression.DynamicAddAssignChecked(ld, rd, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.AddAssignChecked, bc11.OperationNodeType); Assert.AreSame(ld, bc11.Left); Assert.AreSame(rd, bc11.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bc11.Flags); Assert.AreEqual(typeof(int), bc11.Context); var be12 = DynamicCSharpExpression.DynamicMultiplyAssignChecked(le, re); Assert.AreEqual(CSharpExpressionType.MultiplyAssignChecked, be12.OperationNodeType); Assert.AreSame(le, be12.Left.Expression); Assert.AreSame(re, be12.Right.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, be12.Flags); var bd12 = DynamicCSharpExpression.DynamicMultiplyAssignChecked(ld, rd); Assert.AreEqual(CSharpExpressionType.MultiplyAssignChecked, bd12.OperationNodeType); Assert.AreSame(ld, bd12.Left); Assert.AreSame(rd, bd12.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bd12.Flags); var bf12 = DynamicCSharpExpression.DynamicMultiplyAssignChecked(ld, rd, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.MultiplyAssignChecked, bf12.OperationNodeType); Assert.AreSame(ld, bf12.Left); Assert.AreSame(rd, bf12.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bf12.Flags); var bc12 = DynamicCSharpExpression.DynamicMultiplyAssignChecked(ld, rd, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.MultiplyAssignChecked, bc12.OperationNodeType); Assert.AreSame(ld, bc12.Left); Assert.AreSame(rd, bc12.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bc12.Flags); Assert.AreEqual(typeof(int), bc12.Context); var be13 = DynamicCSharpExpression.DynamicSubtractAssignChecked(le, re); Assert.AreEqual(CSharpExpressionType.SubtractAssignChecked, be13.OperationNodeType); Assert.AreSame(le, be13.Left.Expression); Assert.AreSame(re, be13.Right.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, be13.Flags); var bd13 = DynamicCSharpExpression.DynamicSubtractAssignChecked(ld, rd); Assert.AreEqual(CSharpExpressionType.SubtractAssignChecked, bd13.OperationNodeType); Assert.AreSame(ld, bd13.Left); Assert.AreSame(rd, bd13.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bd13.Flags); var bf13 = DynamicCSharpExpression.DynamicSubtractAssignChecked(ld, rd, CSharpBinderFlags.CheckedContext); Assert.AreEqual(CSharpExpressionType.SubtractAssignChecked, bf13.OperationNodeType); Assert.AreSame(ld, bf13.Left); Assert.AreSame(rd, bf13.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bf13.Flags); var bc13 = DynamicCSharpExpression.DynamicSubtractAssignChecked(ld, rd, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(CSharpExpressionType.SubtractAssignChecked, bc13.OperationNodeType); Assert.AreSame(ld, bc13.Left); Assert.AreSame(rd, bc13.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bc13.Flags); Assert.AreEqual(typeof(int), bc13.Context); }
public void Dynamic_Unary_GeneratedFactories() { var oe = Expression.Constant(1); var od = DynamicCSharpExpression.DynamicArgument(oe); var ue0 = DynamicCSharpExpression.DynamicNegate(oe); Assert.AreEqual(ExpressionType.Negate, ue0.OperationNodeType); Assert.AreSame(oe, ue0.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue0.Flags); var ud0 = DynamicCSharpExpression.DynamicNegate(od); Assert.AreEqual(ExpressionType.Negate, ud0.OperationNodeType); Assert.AreSame(od, ud0.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud0.Flags); var uf0 = DynamicCSharpExpression.DynamicNegate(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Negate, uf0.OperationNodeType); Assert.AreSame(od, uf0.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf0.Flags); var uc0 = DynamicCSharpExpression.DynamicNegate(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Negate, uc0.OperationNodeType); Assert.AreSame(od, uc0.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc0.Flags); Assert.AreEqual(typeof(int), uc0.Context); var ue1 = DynamicCSharpExpression.DynamicUnaryPlus(oe); Assert.AreEqual(ExpressionType.UnaryPlus, ue1.OperationNodeType); Assert.AreSame(oe, ue1.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue1.Flags); var ud1 = DynamicCSharpExpression.DynamicUnaryPlus(od); Assert.AreEqual(ExpressionType.UnaryPlus, ud1.OperationNodeType); Assert.AreSame(od, ud1.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud1.Flags); var uf1 = DynamicCSharpExpression.DynamicUnaryPlus(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.UnaryPlus, uf1.OperationNodeType); Assert.AreSame(od, uf1.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf1.Flags); var uc1 = DynamicCSharpExpression.DynamicUnaryPlus(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.UnaryPlus, uc1.OperationNodeType); Assert.AreSame(od, uc1.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc1.Flags); Assert.AreEqual(typeof(int), uc1.Context); var ue2 = DynamicCSharpExpression.DynamicNegateChecked(oe); Assert.AreEqual(ExpressionType.NegateChecked, ue2.OperationNodeType); Assert.AreSame(oe, ue2.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ue2.Flags); var ud2 = DynamicCSharpExpression.DynamicNegateChecked(od); Assert.AreEqual(ExpressionType.NegateChecked, ud2.OperationNodeType); Assert.AreSame(od, ud2.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, ud2.Flags); var uf2 = DynamicCSharpExpression.DynamicNegateChecked(od, CSharpBinderFlags.CheckedContext); Assert.AreEqual(ExpressionType.NegateChecked, uf2.OperationNodeType); Assert.AreSame(od, uf2.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uf2.Flags); var uc2 = DynamicCSharpExpression.DynamicNegateChecked(od, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(ExpressionType.NegateChecked, uc2.OperationNodeType); Assert.AreSame(od, uc2.Operand); Assert.AreEqual(CSharpBinderFlags.CheckedContext, uc2.Flags); Assert.AreEqual(typeof(int), uc2.Context); var ue3 = DynamicCSharpExpression.DynamicNot(oe); Assert.AreEqual(ExpressionType.Not, ue3.OperationNodeType); Assert.AreSame(oe, ue3.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue3.Flags); var ud3 = DynamicCSharpExpression.DynamicNot(od); Assert.AreEqual(ExpressionType.Not, ud3.OperationNodeType); Assert.AreSame(od, ud3.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud3.Flags); var uf3 = DynamicCSharpExpression.DynamicNot(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Not, uf3.OperationNodeType); Assert.AreSame(od, uf3.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf3.Flags); var uc3 = DynamicCSharpExpression.DynamicNot(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Not, uc3.OperationNodeType); Assert.AreSame(od, uc3.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc3.Flags); Assert.AreEqual(typeof(int), uc3.Context); var ue4 = DynamicCSharpExpression.DynamicDecrement(oe); Assert.AreEqual(ExpressionType.Decrement, ue4.OperationNodeType); Assert.AreSame(oe, ue4.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue4.Flags); var ud4 = DynamicCSharpExpression.DynamicDecrement(od); Assert.AreEqual(ExpressionType.Decrement, ud4.OperationNodeType); Assert.AreSame(od, ud4.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud4.Flags); var uf4 = DynamicCSharpExpression.DynamicDecrement(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Decrement, uf4.OperationNodeType); Assert.AreSame(od, uf4.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf4.Flags); var uc4 = DynamicCSharpExpression.DynamicDecrement(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Decrement, uc4.OperationNodeType); Assert.AreSame(od, uc4.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc4.Flags); Assert.AreEqual(typeof(int), uc4.Context); var ue5 = DynamicCSharpExpression.DynamicIncrement(oe); Assert.AreEqual(ExpressionType.Increment, ue5.OperationNodeType); Assert.AreSame(oe, ue5.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue5.Flags); var ud5 = DynamicCSharpExpression.DynamicIncrement(od); Assert.AreEqual(ExpressionType.Increment, ud5.OperationNodeType); Assert.AreSame(od, ud5.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud5.Flags); var uf5 = DynamicCSharpExpression.DynamicIncrement(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Increment, uf5.OperationNodeType); Assert.AreSame(od, uf5.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf5.Flags); var uc5 = DynamicCSharpExpression.DynamicIncrement(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Increment, uc5.OperationNodeType); Assert.AreSame(od, uc5.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc5.Flags); Assert.AreEqual(typeof(int), uc5.Context); var ue6 = DynamicCSharpExpression.DynamicOnesComplement(oe); Assert.AreEqual(ExpressionType.OnesComplement, ue6.OperationNodeType); Assert.AreSame(oe, ue6.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue6.Flags); var ud6 = DynamicCSharpExpression.DynamicOnesComplement(od); Assert.AreEqual(ExpressionType.OnesComplement, ud6.OperationNodeType); Assert.AreSame(od, ud6.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud6.Flags); var uf6 = DynamicCSharpExpression.DynamicOnesComplement(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.OnesComplement, uf6.OperationNodeType); Assert.AreSame(od, uf6.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf6.Flags); var uc6 = DynamicCSharpExpression.DynamicOnesComplement(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.OnesComplement, uc6.OperationNodeType); Assert.AreSame(od, uc6.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc6.Flags); Assert.AreEqual(typeof(int), uc6.Context); var ue7 = DynamicCSharpExpression.DynamicIsTrue(oe); Assert.AreEqual(ExpressionType.IsTrue, ue7.OperationNodeType); Assert.AreSame(oe, ue7.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue7.Flags); var ud7 = DynamicCSharpExpression.DynamicIsTrue(od); Assert.AreEqual(ExpressionType.IsTrue, ud7.OperationNodeType); Assert.AreSame(od, ud7.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud7.Flags); var uf7 = DynamicCSharpExpression.DynamicIsTrue(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.IsTrue, uf7.OperationNodeType); Assert.AreSame(od, uf7.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf7.Flags); var uc7 = DynamicCSharpExpression.DynamicIsTrue(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.IsTrue, uc7.OperationNodeType); Assert.AreSame(od, uc7.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc7.Flags); Assert.AreEqual(typeof(int), uc7.Context); var ue8 = DynamicCSharpExpression.DynamicIsFalse(oe); Assert.AreEqual(ExpressionType.IsFalse, ue8.OperationNodeType); Assert.AreSame(oe, ue8.Operand.Expression); Assert.AreEqual(CSharpBinderFlags.None, ue8.Flags); var ud8 = DynamicCSharpExpression.DynamicIsFalse(od); Assert.AreEqual(ExpressionType.IsFalse, ud8.OperationNodeType); Assert.AreSame(od, ud8.Operand); Assert.AreEqual(CSharpBinderFlags.None, ud8.Flags); var uf8 = DynamicCSharpExpression.DynamicIsFalse(od, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.IsFalse, uf8.OperationNodeType); Assert.AreSame(od, uf8.Operand); Assert.AreEqual(CSharpBinderFlags.None, uf8.Flags); var uc8 = DynamicCSharpExpression.DynamicIsFalse(od, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.IsFalse, uc8.OperationNodeType); Assert.AreSame(od, uc8.Operand); Assert.AreEqual(CSharpBinderFlags.None, uc8.Flags); Assert.AreEqual(typeof(int), uc8.Context); }
public void Dynamic_Binary_GeneratedFactories() { var le = Expression.Constant(1); var re = Expression.Constant(2); var ld = DynamicCSharpExpression.DynamicArgument(le); var rd = DynamicCSharpExpression.DynamicArgument(re); var be0 = DynamicCSharpExpression.DynamicAdd(le, re); Assert.AreEqual(ExpressionType.Add, be0.OperationNodeType); Assert.AreSame(le, be0.Left.Expression); Assert.AreSame(re, be0.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be0.Flags); var bd0 = DynamicCSharpExpression.DynamicAdd(ld, rd); Assert.AreEqual(ExpressionType.Add, bd0.OperationNodeType); Assert.AreSame(ld, bd0.Left); Assert.AreSame(rd, bd0.Right); Assert.AreEqual(CSharpBinderFlags.None, bd0.Flags); var bf0 = DynamicCSharpExpression.DynamicAdd(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Add, bf0.OperationNodeType); Assert.AreSame(ld, bf0.Left); Assert.AreSame(rd, bf0.Right); Assert.AreEqual(CSharpBinderFlags.None, bf0.Flags); var bc0 = DynamicCSharpExpression.DynamicAdd(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Add, bc0.OperationNodeType); Assert.AreSame(ld, bc0.Left); Assert.AreSame(rd, bc0.Right); Assert.AreEqual(CSharpBinderFlags.None, bc0.Flags); Assert.AreEqual(typeof(int), bc0.Context); var be1 = DynamicCSharpExpression.DynamicAddChecked(le, re); Assert.AreEqual(ExpressionType.AddChecked, be1.OperationNodeType); Assert.AreSame(le, be1.Left.Expression); Assert.AreSame(re, be1.Right.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, be1.Flags); var bd1 = DynamicCSharpExpression.DynamicAddChecked(ld, rd); Assert.AreEqual(ExpressionType.AddChecked, bd1.OperationNodeType); Assert.AreSame(ld, bd1.Left); Assert.AreSame(rd, bd1.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bd1.Flags); var bf1 = DynamicCSharpExpression.DynamicAddChecked(ld, rd, CSharpBinderFlags.CheckedContext); Assert.AreEqual(ExpressionType.AddChecked, bf1.OperationNodeType); Assert.AreSame(ld, bf1.Left); Assert.AreSame(rd, bf1.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bf1.Flags); var bc1 = DynamicCSharpExpression.DynamicAddChecked(ld, rd, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(ExpressionType.AddChecked, bc1.OperationNodeType); Assert.AreSame(ld, bc1.Left); Assert.AreSame(rd, bc1.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bc1.Flags); Assert.AreEqual(typeof(int), bc1.Context); var be2 = DynamicCSharpExpression.DynamicAnd(le, re); Assert.AreEqual(ExpressionType.And, be2.OperationNodeType); Assert.AreSame(le, be2.Left.Expression); Assert.AreSame(re, be2.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be2.Flags); var bd2 = DynamicCSharpExpression.DynamicAnd(ld, rd); Assert.AreEqual(ExpressionType.And, bd2.OperationNodeType); Assert.AreSame(ld, bd2.Left); Assert.AreSame(rd, bd2.Right); Assert.AreEqual(CSharpBinderFlags.None, bd2.Flags); var bf2 = DynamicCSharpExpression.DynamicAnd(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.And, bf2.OperationNodeType); Assert.AreSame(ld, bf2.Left); Assert.AreSame(rd, bf2.Right); Assert.AreEqual(CSharpBinderFlags.None, bf2.Flags); var bc2 = DynamicCSharpExpression.DynamicAnd(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.And, bc2.OperationNodeType); Assert.AreSame(ld, bc2.Left); Assert.AreSame(rd, bc2.Right); Assert.AreEqual(CSharpBinderFlags.None, bc2.Flags); Assert.AreEqual(typeof(int), bc2.Context); var be3 = DynamicCSharpExpression.DynamicAndAlso(le, re); Assert.AreEqual(ExpressionType.AndAlso, be3.OperationNodeType); Assert.AreSame(le, be3.Left.Expression); Assert.AreSame(re, be3.Right.Expression); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, be3.Flags); var bd3 = DynamicCSharpExpression.DynamicAndAlso(ld, rd); Assert.AreEqual(ExpressionType.AndAlso, bd3.OperationNodeType); Assert.AreSame(ld, bd3.Left); Assert.AreSame(rd, bd3.Right); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, bd3.Flags); var bf3 = DynamicCSharpExpression.DynamicAndAlso(ld, rd, CSharpBinderFlags.BinaryOperationLogical); Assert.AreEqual(ExpressionType.AndAlso, bf3.OperationNodeType); Assert.AreSame(ld, bf3.Left); Assert.AreSame(rd, bf3.Right); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, bf3.Flags); var bc3 = DynamicCSharpExpression.DynamicAndAlso(ld, rd, CSharpBinderFlags.BinaryOperationLogical, typeof(int)); Assert.AreEqual(ExpressionType.AndAlso, bc3.OperationNodeType); Assert.AreSame(ld, bc3.Left); Assert.AreSame(rd, bc3.Right); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, bc3.Flags); Assert.AreEqual(typeof(int), bc3.Context); var be4 = DynamicCSharpExpression.DynamicDivide(le, re); Assert.AreEqual(ExpressionType.Divide, be4.OperationNodeType); Assert.AreSame(le, be4.Left.Expression); Assert.AreSame(re, be4.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be4.Flags); var bd4 = DynamicCSharpExpression.DynamicDivide(ld, rd); Assert.AreEqual(ExpressionType.Divide, bd4.OperationNodeType); Assert.AreSame(ld, bd4.Left); Assert.AreSame(rd, bd4.Right); Assert.AreEqual(CSharpBinderFlags.None, bd4.Flags); var bf4 = DynamicCSharpExpression.DynamicDivide(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Divide, bf4.OperationNodeType); Assert.AreSame(ld, bf4.Left); Assert.AreSame(rd, bf4.Right); Assert.AreEqual(CSharpBinderFlags.None, bf4.Flags); var bc4 = DynamicCSharpExpression.DynamicDivide(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Divide, bc4.OperationNodeType); Assert.AreSame(ld, bc4.Left); Assert.AreSame(rd, bc4.Right); Assert.AreEqual(CSharpBinderFlags.None, bc4.Flags); Assert.AreEqual(typeof(int), bc4.Context); var be5 = DynamicCSharpExpression.DynamicEqual(le, re); Assert.AreEqual(ExpressionType.Equal, be5.OperationNodeType); Assert.AreSame(le, be5.Left.Expression); Assert.AreSame(re, be5.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be5.Flags); var bd5 = DynamicCSharpExpression.DynamicEqual(ld, rd); Assert.AreEqual(ExpressionType.Equal, bd5.OperationNodeType); Assert.AreSame(ld, bd5.Left); Assert.AreSame(rd, bd5.Right); Assert.AreEqual(CSharpBinderFlags.None, bd5.Flags); var bf5 = DynamicCSharpExpression.DynamicEqual(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Equal, bf5.OperationNodeType); Assert.AreSame(ld, bf5.Left); Assert.AreSame(rd, bf5.Right); Assert.AreEqual(CSharpBinderFlags.None, bf5.Flags); var bc5 = DynamicCSharpExpression.DynamicEqual(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Equal, bc5.OperationNodeType); Assert.AreSame(ld, bc5.Left); Assert.AreSame(rd, bc5.Right); Assert.AreEqual(CSharpBinderFlags.None, bc5.Flags); Assert.AreEqual(typeof(int), bc5.Context); var be6 = DynamicCSharpExpression.DynamicExclusiveOr(le, re); Assert.AreEqual(ExpressionType.ExclusiveOr, be6.OperationNodeType); Assert.AreSame(le, be6.Left.Expression); Assert.AreSame(re, be6.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be6.Flags); var bd6 = DynamicCSharpExpression.DynamicExclusiveOr(ld, rd); Assert.AreEqual(ExpressionType.ExclusiveOr, bd6.OperationNodeType); Assert.AreSame(ld, bd6.Left); Assert.AreSame(rd, bd6.Right); Assert.AreEqual(CSharpBinderFlags.None, bd6.Flags); var bf6 = DynamicCSharpExpression.DynamicExclusiveOr(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.ExclusiveOr, bf6.OperationNodeType); Assert.AreSame(ld, bf6.Left); Assert.AreSame(rd, bf6.Right); Assert.AreEqual(CSharpBinderFlags.None, bf6.Flags); var bc6 = DynamicCSharpExpression.DynamicExclusiveOr(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.ExclusiveOr, bc6.OperationNodeType); Assert.AreSame(ld, bc6.Left); Assert.AreSame(rd, bc6.Right); Assert.AreEqual(CSharpBinderFlags.None, bc6.Flags); Assert.AreEqual(typeof(int), bc6.Context); var be7 = DynamicCSharpExpression.DynamicGreaterThan(le, re); Assert.AreEqual(ExpressionType.GreaterThan, be7.OperationNodeType); Assert.AreSame(le, be7.Left.Expression); Assert.AreSame(re, be7.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be7.Flags); var bd7 = DynamicCSharpExpression.DynamicGreaterThan(ld, rd); Assert.AreEqual(ExpressionType.GreaterThan, bd7.OperationNodeType); Assert.AreSame(ld, bd7.Left); Assert.AreSame(rd, bd7.Right); Assert.AreEqual(CSharpBinderFlags.None, bd7.Flags); var bf7 = DynamicCSharpExpression.DynamicGreaterThan(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.GreaterThan, bf7.OperationNodeType); Assert.AreSame(ld, bf7.Left); Assert.AreSame(rd, bf7.Right); Assert.AreEqual(CSharpBinderFlags.None, bf7.Flags); var bc7 = DynamicCSharpExpression.DynamicGreaterThan(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.GreaterThan, bc7.OperationNodeType); Assert.AreSame(ld, bc7.Left); Assert.AreSame(rd, bc7.Right); Assert.AreEqual(CSharpBinderFlags.None, bc7.Flags); Assert.AreEqual(typeof(int), bc7.Context); var be8 = DynamicCSharpExpression.DynamicGreaterThanOrEqual(le, re); Assert.AreEqual(ExpressionType.GreaterThanOrEqual, be8.OperationNodeType); Assert.AreSame(le, be8.Left.Expression); Assert.AreSame(re, be8.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be8.Flags); var bd8 = DynamicCSharpExpression.DynamicGreaterThanOrEqual(ld, rd); Assert.AreEqual(ExpressionType.GreaterThanOrEqual, bd8.OperationNodeType); Assert.AreSame(ld, bd8.Left); Assert.AreSame(rd, bd8.Right); Assert.AreEqual(CSharpBinderFlags.None, bd8.Flags); var bf8 = DynamicCSharpExpression.DynamicGreaterThanOrEqual(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.GreaterThanOrEqual, bf8.OperationNodeType); Assert.AreSame(ld, bf8.Left); Assert.AreSame(rd, bf8.Right); Assert.AreEqual(CSharpBinderFlags.None, bf8.Flags); var bc8 = DynamicCSharpExpression.DynamicGreaterThanOrEqual(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.GreaterThanOrEqual, bc8.OperationNodeType); Assert.AreSame(ld, bc8.Left); Assert.AreSame(rd, bc8.Right); Assert.AreEqual(CSharpBinderFlags.None, bc8.Flags); Assert.AreEqual(typeof(int), bc8.Context); var be9 = DynamicCSharpExpression.DynamicLeftShift(le, re); Assert.AreEqual(ExpressionType.LeftShift, be9.OperationNodeType); Assert.AreSame(le, be9.Left.Expression); Assert.AreSame(re, be9.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be9.Flags); var bd9 = DynamicCSharpExpression.DynamicLeftShift(ld, rd); Assert.AreEqual(ExpressionType.LeftShift, bd9.OperationNodeType); Assert.AreSame(ld, bd9.Left); Assert.AreSame(rd, bd9.Right); Assert.AreEqual(CSharpBinderFlags.None, bd9.Flags); var bf9 = DynamicCSharpExpression.DynamicLeftShift(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.LeftShift, bf9.OperationNodeType); Assert.AreSame(ld, bf9.Left); Assert.AreSame(rd, bf9.Right); Assert.AreEqual(CSharpBinderFlags.None, bf9.Flags); var bc9 = DynamicCSharpExpression.DynamicLeftShift(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.LeftShift, bc9.OperationNodeType); Assert.AreSame(ld, bc9.Left); Assert.AreSame(rd, bc9.Right); Assert.AreEqual(CSharpBinderFlags.None, bc9.Flags); Assert.AreEqual(typeof(int), bc9.Context); var be10 = DynamicCSharpExpression.DynamicLessThan(le, re); Assert.AreEqual(ExpressionType.LessThan, be10.OperationNodeType); Assert.AreSame(le, be10.Left.Expression); Assert.AreSame(re, be10.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be10.Flags); var bd10 = DynamicCSharpExpression.DynamicLessThan(ld, rd); Assert.AreEqual(ExpressionType.LessThan, bd10.OperationNodeType); Assert.AreSame(ld, bd10.Left); Assert.AreSame(rd, bd10.Right); Assert.AreEqual(CSharpBinderFlags.None, bd10.Flags); var bf10 = DynamicCSharpExpression.DynamicLessThan(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.LessThan, bf10.OperationNodeType); Assert.AreSame(ld, bf10.Left); Assert.AreSame(rd, bf10.Right); Assert.AreEqual(CSharpBinderFlags.None, bf10.Flags); var bc10 = DynamicCSharpExpression.DynamicLessThan(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.LessThan, bc10.OperationNodeType); Assert.AreSame(ld, bc10.Left); Assert.AreSame(rd, bc10.Right); Assert.AreEqual(CSharpBinderFlags.None, bc10.Flags); Assert.AreEqual(typeof(int), bc10.Context); var be11 = DynamicCSharpExpression.DynamicLessThanOrEqual(le, re); Assert.AreEqual(ExpressionType.LessThanOrEqual, be11.OperationNodeType); Assert.AreSame(le, be11.Left.Expression); Assert.AreSame(re, be11.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be11.Flags); var bd11 = DynamicCSharpExpression.DynamicLessThanOrEqual(ld, rd); Assert.AreEqual(ExpressionType.LessThanOrEqual, bd11.OperationNodeType); Assert.AreSame(ld, bd11.Left); Assert.AreSame(rd, bd11.Right); Assert.AreEqual(CSharpBinderFlags.None, bd11.Flags); var bf11 = DynamicCSharpExpression.DynamicLessThanOrEqual(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.LessThanOrEqual, bf11.OperationNodeType); Assert.AreSame(ld, bf11.Left); Assert.AreSame(rd, bf11.Right); Assert.AreEqual(CSharpBinderFlags.None, bf11.Flags); var bc11 = DynamicCSharpExpression.DynamicLessThanOrEqual(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.LessThanOrEqual, bc11.OperationNodeType); Assert.AreSame(ld, bc11.Left); Assert.AreSame(rd, bc11.Right); Assert.AreEqual(CSharpBinderFlags.None, bc11.Flags); Assert.AreEqual(typeof(int), bc11.Context); var be12 = DynamicCSharpExpression.DynamicModulo(le, re); Assert.AreEqual(ExpressionType.Modulo, be12.OperationNodeType); Assert.AreSame(le, be12.Left.Expression); Assert.AreSame(re, be12.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be12.Flags); var bd12 = DynamicCSharpExpression.DynamicModulo(ld, rd); Assert.AreEqual(ExpressionType.Modulo, bd12.OperationNodeType); Assert.AreSame(ld, bd12.Left); Assert.AreSame(rd, bd12.Right); Assert.AreEqual(CSharpBinderFlags.None, bd12.Flags); var bf12 = DynamicCSharpExpression.DynamicModulo(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Modulo, bf12.OperationNodeType); Assert.AreSame(ld, bf12.Left); Assert.AreSame(rd, bf12.Right); Assert.AreEqual(CSharpBinderFlags.None, bf12.Flags); var bc12 = DynamicCSharpExpression.DynamicModulo(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Modulo, bc12.OperationNodeType); Assert.AreSame(ld, bc12.Left); Assert.AreSame(rd, bc12.Right); Assert.AreEqual(CSharpBinderFlags.None, bc12.Flags); Assert.AreEqual(typeof(int), bc12.Context); var be13 = DynamicCSharpExpression.DynamicMultiply(le, re); Assert.AreEqual(ExpressionType.Multiply, be13.OperationNodeType); Assert.AreSame(le, be13.Left.Expression); Assert.AreSame(re, be13.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be13.Flags); var bd13 = DynamicCSharpExpression.DynamicMultiply(ld, rd); Assert.AreEqual(ExpressionType.Multiply, bd13.OperationNodeType); Assert.AreSame(ld, bd13.Left); Assert.AreSame(rd, bd13.Right); Assert.AreEqual(CSharpBinderFlags.None, bd13.Flags); var bf13 = DynamicCSharpExpression.DynamicMultiply(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Multiply, bf13.OperationNodeType); Assert.AreSame(ld, bf13.Left); Assert.AreSame(rd, bf13.Right); Assert.AreEqual(CSharpBinderFlags.None, bf13.Flags); var bc13 = DynamicCSharpExpression.DynamicMultiply(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Multiply, bc13.OperationNodeType); Assert.AreSame(ld, bc13.Left); Assert.AreSame(rd, bc13.Right); Assert.AreEqual(CSharpBinderFlags.None, bc13.Flags); Assert.AreEqual(typeof(int), bc13.Context); var be14 = DynamicCSharpExpression.DynamicMultiplyChecked(le, re); Assert.AreEqual(ExpressionType.MultiplyChecked, be14.OperationNodeType); Assert.AreSame(le, be14.Left.Expression); Assert.AreSame(re, be14.Right.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, be14.Flags); var bd14 = DynamicCSharpExpression.DynamicMultiplyChecked(ld, rd); Assert.AreEqual(ExpressionType.MultiplyChecked, bd14.OperationNodeType); Assert.AreSame(ld, bd14.Left); Assert.AreSame(rd, bd14.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bd14.Flags); var bf14 = DynamicCSharpExpression.DynamicMultiplyChecked(ld, rd, CSharpBinderFlags.CheckedContext); Assert.AreEqual(ExpressionType.MultiplyChecked, bf14.OperationNodeType); Assert.AreSame(ld, bf14.Left); Assert.AreSame(rd, bf14.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bf14.Flags); var bc14 = DynamicCSharpExpression.DynamicMultiplyChecked(ld, rd, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(ExpressionType.MultiplyChecked, bc14.OperationNodeType); Assert.AreSame(ld, bc14.Left); Assert.AreSame(rd, bc14.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bc14.Flags); Assert.AreEqual(typeof(int), bc14.Context); var be15 = DynamicCSharpExpression.DynamicNotEqual(le, re); Assert.AreEqual(ExpressionType.NotEqual, be15.OperationNodeType); Assert.AreSame(le, be15.Left.Expression); Assert.AreSame(re, be15.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be15.Flags); var bd15 = DynamicCSharpExpression.DynamicNotEqual(ld, rd); Assert.AreEqual(ExpressionType.NotEqual, bd15.OperationNodeType); Assert.AreSame(ld, bd15.Left); Assert.AreSame(rd, bd15.Right); Assert.AreEqual(CSharpBinderFlags.None, bd15.Flags); var bf15 = DynamicCSharpExpression.DynamicNotEqual(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.NotEqual, bf15.OperationNodeType); Assert.AreSame(ld, bf15.Left); Assert.AreSame(rd, bf15.Right); Assert.AreEqual(CSharpBinderFlags.None, bf15.Flags); var bc15 = DynamicCSharpExpression.DynamicNotEqual(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.NotEqual, bc15.OperationNodeType); Assert.AreSame(ld, bc15.Left); Assert.AreSame(rd, bc15.Right); Assert.AreEqual(CSharpBinderFlags.None, bc15.Flags); Assert.AreEqual(typeof(int), bc15.Context); var be16 = DynamicCSharpExpression.DynamicOr(le, re); Assert.AreEqual(ExpressionType.Or, be16.OperationNodeType); Assert.AreSame(le, be16.Left.Expression); Assert.AreSame(re, be16.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be16.Flags); var bd16 = DynamicCSharpExpression.DynamicOr(ld, rd); Assert.AreEqual(ExpressionType.Or, bd16.OperationNodeType); Assert.AreSame(ld, bd16.Left); Assert.AreSame(rd, bd16.Right); Assert.AreEqual(CSharpBinderFlags.None, bd16.Flags); var bf16 = DynamicCSharpExpression.DynamicOr(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Or, bf16.OperationNodeType); Assert.AreSame(ld, bf16.Left); Assert.AreSame(rd, bf16.Right); Assert.AreEqual(CSharpBinderFlags.None, bf16.Flags); var bc16 = DynamicCSharpExpression.DynamicOr(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Or, bc16.OperationNodeType); Assert.AreSame(ld, bc16.Left); Assert.AreSame(rd, bc16.Right); Assert.AreEqual(CSharpBinderFlags.None, bc16.Flags); Assert.AreEqual(typeof(int), bc16.Context); var be17 = DynamicCSharpExpression.DynamicOrElse(le, re); Assert.AreEqual(ExpressionType.OrElse, be17.OperationNodeType); Assert.AreSame(le, be17.Left.Expression); Assert.AreSame(re, be17.Right.Expression); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, be17.Flags); var bd17 = DynamicCSharpExpression.DynamicOrElse(ld, rd); Assert.AreEqual(ExpressionType.OrElse, bd17.OperationNodeType); Assert.AreSame(ld, bd17.Left); Assert.AreSame(rd, bd17.Right); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, bd17.Flags); var bf17 = DynamicCSharpExpression.DynamicOrElse(ld, rd, CSharpBinderFlags.BinaryOperationLogical); Assert.AreEqual(ExpressionType.OrElse, bf17.OperationNodeType); Assert.AreSame(ld, bf17.Left); Assert.AreSame(rd, bf17.Right); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, bf17.Flags); var bc17 = DynamicCSharpExpression.DynamicOrElse(ld, rd, CSharpBinderFlags.BinaryOperationLogical, typeof(int)); Assert.AreEqual(ExpressionType.OrElse, bc17.OperationNodeType); Assert.AreSame(ld, bc17.Left); Assert.AreSame(rd, bc17.Right); Assert.AreEqual(CSharpBinderFlags.BinaryOperationLogical, bc17.Flags); Assert.AreEqual(typeof(int), bc17.Context); var be18 = DynamicCSharpExpression.DynamicRightShift(le, re); Assert.AreEqual(ExpressionType.RightShift, be18.OperationNodeType); Assert.AreSame(le, be18.Left.Expression); Assert.AreSame(re, be18.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be18.Flags); var bd18 = DynamicCSharpExpression.DynamicRightShift(ld, rd); Assert.AreEqual(ExpressionType.RightShift, bd18.OperationNodeType); Assert.AreSame(ld, bd18.Left); Assert.AreSame(rd, bd18.Right); Assert.AreEqual(CSharpBinderFlags.None, bd18.Flags); var bf18 = DynamicCSharpExpression.DynamicRightShift(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.RightShift, bf18.OperationNodeType); Assert.AreSame(ld, bf18.Left); Assert.AreSame(rd, bf18.Right); Assert.AreEqual(CSharpBinderFlags.None, bf18.Flags); var bc18 = DynamicCSharpExpression.DynamicRightShift(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.RightShift, bc18.OperationNodeType); Assert.AreSame(ld, bc18.Left); Assert.AreSame(rd, bc18.Right); Assert.AreEqual(CSharpBinderFlags.None, bc18.Flags); Assert.AreEqual(typeof(int), bc18.Context); var be19 = DynamicCSharpExpression.DynamicSubtract(le, re); Assert.AreEqual(ExpressionType.Subtract, be19.OperationNodeType); Assert.AreSame(le, be19.Left.Expression); Assert.AreSame(re, be19.Right.Expression); Assert.AreEqual(CSharpBinderFlags.None, be19.Flags); var bd19 = DynamicCSharpExpression.DynamicSubtract(ld, rd); Assert.AreEqual(ExpressionType.Subtract, bd19.OperationNodeType); Assert.AreSame(ld, bd19.Left); Assert.AreSame(rd, bd19.Right); Assert.AreEqual(CSharpBinderFlags.None, bd19.Flags); var bf19 = DynamicCSharpExpression.DynamicSubtract(ld, rd, CSharpBinderFlags.None); Assert.AreEqual(ExpressionType.Subtract, bf19.OperationNodeType); Assert.AreSame(ld, bf19.Left); Assert.AreSame(rd, bf19.Right); Assert.AreEqual(CSharpBinderFlags.None, bf19.Flags); var bc19 = DynamicCSharpExpression.DynamicSubtract(ld, rd, CSharpBinderFlags.None, typeof(int)); Assert.AreEqual(ExpressionType.Subtract, bc19.OperationNodeType); Assert.AreSame(ld, bc19.Left); Assert.AreSame(rd, bc19.Right); Assert.AreEqual(CSharpBinderFlags.None, bc19.Flags); Assert.AreEqual(typeof(int), bc19.Context); var be20 = DynamicCSharpExpression.DynamicSubtractChecked(le, re); Assert.AreEqual(ExpressionType.SubtractChecked, be20.OperationNodeType); Assert.AreSame(le, be20.Left.Expression); Assert.AreSame(re, be20.Right.Expression); Assert.AreEqual(CSharpBinderFlags.CheckedContext, be20.Flags); var bd20 = DynamicCSharpExpression.DynamicSubtractChecked(ld, rd); Assert.AreEqual(ExpressionType.SubtractChecked, bd20.OperationNodeType); Assert.AreSame(ld, bd20.Left); Assert.AreSame(rd, bd20.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bd20.Flags); var bf20 = DynamicCSharpExpression.DynamicSubtractChecked(ld, rd, CSharpBinderFlags.CheckedContext); Assert.AreEqual(ExpressionType.SubtractChecked, bf20.OperationNodeType); Assert.AreSame(ld, bf20.Left); Assert.AreSame(rd, bf20.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bf20.Flags); var bc20 = DynamicCSharpExpression.DynamicSubtractChecked(ld, rd, CSharpBinderFlags.CheckedContext, typeof(int)); Assert.AreEqual(ExpressionType.SubtractChecked, bc20.OperationNodeType); Assert.AreSame(ld, bc20.Left); Assert.AreSame(rd, bc20.Right); Assert.AreEqual(CSharpBinderFlags.CheckedContext, bc20.Flags); Assert.AreEqual(typeof(int), bc20.Context); }