예제 #1
0
        public void Constructor_04()
        {
            var now = DateTime.Now;
            var c   = new DateRangeCollection(new DateRange(now.AddHours(3), now.AddHours(5)));

            Assert.Single(c);
        }
예제 #2
0
        public void IsSingleChain_Not_Allowed_When_There_Are_No_Ranges()
        {
            var    collection = new DateRangeCollection();
            Action action     = () => collection.IsSingleChain();

            action.Should().Throw <InvalidOperationException>();
        }
예제 #3
0
        public void Must_Implement_IEnumerable()
        {
            var one    = DateRange.Today();
            var second = DateRange.Today();

            var sut = new DateRangeCollection(one, second);

            sut.ToList().Should().BeEquivalentTo(new[] { one, second });
        }
예제 #4
0
        public void Sum_01()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddHours(1), now.AddHours(3)),
                new DateRange(now.AddHours(5), now.AddHours(7)));

            Assert.Equal(new TimeSpan(4, 0, 0), c1.Size);
        }
예제 #5
0
        [DataRow(2017, 2017, 2018, false)] // multiple ranges that are invalid
        public void Contains_Returns_The_Right_Result_For_A_Date(int year1, int year2, int yearDate, bool result)
        {
            var sut = new DateRangeCollection
            {
                DateRange.Year(year1),
                DateRange.Year(year2)
            };

            sut.IsInRange(new DateTime(yearDate, 6, 6)).Should().Be(result);
        }
예제 #6
0
        public void Collection_Initialization_Is_Possible()
        {
            var sut = new DateRangeCollection
            {
                DateRange.Today(),
                DateRange.Today()
            };

            sut.Count.Should().Be(2);
        }
예제 #7
0
        public void Constructor_02()
        {
            var now = DateTime.Now;
            var c   = new DateRangeCollection(
                new DateRange(now.AddHours(3), now.AddHours(5)),
                new DateRange(now.AddHours(4), now.AddHours(7)));

            Assert.Single(c);
            Assert.Equal(now.AddHours(3), c.First().Start);
            Assert.Equal(now.AddHours(7), c.First().End);
        }
예제 #8
0
        public void Chain_With_Unbounded_Ranges_Creates_Always_Single_Chain()
        {
            var collection = new DateRangeCollection
            {
                new DateRange(null, new DateTime(2017, 12, 31)),
                new DateRange(new DateTime(2018, 1, 1), null),
            };

            collection.IsSingleChain().Should().BeTrue();
            collection.GetSingleChain().Should().Be(DateRange.Always);
        }
예제 #9
0
        public void IsChain_With_Non_Adjacent_Ranges_Should_Be_False()
        {
            var collection = new DateRangeCollection
            {
                DateRange.Year(2016),
                DateRange.Year(2018),
                DateRange.Year(2019),
            };

            collection.IsSingleChain().Should().BeFalse();
            collection.GetSingleChain().IsEmpty.Should().BeTrue();
        }
예제 #10
0
        public void IsChain_With_Adjacent_Ranges_Should_Be_True()
        {
            var collection = new DateRangeCollection
            {
                DateRange.Year(2016),
                DateRange.Year(2018),
                DateRange.Year(2017),
            };

            collection.IsSingleChain().Should().BeTrue();
            collection.GetSingleChain().Should().Be(DateRange.Years(2016, 3));
        }
예제 #11
0
        public void Intersection_06()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddMinutes(5), now.AddMinutes(10)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddMinutes(12), now.AddMinutes(20)),
                new DateRange(now.AddMinutes(22), now.AddMinutes(30)));
            var result = c1.Intersection(c2);

            Assert.Empty(result);
        }
예제 #12
0
        public void Constructor_01()
        {
            var now = DateTime.Now;
            var c   = new DateRangeCollection(
                new DateRange(now.AddHours(1), now.AddHours(2)),
                new DateRange(now.AddHours(3), now.AddHours(4)));

            Assert.Equal(2, c.Count);
            Assert.Equal(now.AddHours(1), c.First().Start);
            Assert.Equal(now.AddHours(2), c.First().End);
            Assert.Equal(now.AddHours(3), c.Last().Start);
            Assert.Equal(now.AddHours(4), c.Last().End);
        }
