public async Task Get_events_from_time_range_with_only_end_in_range()
        {
            // Act

            var now = DateTime.Now;

            var rangeEnd = new ExactDateInfo(
                Era.AnnoDomini,
                now.Year + 1,
                1,
                1,
                1
                );

            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.AnnoDomini(2020, 2, 1, 0),
                    rangeEnd
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.Count.ShouldBe(2);

            eventsInTimeRange.ShouldContain(e => e.Description == "C");
            eventsInTimeRange.ShouldContain(e => e.Description == "D");
        }
        public void One_year_tick_interval()
        {
            var tickInterval = GetFirstTickIntervalWithGreaterDuration(Duration.Zero.AddMonths(8));

            tickInterval.ShouldNotBeNull();

            var d1 = ExactDateInfo.AnnoDomini(100, 1, 1, 0);
            var d2 = ExactDateInfo.AnnoDomini(102, 1, 1, 0);

            var ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(d1);
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(101, 1, 1, 0));
            ticks[2].Date.ShouldBe(d2);

            d1 = ExactDateInfo.AnnoDomini(100, 3, 3, 5);
            d2 = ExactDateInfo.AnnoDomini(104, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(4);

            ticks[0].Date.ShouldBe(ExactDateInfo.AnnoDomini(101, 1, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(102, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.AnnoDomini(103, 1, 1, 0));
            ticks[3].Date.ShouldBe(ExactDateInfo.AnnoDomini(104, 1, 1, 0));

            d1 = ExactDateInfo.BeforeChrist(100, 3, 3, 5);
            d2 = ExactDateInfo.BeforeChrist(97, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(ExactDateInfo.BeforeChrist(99, 1, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.BeforeChrist(98, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.BeforeChrist(97, 1, 1, 0));

            d1 = ExactDateInfo.BeforeChrist(2, 3, 3, 5);
            d2 = ExactDateInfo.AnnoDomini(2, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(ExactDateInfo.BeforeChrist(1, 1, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(1, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.AnnoDomini(2, 1, 1, 0));

            d1 = ExactDateInfo.AnnoDomini(1, 3, 3, 5);
            d2 = ExactDateInfo.AnnoDomini(2, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(1);

            ticks[0].Date.ShouldBe(ExactDateInfo.AnnoDomini(2, 1, 1, 0));
        }
        public void One_hour_tick_interval()
        {
            var tickInterval = GetFirstTickIntervalWithGreaterDuration(Duration.Zero);

            tickInterval.ShouldNotBeNull();

            var d1 = ExactDateInfo.AnnoDomini(100, 2, 3, 12);
            var d2 = ExactDateInfo.AnnoDomini(100, 2, 3, 14);

            var ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(d1);
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(100, 2, 3, 13));
            ticks[2].Date.ShouldBe(d2);

            d1 = ExactDateInfo.BeforeChrist(100, 2, 3, 12);
            d2 = ExactDateInfo.BeforeChrist(100, 2, 3, 14);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(d1);
            ticks[1].Date.ShouldBe(ExactDateInfo.BeforeChrist(100, 2, 3, 13));
            ticks[2].Date.ShouldBe(d2);
        }
        public void Create_universe_start_date()
        {
            var dateInfo = new ExactDateInfo(Era.BeforeChrist, 13750000000L, 1, 1, 0);

            dateInfo.Era.ShouldBe(Era.BeforeChrist);
            dateInfo.Year.ShouldBe(13750000000L);
            dateInfo.Month.ShouldBe(1);
            dateInfo.Day.ShouldBe(1);
            dateInfo.Hour.ShouldBe(0);
        }
        public void Several_years_tick_interval(long years)
        {
            var tickInterval = GetFirstTickIntervalWithGreaterDuration(Duration.Zero.AddYears(years).AddMonths(-1));

            tickInterval.ShouldNotBeNull();

            var d1 = ExactDateInfo.AnnoDomini(years, 1, 1, 0);
            var d2 = ExactDateInfo.AnnoDomini(3 * years, 1, 1, 0);

            var ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(d1);
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(years * 2, 1, 1, 0));
            ticks[2].Date.ShouldBe(d2);

            d1 = ExactDateInfo.AnnoDomini(years, 3, 3, 5);
            d2 = ExactDateInfo.AnnoDomini(years * 4, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(ExactDateInfo.AnnoDomini(years * 2, 1, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(years * 3, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.AnnoDomini(years * 4, 1, 1, 0));

            d1 = ExactDateInfo.BeforeChrist(years * 4, 3, 3, 5);
            d2 = ExactDateInfo.BeforeChrist(years * 1, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(ExactDateInfo.BeforeChrist(years * 3, 1, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.BeforeChrist(years * 2, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.BeforeChrist(years * 1, 1, 1, 0));

            d1 = ExactDateInfo.BeforeChrist(years * 2, 3, 3, 5);
            d2 = ExactDateInfo.AnnoDomini(years * 1, 8, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(ExactDateInfo.BeforeChrist(years * 1, 1, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(1, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.AnnoDomini(years * 1, 1, 1, 0));
        }
Exemple #6
0
        public void Scaling_down_one_month()
        {
            var timeRange = new TimeRange(
                ExactDateInfo.AnnoDomini(100, 1, 1, 0),
                ExactDateInfo.AnnoDomini(100, 7, 1, 0)
                );

            var scaledTimeRange = timeRange.ScaleDown(Duration.Zero.AddDays(20));

            scaledTimeRange.ShouldNotBeNull();

            scaledTimeRange.Start.ShouldBe(timeRange.Middle - Duration.Zero.AddDays(3));
            scaledTimeRange.End.ShouldBe(timeRange.Middle + Duration.Zero.AddDays(3));
            scaledTimeRange.Middle.ShouldBe(timeRange.Middle);
        }
Exemple #7
0
        public void Scaling_down_twelve_hours()
        {
            var timeRange = new TimeRange(
                ExactDateInfo.AnnoDomini(100, 1, 1, 0),
                ExactDateInfo.AnnoDomini(100, 1, 2, 0)
                );

            var scaledTimeRange = timeRange.ScaleDown(Duration.Zero.AddHours(4));

            scaledTimeRange.ShouldNotBeNull();

            scaledTimeRange.Start.ShouldBe(timeRange.Middle - Duration.Zero.AddHours(1));
            scaledTimeRange.End.ShouldBe(timeRange.Middle + Duration.Zero.AddHours(1));
            scaledTimeRange.Middle.ShouldBe(timeRange.Middle);
        }
Exemple #8
0
        public void Scaling_down_one_hour_should_do_nothing()
        {
            var timeRange = new TimeRange(
                ExactDateInfo.AnnoDomini(100, 1, 1, 0),
                ExactDateInfo.AnnoDomini(100, 1, 1, 10)
                );

            var scaledTimeRange = timeRange.ScaleDown(Duration.Zero.AddHours(1));

            scaledTimeRange.ShouldNotBeNull();

            scaledTimeRange.Start.ShouldBe(timeRange.Start);
            scaledTimeRange.End.ShouldBe(timeRange.End);
            scaledTimeRange.Middle.ShouldBe(timeRange.Middle);
        }
Exemple #9
0
        public void Scaling_up_hours()
        {
            var timeRange = new TimeRange(
                ExactDateInfo.AnnoDomini(100, 1, 1, 0),
                ExactDateInfo.AnnoDomini(100, 1, 1, 10)
                );

            var scaledTimeRange = timeRange.ScaleUp(Duration.Zero.AddHours(1));

            scaledTimeRange.ShouldNotBeNull();

            scaledTimeRange.Start.ShouldBe(timeRange.Start - Duration.Zero.AddHours(55));
            scaledTimeRange.End.ShouldBe(timeRange.End + Duration.Zero.AddHours(55));
            scaledTimeRange.Middle.ShouldBe(timeRange.Middle);
        }
Exemple #10
0
        public void Scaling_up_one_year()
        {
            var timeRange = new TimeRange(
                ExactDateInfo.AnnoDomini(100, 1, 1, 0),
                ExactDateInfo.AnnoDomini(106, 1, 1, 0)
                );

            var scaledTimeRange = timeRange.ScaleUp(Duration.Zero.AddMonths(10));

            scaledTimeRange.ShouldNotBeNull();

            scaledTimeRange.Start.ShouldBe(timeRange.Start - Duration.Zero.AddYears(27));
            scaledTimeRange.End.ShouldBe(timeRange.End + Duration.Zero.AddYears(27));
            scaledTimeRange.Middle.ShouldBe(timeRange.Middle);
        }
        public async Task Get_events_from_time_range_with_no_events()
        {
            // Act

            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.AnnoDomini(3000, 1, 1, 0),
                    ExactDateInfo.AnnoDomini(4000, 1, 1, 0)
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.ShouldBeEmpty();
        }
        public async Task Get_events_from_time_range_with_only_start_in_range()
        {
            // Act

            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.BeforeChrist(20, 1, 1, 0),
                    ExactDateInfo.AnnoDomini(1, 1, 1, 0)
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.Count.ShouldBe(2);

            eventsInTimeRange.ShouldContain(e => e.Description == "A");
            eventsInTimeRange.ShouldContain(e => e.Description == "B");
        }
Exemple #13
0
        public async Task Get_events_when_there_are_no_events_that_meet_both_conditions()
        {
            // Act
            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.BeforeChrist(20, 1, 1, 0),
                    ExactDateInfo.BeforeChrist(20, 10, 1, 0)
                    ).And(
                    InRange(
                        ExactDateInfo.BeforeChrist(100, 2, 3, 1),
                        ExactDateInfo.BeforeChrist(100, 2, 3, 21)
                        )
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.ShouldBeEmpty();
        }
Exemple #14
0
        public async Task Get_events_when_there_are_events_that_meet_both_conditions()
        {
            // Act
            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.BeforeChrist(20, 1, 1, 0),
                    ExactDateInfo.BeforeChrist(20, 10, 1, 0)
                    ).Or(
                    InRange(
                        ExactDateInfo.BeforeChrist(30, 1, 1, 0),
                        ExactDateInfo.BeforeChrist(10, 1, 1, 0)
                        )
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.Count.ShouldBe(1);
            eventsInTimeRange[0].Description.ShouldBe("B");
        }
        public async Task Get_events_from_time_range_with_full_events()
        {
            // Act

            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.BeforeChrist(20, 1, 1, 0),
                    ExactDateInfo.BeforeChrist(20, 12, 1, 0)
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.Count.ShouldBe(1);

            var @event = eventsInTimeRange[0];

            @event.ShouldNotBeNull();
            @event.Description.ShouldBe("B");
        }
Exemple #16
0
        public async Task Get_events_when_there_are_no_events_that_meet_both_conditions()
        {
            // Act
            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                InRange(
                    ExactDateInfo.BeforeChrist(20, 1, 1, 0),
                    ExactDateInfo.BeforeChrist(20, 10, 1, 0)
                    ).Or(
                    InRange(
                        ExactDateInfo.BeforeChrist(100, 2, 3, 1),
                        ExactDateInfo.BeforeChrist(100, 2, 3, 21)
                        )
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.Count.ShouldBe(2);
            eventsInTimeRange.ShouldContain(e => e.Description == "B");
            eventsInTimeRange.ShouldContain(e => e.Description == "E");
        }
        public void One_month_tick_interval()
        {
            var tickInterval = GetFirstTickIntervalWithGreaterDuration(Duration.Zero.AddDays(20));

            tickInterval.ShouldNotBeNull();

            var d1 = ExactDateInfo.AnnoDomini(100, 2, 1, 0);
            var d2 = ExactDateInfo.AnnoDomini(100, 5, 1, 0);

            var ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(4);

            ticks[0].Date.ShouldBe(d1);
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(100, 3, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.AnnoDomini(100, 4, 1, 0));
            ticks[3].Date.ShouldBe(d2);

            d1 = ExactDateInfo.AnnoDomini(100, 3, 3, 5);
            d2 = ExactDateInfo.AnnoDomini(100, 5, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(2);

            ticks[0].Date.ShouldBe(ExactDateInfo.AnnoDomini(100, 4, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.AnnoDomini(100, 5, 1, 0));

            d1 = ExactDateInfo.BeforeChrist(100, 11, 3, 5);
            d2 = ExactDateInfo.BeforeChrist(99, 2, 5, 17);

            ticks = tickInterval.GetTicksBetween(d1, d2).ToArray();

            ticks.Length.ShouldBe(3);

            ticks[0].Date.ShouldBe(ExactDateInfo.BeforeChrist(100, 12, 1, 0));
            ticks[1].Date.ShouldBe(ExactDateInfo.BeforeChrist(99, 1, 1, 0));
            ticks[2].Date.ShouldBe(ExactDateInfo.BeforeChrist(99, 2, 1, 0));
        }
        public async Task Revert_specification()
        {
            // Act

            var eventsInTimeRange = await _fixture.EventsRepo.GetEventsAsync(
                Not(
                    InRange(
                        ExactDateInfo.BeforeChrist(20, 1, 1, 0),
                        ExactDateInfo.AnnoDomini(1, 1, 1, 0)
                        )
                    )
                );

            // Assert

            eventsInTimeRange.ShouldNotBeNull();
            eventsInTimeRange.Count.ShouldBe(3);

            eventsInTimeRange.ShouldContain(e => e.Description == "C");
            eventsInTimeRange.ShouldContain(e => e.Description == "D");
            eventsInTimeRange.ShouldContain(e => e.Description == "E");
        }
        public static IEnumerable <object[]> AddDurationToDateData()
        {
            yield return(new object[]
            {
                ExactDateInfo.AnnoDomini(100, 1, 1, 0),
                Duration.Zero.AddYears(50),
                ExactDateInfo.AnnoDomini(150, 1, 1, 0)
            });

            yield return(new object[]
            {
                ExactDateInfo.BeforeChrist(26, 1, 1, 0),
                Duration.Zero.AddYears(50),
                ExactDateInfo.AnnoDomini(25, 1, 1, 0)
            });

            yield return(new object[]
            {
                ExactDateInfo.AnnoDomini(10, 1, 1, 0),
                Duration.Zero.AddYears(-50),
                ExactDateInfo.BeforeChrist(41, 1, 1, 0)
            });
        }
Exemple #20
0
        public static IEnumerable <object[]> DurationToDateData()
        {
            yield return(new object[]
            {
                Duration.Zero,
                ExactDateInfo.AnnoDomini(1, 1, 1, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddYears(5),
                ExactDateInfo.AnnoDomini(6, 1, 1, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddMonths(3),
                ExactDateInfo.AnnoDomini(1, 4, 1, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddDays(13),
                ExactDateInfo.AnnoDomini(1, 1, 14, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddHours(20),
                ExactDateInfo.AnnoDomini(1, 1, 1, 20)
            });

            yield return(new object[]
            {
                Duration.Zero
                .AddYears(1000000 - 1)
                .AddMonths(12 - 1)
                .AddDays(31 - 1)
                .AddHours(23),
                ExactDateInfo.AnnoDomini(1000000, 12, 31, 23)
            });

            yield return(new object[]
            {
                Duration.Zero.AddYears(-1),
                ExactDateInfo.BeforeChrist(1, 1, 1, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddYears(-5).AddMonths(4),
                ExactDateInfo.BeforeChrist(5, 5, 1, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddYears(-5).AddDays(12),
                ExactDateInfo.BeforeChrist(5, 1, 13, 0)
            });

            yield return(new object[]
            {
                Duration.Zero.AddYears(-5).AddHours(21),
                ExactDateInfo.BeforeChrist(5, 1, 1, 21)
            });

            yield return(new object[]
            {
                Duration.Zero
                .AddYears(-5000000)
                .AddMonths(12 - 1)
                .AddDays(31 - 1)
                .AddHours(23),
                ExactDateInfo.BeforeChrist(5000000, 12, 31, 23)
            });

            yield return(new object[]
            {
                Duration.Zero
                .AddYears(1979)
                .AddMonths(1)
                .AddDays(29)
                .AddHours(1),
                ExactDateInfo.AnnoDomini(1980, 3, 1, 1)
            });
        }
Exemple #21
0
 public void Convert_duration_to_date_after_Christ_birth(
     Duration duration, ExactDateInfo date
     )
 {
     duration.GetDateAfterChristBirth().ShouldBe(date);
 }
 public void Subtract_duration_from_date(ExactDateInfo date, Duration duration, ExactDateInfo expectedResult)
 {
     (date - duration).ShouldBe(expectedResult);
 }
 public void Add_duration_to_date(ExactDateInfo date, Duration duration, ExactDateInfo expectedResult)
 {
     (date + duration).ShouldBe(expectedResult);
 }
 public void Compare_dates_in_different_eras()
 {
     ExactDateInfo.BeforeChrist(100, 1, 1, 0).ShouldBeLessThan(ExactDateInfo.AnnoDomini(100, 1, 1, 0));
     ExactDateInfo.BeforeChrist(200, 1, 1, 0).ShouldBeLessThan(ExactDateInfo.AnnoDomini(100, 1, 1, 0));
 }
 public void Compare_dates_with_different_years_and_months()
 {
     ExactDateInfo.AnnoDomini(100, 2, 1, 0).ShouldBeLessThan(ExactDateInfo.AnnoDomini(100, 3, 1, 0));
     ExactDateInfo.BeforeChrist(200, 2, 1, 0).ShouldBeLessThan(ExactDateInfo.BeforeChrist(200, 3, 1, 0));
 }
 /// <summary>
 /// Return time range specification.
 /// </summary>
 /// <param name="rangeStart">Start of time range.</param>
 /// <param name="rangeEnd">End of time range.</param>
 public static EventsSpecification InRange(ExactDateInfo rangeStart, ExactDateInfo rangeEnd)
 => new TimeRangeEventsSpecification(new TimeRange(rangeStart, rangeEnd));