public static RangeClusivity Combine(Clusivity min, Clusivity max)
        {
            switch (min)
            {
            case Clusivity.Exclusive:
                switch (max)
                {
                case Clusivity.Exclusive: return(RangeClusivity.Exclusive);

                case Clusivity.Inclusive: return(RangeClusivity.InclusiveMax);

                default: throw InvalidEnumArgument.CreateException(nameof(max), max);
                }

            case Clusivity.Inclusive:
                switch (max)
                {
                case Clusivity.Exclusive: return(RangeClusivity.InclusiveMin);

                case Clusivity.Inclusive: return(RangeClusivity.Inclusive);

                default: throw InvalidEnumArgument.CreateException(nameof(max), max);
                }

            default: throw InvalidEnumArgument.CreateException(nameof(min), min);
            }
        }
Пример #2
0
    public bool Contains(float value, Clusivity clusivity = Clusivity.Inclusive)
    {
        if (clusivity == Clusivity.Inclusive)
        {
            return(value >= minimum && value <= maximum);
        }

        return(value > minimum && value < maximum);
    }
Пример #3
0
 public ApproximationConstraint(
     object expectedValue,
     object threshold,
     Clusivity clusivity = Clusivity.Inclusive
     ) : this(
         expectedValue,
         threshold,
         clusivity,
         clusivity
         )
 {
 }
Пример #4
0
 public ApproximationConstraint(
     object expectedValue,
     object threshold,
     Clusivity minClusivity,
     Clusivity maxClusivity
     ) : base(
         (IComparable)Coercively.Subtract(expectedValue, threshold),
         (IComparable)Coercively.Add(expectedValue, threshold)
         )
 {
     ExpectedValue = expectedValue;
     Threshold     = threshold;
     MinValue      = Coercively.Subtract(ExpectedValue, Threshold);
     MaxValue      = Coercively.Add(ExpectedValue, Threshold);
     MinClusivity  = minClusivity;
     MaxClusivity  = maxClusivity;
 }
Пример #5
0
        public void ApproximationConstraint(
            [ValueSource(typeof(PrimitiveUtils), nameof(PrimitiveUtils.NumericTypes))]
            Type actualType,
            [ValueSource(typeof(PrimitiveUtils), nameof(PrimitiveUtils.NumericTypes))]
            Type expectedType,
            [ValueSource(typeof(PrimitiveUtils), nameof(PrimitiveUtils.NumericTypes))]
            Type thresholdType,
            [Values] Clusivity clusivity
            )
        {
            var exp = new ApproximationExpectation(actualType, expectedType, thresholdType);

            Console.WriteLine(exp);

            AssertAll.Of(
                () => Assert.That(exp.Actual, Is.Approximately(exp.Expected_ToPass(clusivity), exp.Threshold, clusivity), $"{nameof(exp.Expected_ToPass)}, {clusivity}"),
                () => Assert.That(exp.Actual, Is.Not.Approximately(exp.Expected_ToFail(clusivity), exp.Threshold, clusivity), $"{nameof(exp.Expected_ToFail)}, {clusivity}")
                );
        }
Пример #6
0
        public bool Includes(IRange <Instant> range, Clusivity clusivity = Clusivity.Exclusive)
        {
            switch (clusivity)
            {
            case Clusivity.Inclusive:
                return((Start <= range.Start) && (range.End <= End));

            case Clusivity.Exclusive:
                return((Start < range.Start) && (range.End < End));

            case Clusivity.LowerInclusive:
                return((Start <= range.Start) && (range.End < End));

            case Clusivity.UpperInclusive:
                return((Start < range.Start) && (range.End <= End));

            default:
                throw new ArgumentOutOfRangeException(nameof(clusivity), clusivity, null);
            }
        }
Пример #7
0
        public bool Includes(Instant value, Clusivity clusivity = Clusivity.Exclusive)
        {
            switch (clusivity)
            {
            case Clusivity.Inclusive:
                return((Start <= value) && (value <= End));

            case Clusivity.Exclusive:
                return((Start < value) && (value < End));

            case Clusivity.LowerInclusive:
                return((Start <= value) && (value < End));

            case Clusivity.UpperInclusive:
                return((Start < value) && (value <= End));

            default:
                throw new ArgumentOutOfRangeException(nameof(clusivity), clusivity, null);
            }
        }
