Ejemplo n.º 1
0
        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);
                }
            }
        }
Ejemplo n.º 2
0
        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));
            }
        }
Ejemplo n.º 3
0
        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));
            }
        }
Ejemplo n.º 4
0
        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));
            }
        }
Ejemplo n.º 5
0
        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));
            }
        }
Ejemplo n.º 6
0
        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;
        }
Ejemplo n.º 7
0
 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();
 }