public void LeafItemFilter_GetPredicate_FiltersToExpectedResults()
        {
            var filter = new LeafFilterNode <NumericRangeFilter>(new NumericRangeFilter(5, 10));
            var values = new[] { 1, 3, 5, 9, 11 };
            var expectedFilteredValues = new[] { 5, 9 };

            var filterPredicate = filter.GetPredicate <NumericRangeFilter, int>();
            var filteredValues  = values.Where(filterPredicate);

            Assert.Equal(expectedFilteredValues, filteredValues);
        }
        public void Aggregate_ReturnsExpectedResult_WhenComputingMinimumLowerBound()
        {
            var filter5To10 = new LeafFilterNode <NumericRangeFilter>(new NumericRangeFilter(5, 10));
            var filter      = filter5To10.Invert();

            double GetLowerBound(NumericRangeFilter f)
            {
                return(f.LowerBound);
            }

            // Reduce the filter to get the length of the longest interval
            var result = filter.Aggregate(
                (lowerBounds, _) => lowerBounds.Min(),
                length => double.NegativeInfinity,
                leafFilterNode => GetLowerBound(leafFilterNode.Filter));

            // Max is 15 - 8
            Assert.Equal(double.NegativeInfinity, result);
        }