Пример #8
0
 public static bool IsInRange(this sbyte value, sbyte min, sbyte max, Clusivity clusivity       = Clusivity.Inclusive) => value.IsBetween(min, max, clusivity);
Пример #9
0
 public static bool IsInRange(this ulong value, ulong min, ulong max, Clusivity clusivity       = Clusivity.Inclusive) => value.IsBetween(min, max, clusivity);
Пример #10
0
 public static bool IsInRange(this decimal value, decimal min, decimal max, Clusivity clusivity = Clusivity.Inclusive) => value.IsBetween(min, max, clusivity);
Пример #11
0
 public static bool IsInRange(this float value, float min, float max, Clusivity clusivity       = Clusivity.Inclusive) => value.IsBetween(min, max, clusivity);
Пример #12
0
 public ApproximationConstraint(DateTime expectedValue, TimeSpan?threshold = default, Clusivity clusivity = Clusivity.Inclusive) : this((object)expectedValue, threshold)
 {
 }
Пример #13
0
 public static string MaxSymbol(this Clusivity clusivity)
 {
     return(clusivity == Clusivity.Exclusive ? ")" : "]");
 }
Пример #14
0
 public static string FormatRange(object min, Clusivity minClusivity, object max, Clusivity maxClusivity)
 {
     return($"{minClusivity.MinSymbol()}{min}, {max}{maxClusivity.MaxSymbol()}");
 }
Пример #15
0
 public static ApproximationConstraint Approximately(DateTime expectedValue, TimeSpan threshold, Clusivity clusivity = Clusivity.Inclusive)
 {
     return(new ApproximationConstraint(expectedValue, threshold));
 }
Пример #16
0
 public static ApproximationConstraint Approximately(this ConstraintExpression constraintExpression, object expectedValue, object threshold, Clusivity clusivity = Clusivity.Inclusive)
 {
     return(constraintExpression.Append(new ApproximationConstraint(expectedValue, threshold, clusivity)) as ApproximationConstraint);
 }
Пример #17
0
 public static bool IsBetween(this int value, int min, int max, Clusivity clusivity             = Clusivity.Inclusive) => clusivity == Clusivity.Inclusive ? value >= min && value <= max : clusivity == Clusivity.Exclusive ? value > min && value < max : throw BEnum.InvalidEnumArgumentException(nameof(clusivity), clusivity);
Пример #18
0
            public object Expected_ToFail(Clusivity clusivity)
            {
                var value = _actual + (clusivity == Clusivity.Inclusive ? _threshold * 1.5 : _threshold);

                return(Convert.ChangeType(value, Expected_Type));
            }
Пример #19
0
 public Range(T min, T max, Clusivity minBounds, Clusivity maxBounds)
     : this(min, max, RangeClusivityUtilities.Combine(minBounds, maxBounds))
 {
 }
Пример #20
0
 public static Range <T> New <T>(T min, T max, Clusivity minBounds, Clusivity maxBounds)
     where T : IComparable <T>, IEquatable <T> => new Range <T>(min, max, minBounds, maxBounds);
Пример #21
0
 public bool Includes(ZonedDateTime value, Clusivity clusivity = Clusivity.Exclusive)
 {
     return(Includes(value.ToInstant(), clusivity));
 }
Пример #22
0
 public static ApproximationConstraint CloseTo(object expectedValue, object threshold, Clusivity clusivity = Clusivity.Inclusive)
 {
     return(Approximately(expectedValue, threshold, clusivity));
 }
Пример #23
0
 public bool Includes(IRange <ZonedDateTime> range, Clusivity clusivity = Clusivity.Exclusive)
 {
     return(Includes(new InstantRange(range.Start.ToInstant(), range.End.ToInstant()), clusivity));
 }
Пример #24
0
 public static ApproximationConstraint CloseTo(DateTime expectedValue, TimeSpan threshold, Clusivity clusivity = Clusivity.Inclusive)
 {
     return(Approximately(expectedValue, threshold, clusivity));
 }
Пример #25
0
 public static string MinSymbol(this Clusivity clusivity)
 {
     return(clusivity == Clusivity.Exclusive ? "(" : "[");
 }