public void CombinationFilter_OrOperator_GetPredicate_FiltersToExpectedResults() { var filter1 = new NumericRangeFilter(5, 10); var filter2 = new NumericRangeFilter(8, 15); var filter = new CombinationFilterNode <NumericRangeFilter>(new[] { filter1, filter2 }, CombinationOperator.Any); var values = new[] { 1, 3, 5, 9, 11 }; var expectedFilteredValues = new[] { 5, 9, 11 }; var filterPredicate = filter.GetPredicate <NumericRangeFilter, int>(); var filteredValues = values.Where(filterPredicate); Assert.Equal(expectedFilteredValues, filteredValues); }
public void ComplexFilter_GetPredicate_FiltersToExpectedResults() { var filter5To10 = new NumericRangeFilter(5, 10); var filter8To15 = new NumericRangeFilter(8, 15); var filter5To10And8To15 = new CombinationFilterNode <NumericRangeFilter>(new[] { filter5To10, filter8To15 }, CombinationOperator.Any); var filter9To12 = new NumericRangeFilter(9, 12); var filter = new CombinationFilterNode <NumericRangeFilter>(new IFilterNode <NumericRangeFilter>[] { filter5To10And8To15, filter9To12.ToLeafFilterNode() }, CombinationOperator.All); var values = new[] { 1, 3, 5, 9, 11 }; var expectedFilteredValues = new[] { 9, 11 }; var filterPredicate = filter.GetPredicate <NumericRangeFilter, int>(); var filteredValues = values.Where(filterPredicate); Assert.Equal(expectedFilteredValues, filteredValues); }
public void GetPartial_Example() { // All the numbers from -5 to 10, EXCEPT numbers from 2 to 6 var filter = new CombinationFilterNode <NumericRangeFilter>(new IFilterNode <NumericRangeFilter>[] { new LeafFilterNode <NumericRangeFilter>(new NumericRangeFilter(-5, 10)), new InvertedFilterNode <NumericRangeFilter>(new NumericRangeFilter(2, 6)), }, CombinationOperator.All); // Exclude filters with negative values var partialFilter = filter.GetPartial(f => f.LowerBound >= 0); var positiveValues = new[] { 1, 3, 5, 7, 12 }; var prefilteredValues = positiveValues.Where(partialFilter.GetPredicate <NumericRangeFilter, int>()).ToList(); Assert.Equal(new[] { 1, 7, 12 }, prefilteredValues); var additionalValues = new[] { -7, -4, 11 }; var combinedValues = prefilteredValues.Concat(additionalValues); var finalValues = combinedValues.Where(filter.GetPredicate <NumericRangeFilter, int>()); Assert.Equal(new[] { 1, 7, -4 }, finalValues); }