예제 #13
0
        public void Union_04()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddHours(1), now.AddHours(40)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddHours(2), now.AddHours(4)),
                new DateRange(now.AddHours(5), now.AddHours(6)),
                new DateRange(now.AddHours(8), now.AddHours(10)));
            var result = c1.Union(c2);

            Assert.Single(result);
            Assert.Equal(now.AddHours(1), result.First().Start);
            Assert.Equal(now.AddHours(40), result.First().End);
        }
예제 #14
0
        [DataRow("2018-01-01", "2018-12-31", "2019-06-01", "2019-06-30", false)] // bounded not overlapping dates
        public void IsOverlapping_Returns_The_Right_Result(string start1, string end1, string start2, string end2, bool result)
        {
            var s1 = start1 == null ? (DateTime?)null : DateTime.Parse(start1);
            var e1 = end1 == null ? (DateTime?)null : DateTime.Parse(end1);
            var s2 = start2 == null ? (DateTime?)null : DateTime.Parse(start2);
            var e2 = end2 == null ? (DateTime?)null : DateTime.Parse(end2);

            var sut = new DateRangeCollection
            {
                new DateRange(s1, e1),
                new DateRange(s2, e2)
            };

            sut.IsOverlapping().Should().Be(result);
        }
예제 #15
0
        public void Intersection_01()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddHours(1), now.AddHours(3)),
                new DateRange(now.AddHours(5), now.AddHours(7)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddHours(6), now.AddHours(11)),
                new DateRange(now.AddHours(13), now.AddHours(15)));
            var result = c1.Intersection(c2);

            Assert.Single(result);
            Assert.Equal(now.AddHours(6), result.First().Start);
            Assert.Equal(now.AddHours(7), result.First().End);
        }
예제 #16
0
        public void Intersection_05()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddMinutes(5), now.AddMinutes(50)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddMinutes(2), now.AddMinutes(10)),
                new DateRange(now.AddMinutes(12), now.AddMinutes(20)));
            var result = c1.Intersection(c2);

            Assert.Equal(2, result.Count);
            Assert.Equal(now.AddMinutes(5), result[0].Start);
            Assert.Equal(now.AddMinutes(10), result[0].End);
            Assert.Equal(now.AddMinutes(12), result[1].Start);
            Assert.Equal(now.AddMinutes(20), result[1].End);
        }
예제 #17
0
        public void IsInRangeIndexed_Returns_The_First_Index_Of_The_Range_That_Contains_The_Date()
        {
            var collection = new DateRangeCollection
            {
                DateRange.Year(2016),
                DateRange.Year(2017),
                DateRange.Year(2018),
                DateRange.Years(2018, 2),
                DateRange.Day(new DateTime(2019, 1, 1)),
            };

            collection.InRangeIndexed(new DateTime(2016, 6, 6)).Should().Be(0);
            collection.InRangeIndexed(new DateTime(2018, 6, 6)).Should().Be(2);
            collection.InRangeIndexed(new DateTime(2019, 1, 1)).Should().Be(3);
            collection.InRangeIndexed(new DateTime(2020, 1, 2)).Should().Be(-1);
        }
예제 #18
0
        public void Intersection_02()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddHours(1), now.AddHours(4)),
                new DateRange(now.AddHours(5), now.AddHours(8)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddHours(2), now.AddHours(3)),
                new DateRange(now.AddHours(6), now.AddHours(7)));
            var result = c1.Intersection(c2);

            Assert.Equal(2, result.Count);
            Assert.Equal(now.AddHours(2), result[0].Start);
            Assert.Equal(now.AddHours(3), result[0].End);
            Assert.Equal(now.AddHours(6), result[1].Start);
            Assert.Equal(now.AddHours(7), result[1].End);
        }
