Exemplo n.º 1
0
        public void TestMathFunctions()
        {
            const double num   = 0.6;
            var          model = new DoubleModel
            {
                Number   = num,
                Document = new MutableDocument("doc1")
            };

            Db.Save(model);

            var expectedValues = new[] {
                Math.Abs(num), Math.Acos(num), Math.Asin(num), Math.Atan(num),
                Math.Ceiling(num), Math.Exp(num),
                Math.Floor(num), Math.Log(num), Math.Log10(num),
                Math.Round(num), Math.Sin(num), Math.Sqrt(num),
                Math.Tan(num), Math.Truncate(num)
            };

            int index     = 0;
            var queryable = new DatabaseQueryable <DoubleModel>(Db);
            var parameter = LinqExpression.Parameter(typeof(DoubleModel), "x");

            foreach (var function in new[] {
                "Abs", "Acos", "Asin", "Atan",
                "Ceiling", "Exp",
                "Floor", "Log", "Log10",
                "Round", "Sin", "Sqrt",
                "Tan", "Truncate"
            })
            {
                var methodCall = LinqExpression.Lambda <Func <DoubleModel, double> >(LinqExpression.Call(typeof(Math).GetMethod(function, new[] { typeof(double) }), LinqExpression.Property(parameter, "Number")), parameter);
                var q          = queryable.Select(methodCall);
                var numRows    = VerifyQuery(q, (n, r) =>
                {
                    r.Should().Be(expectedValues[index++]);
                });

                numRows.Should().Be(1);
            }
        }