Exemple #1
0
 private static void Validate(int minimum, int maximum, RangeInclusivity inclusivity = RangeInclusivity.AllInclusive)
 {
     if (minimum > maximum)
     {
         throw new ArgumentException($"The minimum must be less than or equal to the maximum.  Minimum was {minimum}.  Maximum was {maximum}.");
     }
 }
 public static IRange <T> To <T>(
     this T from,
     T to,
     RangeInclusivity inclusivity = RangeInclusivity.InclusiveMinInclusiveMax
     )
     where T : IComparable <T>
 {
     return(new Range <T>(from, to, inclusivity));
 }
Exemple #3
0
        /// <param name="minimum">Minimum value</param>
        /// <param name="maximum">Maximum value</param>
        /// <param name="inclusivity">Range inclusivity</param>
        public Range(
            T minimum,
            T maximum,
            RangeInclusivity inclusivity = RangeInclusivity.InclusiveMinInclusiveMax)
        {
            Inclusivity = inclusivity;
            var reverse = minimum.CompareTo(maximum) > 0;

            _minimum = new Settable <T>(reverse ? maximum : minimum);
            _maximum = new Settable <T>(reverse ? minimum : maximum);
        }
Exemple #4
0
        public void WhenAnyInclusivity_RangeShouldContainItself(RangeInclusivity inclusivity)
        {
            // Arrange
            var range = new Range <int>(1, 4, inclusivity);

            // Act
            var actual = range.Contains(range);

            // Assert
            Assert.True(actual);
        }
Exemple #5
0
        public void WhenSameRange_ExclusiveShouldNotContainInclusive(RangeInclusivity r1Inc, RangeInclusivity r2Inc)
        {
            // Arrange
            var r1 = new Range <int>(1, 4, r1Inc);
            var r2 = new Range <int>(1, 4, r2Inc);

            // Act
            var actual = r1.Contains(r2);

            // Assert
            Assert.False(actual);
        }
Exemple #6
0
        public void WhenRangeDoesNotContainsRange_ContainsShouldBeFalse(
            int r1Min, int r1Max, RangeInclusivity r1Inc,
            int r2Min, int r2Max, RangeInclusivity r2Inc)
        {
            // Arrange
            var r1 = new Range <int>(r1Min, r1Max, r1Inc);
            var r2 = new Range <int>(r2Min, r2Max, r2Inc);

            // Act
            var actual = r1.Contains(r2);

            // Assert
            Assert.False(actual);
        }
Exemple #7
0
        public void WhenZeroWidthRange_ShouleBeExpected(RangeInclusivity inclusivitiy, bool expected)
        {
            // Arrange
            var r = new Range <int>()
            {
                Maximum     = 100,
                Minimum     = 100,
                Inclusivity = inclusivitiy
            };

            // Act
            var actual = r.Contains(100);

            // Assert
            Assert.Equal(expected, actual);
        }
Exemple #8
0
        public void WhenContainsSpecificInclusivity_ShouldBeExpected2(double value, RangeInclusivity inclusivitiy, bool expected)
        {
            // Arrange
            var r = new Range <double>()
            {
                Maximum     = 10.00,
                Minimum     = 1.00,
                Inclusivity = inclusivitiy
            };

            // Act
            var actual = r.Contains(value);

            // Assert
            Assert.Equal(expected, actual);
        }
Exemple #9
0
        public void WhenRangesCombined_ShouldBeIntersect(
            int aMin,
            int aMax,
            int bMin,
            int bMax,
            RangeInclusivity inclusivity)
        {
            // Arrange
            var aRange = new Range <int>(aMin, aMax, inclusivity);
            var bRange = new Range <int>(bMin, bMax, inclusivity);

            // Act
            var actual = aRange.TryIntersect(bRange, out _);

            // Assert
            Assert.False(actual);
        }
Exemple #10
0
        public void WhenIntersects_ShouldBeInsectingRange(
            int aMin,
            int aMax,
            int bMin,
            int bMax,
            RangeInclusivity inclusivity,
            bool expected)
        {
            // Arrange
            var aRange = new Range <int>(aMin, aMax, inclusivity);
            var bRange = new Range <int>(bMin, bMax, inclusivity);

            // Act
            var actual = aRange.Intersects(bRange);

            // Assert
            Assert.Equal(expected, actual);
        }
        public static IRange <TProperty> Range <TValue, TProperty>(
            this IEnumerable <TValue> enumerable,
            Func <TValue, TProperty> propertySelector,
            RangeInclusivity inclusivity = RangeInclusivity.InclusiveMinInclusiveMax) where TProperty : IComparable <TProperty>
        {
            var minmax = enumerable.Aggregate(
                new MutablePair <TProperty>(),
                (agg, val) => {
                var propertyValue = propertySelector(val);
                agg.Value1        = propertyValue.CompareTo(agg.Value1) < 0 ? propertyValue : agg.Value1;
                agg.Value2        = propertyValue.CompareTo(agg.Value2) > 0 ? propertyValue : agg.Value2;
                return(agg);
            }
                );

            return(new Range <TProperty>(
                       minmax.Value1,
                       minmax.Value2,
                       inclusivity
                       ));
        }
Exemple #12
0
        public Range(int minimum = 0, int maximum = 0, RangeInclusivity inclusivity = RangeInclusivity.AllInclusive)
        {
            this.SetValues(minimum, maximum);

            this.Inclusivity = inclusivity;
        }