예제 #19
0
        public void Intersection_07()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddMinutes(1), now.AddMinutes(10)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddMinutes(2), now.AddMinutes(3)),
                new DateRange(now.AddMinutes(4), now.AddMinutes(5)),
                new DateRange(now.AddMinutes(6), now.AddMinutes(7)));
            var result = c2.Intersection(c1);

            Assert.Equal(3, result.Count);
            Assert.Equal(now.AddMinutes(2), result[0].Start);
            Assert.Equal(now.AddMinutes(3), result[0].End);
            Assert.Equal(now.AddMinutes(4), result[1].Start);
            Assert.Equal(now.AddMinutes(5), result[1].End);
            Assert.Equal(now.AddMinutes(6), result[2].Start);
            Assert.Equal(now.AddMinutes(7), result[2].End);
        }
예제 #20
0
        public void Inverse_02()
        {
            var now = DateTime.Now;
            var c   = new DateRangeCollection(
                new DateRange(now.AddMinutes(12), now.AddMinutes(20)),
                new DateRange(now.AddMinutes(22), now.AddMinutes(30)));
            var result = c.Inverse();

            Assert.Equal(3, result.Count);
            Assert.Equal(now.AddMinutes(20), result[1].Start);
            Assert.Equal(now.AddMinutes(22), result[1].End);
            var result2 = result.Inverse();

            Assert.Equal(2, result2.Count);
            Assert.Equal(now.AddMinutes(12), result2[0].Start);
            Assert.Equal(now.AddMinutes(20), result2[0].End);
            Assert.Equal(now.AddMinutes(22), result2[1].Start);
            Assert.Equal(now.AddMinutes(30), result2[1].End);
        }
예제 #21
0
        public void Union_02()
        {
            var now = DateTime.Now;
            var c1  = new DateRangeCollection(
                new DateRange(now.AddHours(1), now.AddHours(6)),
                new DateRange(now.AddHours(5), now.AddHours(7)));
            var c2 = new DateRangeCollection(
                new DateRange(now.AddHours(9), now.AddHours(11)),
                new DateRange(now.AddHours(13), now.AddHours(15)));
            var result = c1.Union(c2);

            Assert.Equal(3, result.Count);
            Assert.Equal(now.AddHours(1), result.First().Start);
            Assert.Equal(now.AddHours(7), result.First().End);
            Assert.Equal(now.AddHours(9), result[1].Start);
            Assert.Equal(now.AddHours(11), result[1].End);
            Assert.Equal(now.AddHours(13), result[2].Start);
            Assert.Equal(now.AddHours(15), result[2].End);
        }
예제 #22
0
        public void Ordered_Collection()
        {
            var collection = new DateRangeCollection
            {
                DateRange.Always,
                DateRange.Year(2018),
                DateRange.Year(2017),
                DateRange.Years(2018, 2),
                DateRange.Day(new DateTime(2018, 1, 1)),
                DateRange.Days(new DateTime(2018, 1, 1), 2),
                DateRange.Never
            };

            var ordered = collection.Ordered();

            ordered[0].Should().Be(DateRange.Never);
            ordered[1].Should().Be(DateRange.Always);
            ordered[2].Should().Be(DateRange.Year(2017));
            ordered[3].Should().Be(DateRange.Day(new DateTime(2018, 1, 1)));
            ordered[4].Should().Be(DateRange.Days(new DateTime(2018, 1, 1), 2));
            ordered[5].Should().Be(DateRange.Year(2018));
            ordered[6].Should().Be(DateRange.Years(2018, 2));
        }
예제 #23
0
        public void Create_With_Multiple_DateRanges()
        {
            var sut = new DateRangeCollection(DateRange.Today(), DateRange.Today());

            sut.Count.Should().Be(2);
        }
예제 #24
0
        public void GetSingleChain_Returns_Never_When_There_Are_No_Ranges_Specified()
        {
            var collection = new DateRangeCollection();

            collection.GetSingleChain().IsEmpty.Should().BeTrue();
        }
예제 #25
0
        public void Create_With_A_Single_DateRange()
        {
            var sut = new DateRangeCollection(DateRange.Today());

            sut.Count.Should().Be(1);
        }