Ejemplo n.º 1
0
        private void TestOverlaps(OverlapsInclude overlapsInclude, DateTime now)
        {
            //current   =>          |****|
            //1         => |****|
            //2         =>      |****|
            //3         =>           |**|
            //4         =>              |****|
            //5         =>                  |****|
            //6         =>     |***>|
            //7         =>               |<***|

            var current = DateTimeRange.Create(now.AddHours(1), now.AddHours(2));

            var dateTimeRange1 = DateTimeRange.Create(_mockNow.AddHours(0), _mockNow.AddHours(0.5));
            var dateTimeRange2 = DateTimeRange.Create(_mockNow.AddHours(0.5), _mockNow.AddHours(1.5));
            var dateTimeRange3 = DateTimeRange.Create(_mockNow.AddHours(1.2), _mockNow.AddHours(1.6));
            var dateTimeRange4 = DateTimeRange.Create(_mockNow.AddHours(1.6), _mockNow.AddHours(2.5));
            var dateTimeRange5 = DateTimeRange.Create(_mockNow.AddHours(2.5), _mockNow.AddHours(3));
            var dateTimeRange6 = DateTimeRange.Create(_mockNow.AddHours(0.5), _mockNow.AddHours(1));
            var dateTimeRange7 = DateTimeRange.Create(_mockNow.AddHours(2), _mockNow.AddHours(3));

            current.Overlaps(dateTimeRange1, overlapsInclude).ShouldFalse();
            current.Overlaps(dateTimeRange2, overlapsInclude).ShouldTrue();
            current.Overlaps(dateTimeRange3, overlapsInclude).ShouldTrue();
            current.Overlaps(dateTimeRange4, overlapsInclude).ShouldTrue();
            current.Overlaps(dateTimeRange5, overlapsInclude).ShouldFalse();
            if (overlapsInclude == OverlapsInclude.Begin || overlapsInclude == OverlapsInclude.Both)
            {
                current.Overlaps(dateTimeRange6, overlapsInclude).ShouldTrue();
            }
            else
            {
                current.Overlaps(dateTimeRange6, overlapsInclude).ShouldFalse();
            }


            if (overlapsInclude == OverlapsInclude.End || overlapsInclude == OverlapsInclude.Both)
            {
                current.Overlaps(dateTimeRange7, overlapsInclude).ShouldTrue();
            }
            else
            {
                current.Overlaps(dateTimeRange7, overlapsInclude).ShouldFalse();
            }
        }
Ejemplo n.º 2
0
        public static bool Overlaps <TSource>(this TSource dateTimeRange, DateTime begin, DateTime?end, OverlapsInclude overlapsInclude = OverlapsInclude.None) where TSource : IDateTimeRange
        {
            var endValue = end ?? DateTime.MaxValue;

            switch (overlapsInclude)
            {
            case OverlapsInclude.None:
                return(dateTimeRange.Begin < endValue && dateTimeRange.End > begin);

            case OverlapsInclude.Begin:
                return(dateTimeRange.Begin <= endValue && dateTimeRange.End > begin);

            case OverlapsInclude.End:
                return(dateTimeRange.Begin < endValue && dateTimeRange.End >= begin);

            case OverlapsInclude.Both:
                return(dateTimeRange.Begin <= endValue && dateTimeRange.End >= begin);

            default:
                throw new ArgumentOutOfRangeException(nameof(overlapsInclude), overlapsInclude, null);
            }
        }
Ejemplo n.º 3
0
 public static bool Overlaps <TSource>(this TSource dateTimeRange, IDateTimeRange another, OverlapsInclude overlapsInclude = OverlapsInclude.None) where TSource : IDateTimeRange
 {
     return(dateTimeRange.Overlaps(another.Begin, another.End, overlapsInclude));
 }
Ejemplo n.º 4
0
 public static IEnumerable <TSource> FilterOverlaps <TSource>(this IEnumerable <TSource> dateTimeRanges,
                                                              DateTime begin, DateTime?end, OverlapsInclude overlapsInclude = OverlapsInclude.None) where TSource : IDateTimeRange
 {
     return(dateTimeRanges.Where(x => x.Overlaps(begin, end)));
 }