diff --git a/net-core/Ical.Net.CoreUnitTests/RecurrenceTests.cs b/net-core/Ical.Net.CoreUnitTests/RecurrenceTests.cs index 579a9a9d1..2c32fbc9f 100644 --- a/net-core/Ical.Net.CoreUnitTests/RecurrenceTests.cs +++ b/net-core/Ical.Net.CoreUnitTests/RecurrenceTests.cs @@ -1169,6 +1169,23 @@ public void YearlyByDay1() ); } + /// + /// Ordering of byweekno should not matter + /// + [Test, Category("Recurrence")] + public void WeekNoOrderingShouldNotMatter() + { + var start = new DateTime(2019, 1, 1); + var end = new DateTime(2019, 12, 31); + var rpe1 = new RecurrencePatternEvaluator(new RecurrencePattern("FREQ=YEARLY;WKST=MO;BYDAY=MO;BYWEEKNO=1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53")); + var rpe2 = new RecurrencePatternEvaluator(new RecurrencePattern("FREQ=YEARLY;WKST=MO;BYDAY=MO;BYWEEKNO=53,51,49,47,45,43,41,39,37,35,33,31,29,27,25,23,21,19,17,15,13,11,9,7,5,3,1")); + + var recurringPeriods1 = rpe1.Evaluate(new CalDateTime(start), start, end, false); + var recurringPeriods2 = rpe2.Evaluate(new CalDateTime(start), start, end, false); + + Assert.AreEqual(recurringPeriods1.Count, recurringPeriods2.Count); + } + /// /// See Page 123 of RFC 2445 - RRULE:FREQ=YEARLY;BYWEEKNO=20;BYDAY=MO /// diff --git a/net-core/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs b/net-core/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs index 0f503fcb7..7d83e27c7 100644 --- a/net-core/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs +++ b/net-core/Ical.Net/Evaluation/RecurrencePatternEvaluator.cs @@ -406,9 +406,9 @@ private List GetWeekNoVariants(List dates, RecurrencePattern var weekNoDates = new List(); foreach (var t in dates) { - var date = t; foreach (var weekNo in pattern.ByWeekNo) { + var date = t; // Determine our current week number var currWeekNo = Calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, pattern.FirstDayOfWeek); while (currWeekNo > weekNo)