public void Case13() { var random = new Random(); foreach (var _ in Enumerable.Range(0, 100)) { int a = random.Next(-100, 100); int b = random.Next(-100, 100); TestContext.WriteLine($"a={a}, b={b}"); var sideEffect = new SideEffetHolder(); Expression <Func <int, bool> > expr1 = x => x % 2 == 0; Expression <Func <int, bool> > expr2 = y => y % (sideEffect.Update(3)) == 0; var expr4 = (Expression <Func <int, int, bool> >)ExpressionOperators.OrElse(expr1, expr2); Assert.AreEqual(a % 2 == 0 || b % 3 == 0, expr4.Compile().Invoke(a, b)); if (a % 2 != 0) { Assert.AreEqual(3, sideEffect.Value); } else { Assert.AreEqual(0, sideEffect.Value); } } }
public void Case02() { var random = new Random(); foreach (var _ in Enumerable.Range(0, 10)) { int a = random.Next(-100, 100); int b = random.Next(-100, 100); TestContext.WriteLine($"a={a}, b={b}"); Expression <Func <int, int, int> > expr1 = (x, y) => x - y; Expression <Func <int, int> > expr2 = x => x / 2; var expr3 = ExpressionOperators.Then <int, int, int>(expr1, expr2); Assert.AreEqual((a - b) / 2, expr3.Compile().Invoke(a, b)); } }
public void Case11() { var random = new Random(); foreach (var _ in Enumerable.Range(0, 100)) { int a = random.Next(-100, 100); int b = random.Next(-100, 100); TestContext.WriteLine($"a={a}, b={b}"); Expression <Func <int, bool> > expr1 = x => x % 2 == 0; Expression <Func <int, bool> > expr2 = y => y % 3 == 0; var expr4 = (Expression <Func <int, int, bool> >)ExpressionOperators.OrElse(expr1, expr2); Assert.AreEqual(a % 2 == 0 || b % 3 == 0, expr4.Compile().Invoke(a, b)); } }
public void Case01() { var random = new Random(); foreach (var _ in Enumerable.Range(0, 10)) { int a = random.Next(-100, 100); TestContext.WriteLine($"a={a}"); Expression <Func <int, int> > expr1 = x => x - 1; Expression <Func <int, int> > expr2 = x => x / 2; var expr3 = ExpressionOperators.Then <int, int>(expr1, expr2); var expr4 = ExpressionOperators.Then <int, int>(expr2, expr1); Assert.AreEqual((a - 1) / 2, expr3.Compile().Invoke(a)); Assert.AreEqual(a / 2 - 1, expr4.Compile().Invoke(a)); } }
public void Case09() { var random = new Random(); foreach (var _ in Enumerable.Range(0, 100)) { int a = random.Next(-100, 100); int b = random.Next(-100, 100); int c = random.Next(-100, 100); TestContext.WriteLine($"a={a}, b={b}, c={c}"); Expression <Func <int, bool> > expr1 = x => x % 2 == 0; Expression <Func <int, bool> > expr2 = y => y % 3 == 0; Expression <Func <int, bool> > expr3 = z => z % 5 == 0; var expr4 = (Expression <Func <int, int, int, bool> >)ExpressionOperators.AndAlso(expr1, expr2, expr3); Assert.AreEqual(a % 2 == 0 && b % 3 == 0 && c % 5 == 0, expr4.Compile().Invoke(a, b, c)); } }
private bool ExtractOpa(CriteriaOperator op, out ExpressionOperators eopa, out CriteriaOperator operand) { UnaryOperator objA = op as UnaryOperator; bool flag = !object.ReferenceEquals(objA, null) && (objA.OperatorType == UnaryOperatorType.Not); if (flag) { op = objA.Operand; } UnaryOperator operator2 = op as UnaryOperator; if (!object.ReferenceEquals(operator2, null)) { operand = null; if (operator2.OperatorType == UnaryOperatorType.IsNull) { eopa = flag ? ExpressionOperators.NonBlanks : ExpressionOperators.Blanks; return true; } } BinaryOperator operator3 = op as BinaryOperator; if (!object.ReferenceEquals(operator3, null)) { operand = operator3.RightOperand; if (flag) { switch (operator3.OperatorType) { case BinaryOperatorType.Equal: eopa = ExpressionOperators.NotEquals; return true; case BinaryOperatorType.NotEqual: eopa = ExpressionOperators.Equals; return true; case BinaryOperatorType.Greater: eopa = ExpressionOperators.LessOrEqual; return true; case BinaryOperatorType.Less: eopa = ExpressionOperators.GreaterOrEqual; return true; case BinaryOperatorType.LessOrEqual: eopa = ExpressionOperators.Greater; return true; case BinaryOperatorType.GreaterOrEqual: eopa = ExpressionOperators.Less; return true; case BinaryOperatorType.Like: eopa = ExpressionOperators.NotLike; return true; } } else { switch (operator3.OperatorType) { case BinaryOperatorType.Equal: eopa = ExpressionOperators.Equals; return true; case BinaryOperatorType.NotEqual: eopa = ExpressionOperators.NotEquals; return true; case BinaryOperatorType.Greater: eopa = ExpressionOperators.Greater; return true; case BinaryOperatorType.Less: eopa = ExpressionOperators.Less; return true; case BinaryOperatorType.LessOrEqual: eopa = ExpressionOperators.LessOrEqual; return true; case BinaryOperatorType.GreaterOrEqual: eopa = ExpressionOperators.GreaterOrEqual; return true; case BinaryOperatorType.Like: eopa = ExpressionOperators.Like; return true; } } } operand = null; eopa = ExpressionOperators.Blanks; return false; }
internal string DescriptionByExOperator(ExpressionOperators o) { int num = 0; num = 0; while (num <= this.operators.GetUpperBound(1)) { if (this.operators[0, num].Equals(o)) { break; } num++; } return this.operators[1, num].ToString(); }