Example #1
0
        public void BuildExpression_TotalPageLtGtWithOr_ShouldMatchCount(List <Book> data, int min, int some)
        {
            // Arrange
            var max    = min + some;
            var filter = new BookFilter_OperatorFilter_TotalPage
            {
                TotalPage = new OperatorFilter <int>
                {
                    Gt          = min,
                    Lt          = max,
                    CombineWith = CombineType.Or
                }
            };

            // Act
            var query  = data.AsQueryable().ApplyFilter(filter);
            var result = query.ToList();

            // Assert
            var actualResult = data.AsQueryable().Where(x => x.TotalPage > min || x.TotalPage < max).ToList();

            Assert.Equal(actualResult.Count, result.Count);
            foreach (var item in actualResult)
            {
                Assert.Contains(item, result);
            }
        }
Example #2
0
        public void BuildExpression_TotalPageEqWithAnd_ShouldMatchCount(List <Book> data, int totalPage)
        {
            // Arrange
            var filter = new BookFilter_OperatorFilter_TotalPage
            {
                TotalPage = new OperatorFilter <int>
                {
                    Eq          = totalPage,
                    CombineWith = CombineType.And
                }
            };

            // Act
            var query  = data.AsQueryable().ApplyFilter(filter);
            var result = query.ToList();

            // Assert
            var actualResult = data.AsQueryable().Where(x => x.TotalPage == totalPage).ToList();

            Assert.Equal(actualResult.Count, result.Count);
            foreach (var item in actualResult)
            {
                Assert.Contains(item, result);
            }
        }
        public void BuildExpression_TotalPageWithAnd_SholdMatchCount(List <Book> data, BookFilter_OperatorFilter_TotalPage filter)
        {
            // Arrange
            filter.CombineWith = CombineType.And;
            Stopwatch sw = new Stopwatch();

            // Act
            sw.Restart();
            var classicalQuery  = GetAndQuery(data.AsQueryable(), filter);
            var classicalResult = classicalQuery.ToList();

            sw.Stop();
            var classicalElapsed = sw.ElapsedTicks;

            Console.WriteLine(classicalElapsed);

            sw.Start();
            var query  = data.AsQueryable().ApplyFilter(filter);
            var result = query.ToList();

            sw.Stop();
            var applyFilterElapsed = sw.ElapsedTicks;

            Console.WriteLine(applyFilterElapsed);

            // Assert
            Assert.True((classicalElapsed * 1.5f) > applyFilterElapsed); // Can't be slower than 1.5 times.

            // Local functions
            IQueryable <Book> GetAndQuery(IQueryable <Book> query, BookFilter_OperatorFilter_TotalPage f)
            {
                if (f.TotalPage.Eq != null)
                {
                    query = query.Where(x => x.TotalPage == f.TotalPage.Eq);
                }

                if (f.TotalPage.Not != null)
                {
                    query = query.Where(x => x.TotalPage != f.TotalPage.Not);
                }

                if (f.TotalPage.Gt != null)
                {
                    query = query.Where(x => x.TotalPage > f.TotalPage.Gt);
                }

                if (f.TotalPage.Gte != null)
                {
                    query = query.Where(x => x.TotalPage >= f.TotalPage.Gte);
                }

                if (f.TotalPage.Lt != null)
                {
                    query = query.Where(x => x.TotalPage < f.TotalPage.Lt);
                }

                if (f.TotalPage.Lte != null)
                {
                    query = query.Where(x => x.TotalPage <= f.TotalPage.Lt);
                }

                return(query);
            }
        }
Example #4
0
        public void BuildExpression_TotalPageWithAnd_SholdMatchCount(List <Book> data, BookFilter_OperatorFilter_TotalPage filter)
        {
            // Arrange
            filter.CombineWith = CombineType.And;

            // Act
            var query  = data.AsQueryable().ApplyFilter(filter);
            var result = query.ToList();

            // Assert
            var f            = filter;
            var actualResult = GetAndQuery(data.AsQueryable(), filter).ToList();

            Assert.Equal(actualResult.Count, result.Count);
            foreach (var item in actualResult)
            {
                Assert.Contains(item, result);
            }

            IQueryable <Book> GetAndQuery(IQueryable <Book> query, BookFilter_OperatorFilter_TotalPage f)
            {
                if (f.TotalPage.Eq != null)
                {
                    query = query.Where(x => x.TotalPage == f.TotalPage.Eq);
                }

                if (f.TotalPage.Not != null)
                {
                    query = query.Where(x => x.TotalPage != f.TotalPage.Not);
                }

                if (f.TotalPage.Gt != null)
                {
                    query = query.Where(x => x.TotalPage > f.TotalPage.Gt);
                }

                if (f.TotalPage.Gte != null)
                {
                    query = query.Where(x => x.TotalPage >= f.TotalPage.Gte);
                }

                if (f.TotalPage.Lt != null)
                {
                    query = query.Where(x => x.TotalPage < f.TotalPage.Lt);
                }

                if (f.TotalPage.Lte != null)
                {
                    query = query.Where(x => x.TotalPage <= f.TotalPage.Lt);
                }

                return(query);
            }
        }