Skip to content

Commit 2b295ef

Browse files
committed
Bug fix
Added the First day of week to the weekly PatternHash calculation.
1 parent 8f75af7 commit 2b295ef

File tree

4 files changed

+56
-18
lines changed

4 files changed

+56
-18
lines changed

src/DateRecurrenceR/Helpers/WeeklyRecurrenceHelper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ namespace DateRecurrenceR.Helpers;
55

66
internal struct WeeklyRecurrenceHelper
77
{
8-
public static WeeklyHash GetPatternHash(WeekDays weekDays, int interval)
8+
public static WeeklyHash GetPatternHash(WeekDays weekDays, int interval, DayOfWeek firstDayOfWeek)
99
{
1010
var hash = new WeeklyHash();
1111

1212
var increment = DaysInWeek * (interval - 1) + 1;
1313

14-
var weekDayIndex = ((int) weekDays.GetMinByFirstDayOfWeek(0) + 6) % DaysInWeek;
14+
var weekDayIndex = ((int) weekDays.GetMinByFirstDayOfWeek(firstDayOfWeek) + 6) % DaysInWeek;
1515

1616
for (var i = DaysInWeek; i > 0; i--)
1717
{

src/DateRecurrenceR/Recurrence.Weekly.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public static IEnumerator<DateOnly> Weekly(DateOnly beginDate,
4545
DayOfWeek firstDayOfWeek,
4646
Interval interval)
4747
{
48-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
48+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, firstDayOfWeek);
4949

5050
var canStart = WeeklyRecurrenceHelper.TryGetStartDate(
5151
beginDate,
@@ -104,7 +104,7 @@ public static IEnumerator<DateOnly> Weekly(DateOnly beginDate,
104104
DayOfWeek firstDayOfWeek,
105105
Interval interval)
106106
{
107-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
107+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, firstDayOfWeek);
108108

109109
var canStart = WeeklyRecurrenceHelper.TryGetStartDate(
110110
beginDate,

test/DateRecurrenceR.Tests.Unit/Helpers/DateHelperTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ public void Method_CalculateDaysToNextInterval_with_singleDay()
244244
// Arrange
245245
var interval = 50;
246246
var weekDays = new WeekDays(DayOfWeek.Monday);
247-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
247+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
248248

249249
// Act
250250
var res = DateHelper.CalculateDaysToNextInterval(
@@ -266,7 +266,7 @@ public void Method_CalculateDaysToNextInterval_with_multipleDays_with_start_afte
266266
var startDate = new DateOnly(999, 1, 1);
267267
var fromDate = new DateOnly(999, 2, 16); // right after 999-02-15 Friday
268268
var expectedDate = new DateOnly(999, 2, 26);
269-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
269+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
270270

271271
// Act
272272
var res = DateHelper.CalculateDaysToNextInterval(
@@ -288,7 +288,7 @@ public void Method_CalculateDaysToNextInterval_with_multipleDays_with_start_in_m
288288
var startDate = new DateOnly(999, 1, 1);
289289
var fromDate = new DateOnly(999, 2, 14); // before 999-02-15 Friday
290290
var expectedDate = new DateOnly(999, 2, 15);
291-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
291+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
292292

293293
// Act
294294
var res = DateHelper.CalculateDaysToNextInterval(

test/DateRecurrenceR.Tests.Unit/Helpers/WeeklyRecurrenceHelperTests.cs

Lines changed: 49 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public void Method_TryGetStartDate_returns_True_when_FromDate_eq_BeginDate()
1515
var weekDays = new WeekDays(DayOfWeek.Monday);
1616
var firstDayOfWeek = DayOfWeek.Monday;
1717
var interval = 1;
18-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
18+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
1919

2020
// Act
2121
var canStart = WeeklyRecurrenceHelper.TryGetStartDate(
@@ -40,7 +40,7 @@ public void Method_TryGetStartDate_returns_True_when_FromDate_gt_BeginDate()
4040
var weekDays = new WeekDays(DayOfWeek.Monday, DayOfWeek.Friday);
4141
var firstDayOfWeek = DayOfWeek.Monday;
4242
var interval = 1;
43-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
43+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
4444

4545
// Act
4646
var canStart = WeeklyRecurrenceHelper.TryGetStartDate(
@@ -65,7 +65,7 @@ public void Method_TryGetStartDate_returns_False_when_FromDate_eq_BeginDate_and_
6565
var weekDays = new WeekDays(DayOfWeek.Saturday);
6666
var firstDayOfWeek = DayOfWeek.Monday;
6767
var interval = 1;
68-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
68+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
6969

7070
// Act
7171
var canStart = WeeklyRecurrenceHelper.TryGetStartDate(
@@ -90,7 +90,7 @@ public void Method_TryGetStartDate_returns_False_when_FromDate_gt_BeginDate_and_
9090
var weekDays = new WeekDays(DayOfWeek.Monday, DayOfWeek.Saturday);
9191
var firstDayOfWeek = DayOfWeek.Monday;
9292
var interval = 1;
93-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
93+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
9494

9595
// Act
9696
var canStart = WeeklyRecurrenceHelper.TryGetStartDate(
@@ -115,7 +115,7 @@ public void Method_TryGetStartDate_returns_Result_eq_FromDate()
115115
var fromDate = beginDate.AddDays(7 * interval * 2);
116116
var weekDays = new WeekDays(DayOfWeek.Monday);
117117
var firstDayOfWeek = DayOfWeek.Monday;
118-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
118+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
119119

120120
// Act
121121
WeeklyRecurrenceHelper.TryGetStartDate(
@@ -140,7 +140,7 @@ public void Method_TryGetStartDate_returns_Result_eq_FromDate_2()
140140
var firstDayOfWeek = DayOfWeek.Monday;
141141
var weekDays = new WeekDays(DayOfWeek.Sunday, DayOfWeek.Monday);
142142
var interval = 1;
143-
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval);
143+
var patternHash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, interval, DayOfWeek.Sunday);
144144

145145
// Act
146146
WeeklyRecurrenceHelper.TryGetStartDate(
@@ -156,14 +156,52 @@ public void Method_TryGetStartDate_returns_Result_eq_FromDate_2()
156156
startDate.Should().Be(fromDate);
157157
}
158158

159+
[Fact]
160+
public void Method_GetPatternHash_returns_correct_hash_for_Sunday_and_Monday_with_Sunday_as_FirstDayOfWeek()
161+
{
162+
// Arrange
163+
var weekDays = new WeekDays(DayOfWeek.Sunday, DayOfWeek.Monday);
164+
165+
// Act
166+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 2, DayOfWeek.Sunday);
167+
168+
//Assert
169+
hash[DayOfWeek.Sunday].Should().Be(1);
170+
hash[DayOfWeek.Monday].Should().Be(13);
171+
hash[DayOfWeek.Tuesday].Should().Be(0);
172+
hash[DayOfWeek.Wednesday].Should().Be(0);
173+
hash[DayOfWeek.Thursday].Should().Be(0);
174+
hash[DayOfWeek.Friday].Should().Be(0);
175+
hash[DayOfWeek.Saturday].Should().Be(0);
176+
}
177+
178+
[Fact]
179+
public void Method_GetPatternHash_returns_correct_hash_for_Sunday_and_Monday_with_Monday_as_FirstDayOfWeek()
180+
{
181+
// Arrange
182+
var weekDays = new WeekDays(DayOfWeek.Sunday, DayOfWeek.Monday);
183+
184+
// Act
185+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 2, DayOfWeek.Monday);
186+
187+
//Assert
188+
hash[DayOfWeek.Sunday].Should().Be(8);
189+
hash[DayOfWeek.Monday].Should().Be(6);
190+
hash[DayOfWeek.Tuesday].Should().Be(0);
191+
hash[DayOfWeek.Wednesday].Should().Be(0);
192+
hash[DayOfWeek.Thursday].Should().Be(0);
193+
hash[DayOfWeek.Friday].Should().Be(0);
194+
hash[DayOfWeek.Saturday].Should().Be(0);
195+
}
196+
159197
[Fact]
160198
public void Method_GetPatternHash_returns_correct_hash_for_one_day()
161199
{
162200
// Arrange
163201
var weekDays = new WeekDays(DayOfWeek.Monday);
164202

165203
// Act
166-
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1);
204+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1, DayOfWeek.Sunday);
167205

168206
//Assert
169207
hash[DayOfWeek.Sunday].Should().Be(0);
@@ -182,7 +220,7 @@ public void Method_GetPatternHash_returns_correct_hash_for_two_days()
182220
var weekDays = new WeekDays(DayOfWeek.Tuesday, DayOfWeek.Friday);
183221

184222
// Act
185-
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1);
223+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1, DayOfWeek.Sunday);
186224

187225
//Assert
188226
hash[DayOfWeek.Sunday].Should().Be(0);
@@ -209,7 +247,7 @@ public void Method_GetPatternHash_returns_correct_hash_for_seven_days()
209247
);
210248

211249
// Act
212-
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1);
250+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1, DayOfWeek.Sunday);
213251

214252
//Assert
215253
hash[DayOfWeek.Sunday].Should().Be(1);
@@ -234,7 +272,7 @@ public void Method_GetPatternHash_returns_correct_hash_for_seven_days_2()
234272
true);
235273

236274
// Act
237-
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1);
275+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1, DayOfWeek.Sunday);
238276

239277
//Assert
240278
hash[DayOfWeek.Sunday].Should().Be(1);
@@ -262,7 +300,7 @@ public void Method_8_GetPatternHash_returns_correct_hash_for_seven_days()
262300
var weekDays = new WeekDays(weekDaysArray);
263301

264302
// Act
265-
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1);
303+
var hash = WeeklyRecurrenceHelper.GetPatternHash(weekDays, 1, DayOfWeek.Sunday);
266304

267305
//Assert
268306
hash[DayOfWeek.Sunday].Should().Be(1);

0 commit comments

Comments
 (0)