public void BclEquivalence( [ValueSource(typeof(BclCalendars), nameof(BclCalendars.MappedCalendars))] Calendar calendar, [ValueSource(nameof(CalendarWeekRules))] CalendarWeekRule bclRule, [ValueSource(nameof(BclDaysOfWeek))] DayOfWeek firstDayOfWeek) { var nodaCalendar = BclCalendars.CalendarSystemForCalendar(calendar); var nodaRule = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek); var startYear = new LocalDate(2016, 1, 1).WithCalendar(nodaCalendar).Year; for (int year = startYear; year < startYear + 30; year++) { var startDate = new LocalDate(year, 1, 1, nodaCalendar).PlusDays(-15); for (int day = 0; day < 30; day++) { var date = startDate.PlusDays(day); var bclDate = date.ToDateTimeUnspecified(); var bclWeek = calendar.GetWeekOfYear(bclDate, bclRule, firstDayOfWeek); // Weird... the BCL doesn't have a way of finding out which week-year we're in. // We're starting at "start of year - 15 days", so a "small" week-of-year // value means we're in "year", whereas a "large" week-of-year value means // we're in the "year-1". var bclWeekYear = bclWeek < 10 ? year : year - 1; Assert.AreEqual(bclWeek, nodaRule.GetWeekOfWeekYear(date), "Date: {0}", date); Assert.AreEqual(bclWeekYear, nodaRule.GetWeekYear(date), "Date: {0}", date); Assert.AreEqual(date, nodaRule.GetLocalDate(bclWeekYear, bclWeek, date.IsoDayOfWeek, nodaCalendar), "Week-year:{0}; Week: {1}; Day: {2}", bclWeekYear, bclWeek, date.IsoDayOfWeek); } } }
public void GetLocalDate_Invalid( CalendarWeekRule bclRule, DayOfWeek firstDayOfWeek, int weekYear, int week, IsoDayOfWeek dayOfWeek) { var nodaRule = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek); Assert.Throws <ArgumentOutOfRangeException>(() => nodaRule.GetLocalDate(weekYear, week, dayOfWeek)); }
public void RoundtripLastDayBcl( [ValueSource(nameof(CalendarWeekRules))] CalendarWeekRule bclRule, [ValueSource(nameof(BclDaysOfWeek))] DayOfWeek firstDayOfWeek) { var rule = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek); var date = new LocalDate(9999, 12, 31); Assert.AreEqual(date, rule.GetLocalDate( rule.GetWeekYear(date), rule.GetWeekOfWeekYear(date), date.IsoDayOfWeek)); }
// We might want to add more tests here... public void NonMondayFirstDayOfWeek(int minDaysInFirstWeek, IsoDayOfWeek firstDayOfWeek, int weekYear, int week, IsoDayOfWeek dayOfWeek, int expectedYear, int expectedMonth, int expectedDay) { var rule = WeekYearRules.ForMinDaysInFirstWeek(minDaysInFirstWeek, firstDayOfWeek); var actual = rule.GetLocalDate(weekYear, week, dayOfWeek); var expected = new LocalDate(expectedYear, expectedMonth, expectedDay); Assert.AreEqual(expected, actual); Assert.AreEqual(weekYear, rule.GetWeekYear(actual)); Assert.AreEqual(week, rule.GetWeekOfWeekYear(actual)); }
public void RoundtripLastDay_Iso1() { // In the Gregorian calendar with a minimum of 1 day in the first // week, Friday December 31st 9999 is in week year 10000. We should be able to // round-trip. var rule = WeekYearRules.ForMinDaysInFirstWeek(1); var date = new LocalDate(9999, 12, 31); Assert.AreEqual(date, rule.GetLocalDate( rule.GetWeekYear(date), rule.GetWeekOfWeekYear(date), date.IsoDayOfWeek)); }
public void RoundtripFirstDay_Iso7() { // In the Gregorian calendar with a minimum of 7 days in the first // week, Tuesday January 1st -9998 is in week year -9999. We should be able to // round-trip. var rule = WeekYearRules.ForMinDaysInFirstWeek(7); var date = new LocalDate(-9998, 1, 1); Assert.AreEqual(date, rule.GetLocalDate( rule.GetWeekYear(date), rule.GetWeekOfWeekYear(date), date.IsoDayOfWeek)); }
public void GetWeeksInWeekYear( [ValueSource(typeof(BclCalendars), nameof(BclCalendars.MappedCalendars))] Calendar calendar, [ValueSource(nameof(CalendarWeekRules))] CalendarWeekRule bclRule, [ValueSource(nameof(BclDaysOfWeek))] DayOfWeek firstDayOfWeek) { var nodaCalendar = BclCalendars.CalendarSystemForCalendar(calendar); var nodaRule = WeekYearRules.FromCalendarWeekRule(bclRule, firstDayOfWeek); var startYear = new LocalDate(2016, 1, 1).WithCalendar(nodaCalendar).Year; for (int year = startYear; year < startYear + 30; year++) { var bclDate = new LocalDate(year + 1, 1, 1, nodaCalendar).PlusDays(-1).ToDateTimeUnspecified(); Assert.AreEqual(calendar.GetWeekOfYear(bclDate, bclRule, firstDayOfWeek), nodaRule.GetWeeksInWeekYear(year, nodaCalendar), "Year {0}", year); } }
public void Gregorian(int year, IsoDayOfWeek firstDayOfYear, int maxMinDaysInFirstWeekForSameWeekYear) { var startOfCalendarYear = new LocalDate(year, 1, 1); Assert.AreEqual(firstDayOfYear, startOfCalendarYear.IsoDayOfWeek); // Rules which put the first day of the calendar year into the same week year for (int i = 1; i <= maxMinDaysInFirstWeekForSameWeekYear; i++) { var rule = WeekYearRules.ForMinDaysInFirstWeek(i); Assert.AreEqual(year, rule.GetWeekYear(startOfCalendarYear)); Assert.AreEqual(1, rule.GetWeekOfWeekYear(startOfCalendarYear)); } // Rules which put the first day of the calendar year into the previous week year for (int i = maxMinDaysInFirstWeekForSameWeekYear + 1; i <= 7; i++) { var rule = WeekYearRules.ForMinDaysInFirstWeek(i); Assert.AreEqual(year - 1, rule.GetWeekYear(startOfCalendarYear)); Assert.AreEqual(rule.GetWeeksInWeekYear(year - 1), rule.GetWeekOfWeekYear(startOfCalendarYear)); } }
public void UnsupportedCalendarWeekRule() { Assert.Throws <ArgumentException>(() => WeekYearRules.FromCalendarWeekRule(CalendarWeekRule.FirstDay + 1000, DayOfWeek.Monday)); }