Skip to content

Commit 8242e8c

Browse files
committed
update docs and tests
1 parent 5697eda commit 8242e8c

File tree

5 files changed

+109
-34
lines changed

5 files changed

+109
-34
lines changed

README.md

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,11 @@
44

55
## Efficient Date Recurrence Library for .NET
66

7-
**DateRecurrenceR** is a .NET library designed to handle and manage date recurrence patterns efficiently.
7+
**DateRecurrenceR** is a .NET library designed to handle and manage recurrence date patterns efficiently.
88

99
### Key Features
1010

11-
* **Dynamic Subrange Generation:** Generate only the dates you need within a specified range, optimizing performance and
12-
memory usage.
11+
* **Dynamic Subrange Generation:** Generate only the needed dates within a specified range, optimizing performance and memory usage.
1312
* **Time Localization Simplification:** Uses DateOnly, eliminating issues related to time localization.
1413
* **Flexible Collection Handling:** Returns an enumerator, allowing developers to choose the collection type.
1514
* **Optimal Performance:** Boasts a Big O notation of O(1), ensuring efficient operations.
@@ -39,7 +38,7 @@ All these methods return an instance of `IEnumerator<DateOnly>`.
3938
| dayOfMonth | The day of the month. Takes the last day of the month if `dayOfMonth` is more than the days in the month. |
4039
| dayOfYear | The day of the year. |
4140
| weekDays | Days of the week. |
42-
| numberOfWeek | The number of the week. The first week of a month starts from the first day of the month. |
41+
| numberOfWeek | Index of dayOfWeek in the month. |
4342
| numberOfMonth | The number of the month. |
4443
| firstDayOfWeek | The first day of the week. |
4544

src/DateRecurrenceR/DateRecurrenceR.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<Version>0.6.0-beta.2</Version>
1010
<PublishRepositoryUrl>true</PublishRepositoryUrl>
1111
<ImplicitUsings>enable</ImplicitUsings>
12-
<TargetFrameworks>net6.0;net8.0;net9.0</TargetFrameworks>
12+
<TargetFrameworks>net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
1313
<Nullable>enable</Nullable>
1414
<WarningsAsErrors>Nullable</WarningsAsErrors>
1515
<Deterministic>true</Deterministic>

src/DateRecurrenceR/WeekDays.cs

Lines changed: 102 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,96 @@
11
namespace DateRecurrenceR;
22

3-
public sealed class WeekDays
3+
/// <summary>
4+
/// Represents weekdays for one week.
5+
/// </summary>
6+
public struct WeekDays
47
{
58
#if NET8_0_OR_GREATER
69
private readonly WeekDaysArray _ds;
710
#else
811
private readonly bool[] _ds = new bool[DaysInWeek];
912
#endif
1013

11-
public WeekDays(DayOfWeek day1)
12-
: this(day1, day1)
14+
/// <summary>
15+
/// Create an instance with one defined day of the week.
16+
/// </summary>
17+
/// <param name="day"><see cref="DayOfWeek" /></param>
18+
public WeekDays(DayOfWeek day)
19+
: this(day, day)
1320
{
1421
}
1522

23+
/// <summary>
24+
/// Create an instance with two defined days of the week.
25+
/// </summary>
26+
/// <param name="day1"><see cref="DayOfWeek" /></param>
27+
/// <param name="day2"><see cref="DayOfWeek" /></param>
28+
1629
public WeekDays(DayOfWeek day1, DayOfWeek day2)
1730
: this(day1, day2, day2)
1831
{
1932
}
2033

34+
/// <summary>
35+
/// Create an instance with three defined days of the week.
36+
/// </summary>
37+
/// <param name="day1"><see cref="DayOfWeek" /></param>
38+
/// <param name="day2"><see cref="DayOfWeek" /></param>
39+
/// <param name="day3"><see cref="DayOfWeek" /></param>
2140
public WeekDays(DayOfWeek day1, DayOfWeek day2, DayOfWeek day3)
2241
: this(day1, day2, day3, day3)
2342
{
2443
}
2544

45+
/// <summary>
46+
/// Create an instance with four defined days of the week.
47+
/// </summary>
48+
/// <param name="day1"><see cref="DayOfWeek" /></param>
49+
/// <param name="day2"><see cref="DayOfWeek" /></param>
50+
/// <param name="day3"><see cref="DayOfWeek" /></param>
51+
/// <param name="day4"><see cref="DayOfWeek" /></param>
2652
public WeekDays(DayOfWeek day1, DayOfWeek day2, DayOfWeek day3, DayOfWeek day4)
2753
: this(day1, day2, day3, day4, day4)
2854
{
2955
}
3056

57+
/// <summary>
58+
/// Create an instance with five defined days of the week.
59+
/// </summary>
60+
/// <param name="day1"><see cref="DayOfWeek" /></param>
61+
/// <param name="day2"><see cref="DayOfWeek" /></param>
62+
/// <param name="day3"><see cref="DayOfWeek" /></param>
63+
/// <param name="day4"><see cref="DayOfWeek" /></param>
64+
/// <param name="day5"><see cref="DayOfWeek" /></param>
3165
public WeekDays(DayOfWeek day1, DayOfWeek day2, DayOfWeek day3, DayOfWeek day4, DayOfWeek day5)
3266
: this(day1, day2, day3, day4, day5, day5)
3367
{
3468
}
3569

70+
/// <summary>
71+
/// Create an instance with six defined days of the week.
72+
/// </summary>
73+
/// <param name="day1"><see cref="DayOfWeek" /></param>
74+
/// <param name="day2"><see cref="DayOfWeek" /></param>
75+
/// <param name="day3"><see cref="DayOfWeek" /></param>
76+
/// <param name="day4"><see cref="DayOfWeek" /></param>
77+
/// <param name="day5"><see cref="DayOfWeek" /></param>
78+
/// <param name="day6"><see cref="DayOfWeek" /></param>
3679
public WeekDays(DayOfWeek day1, DayOfWeek day2, DayOfWeek day3, DayOfWeek day4, DayOfWeek day5, DayOfWeek day6)
3780
: this(day1, day2, day3, day4, day5, day6, day6)
3881
{
3982
}
4083

41-
#if NET8_0_OR_GREATER
42-
public WeekDays(WeekDaysArray daysArray)
43-
{
44-
MinDay = (DayOfWeek) DaysInWeek;
45-
46-
_ds = daysArray;
47-
48-
UpdateMinDay();
49-
}
50-
#endif
51-
84+
/// <summary>
85+
/// Create an instance with seven defined days of the week.
86+
/// </summary>
87+
/// <param name="day1"><see cref="DayOfWeek" /></param>
88+
/// <param name="day2"><see cref="DayOfWeek" /></param>
89+
/// <param name="day3"><see cref="DayOfWeek" /></param>
90+
/// <param name="day4"><see cref="DayOfWeek" /></param>
91+
/// <param name="day5"><see cref="DayOfWeek" /></param>
92+
/// <param name="day6"><see cref="DayOfWeek" /></param>
93+
/// <param name="day7"><see cref="DayOfWeek" /></param>
5294
public WeekDays(DayOfWeek day1,
5395
DayOfWeek day2,
5496
DayOfWeek day3,
@@ -70,29 +112,61 @@ public WeekDays(DayOfWeek day1,
70112
UpdateMinDay();
71113
}
72114

73-
public WeekDays(bool day1,
74-
bool day2,
75-
bool day3,
76-
bool day4,
77-
bool day5,
78-
bool day6,
79-
bool day7)
115+
#if NET8_0_OR_GREATER
116+
/// <summary>
117+
/// Create an instance with seven predefined days of the week.
118+
/// </summary>
119+
/// <param name="daysArray"><see cref="WeekDaysArray" /></param>
120+
public WeekDays(WeekDaysArray daysArray)
121+
{
122+
MinDay = (DayOfWeek) DaysInWeek;
123+
124+
_ds = daysArray;
125+
126+
UpdateMinDay();
127+
}
128+
#endif
129+
130+
/// <summary>
131+
/// Create an instance with seven defined days of the week.
132+
/// </summary>
133+
/// <param name="isSunday">Set this parameter to True for Sunday.</param>
134+
/// <param name="isMonday">Set this parameter to True for Monday.</param>
135+
/// <param name="isTuesday">Set this parameter to True for Tuesday.</param>
136+
/// <param name="isWednesday">Set this parameter to True for Wednesday.</param>
137+
/// <param name="isThursday">Set this parameter to True for Thursday.</param>
138+
/// <param name="isFriday">Set this parameter to True for Friday.</param>
139+
/// <param name="isSaturday">Set this parameter to True for Saturday.</param>
140+
public WeekDays(bool isSunday,
141+
bool isMonday,
142+
bool isTuesday,
143+
bool isWednesday,
144+
bool isThursday,
145+
bool isFriday,
146+
bool isSaturday)
80147
{
81148
MinDay = (DayOfWeek) DaysInWeek;
82149

83-
_ds[0] = day1;
84-
_ds[1] = day2;
85-
_ds[2] = day3;
86-
_ds[3] = day4;
87-
_ds[4] = day5;
88-
_ds[5] = day6;
89-
_ds[6] = day7;
150+
_ds[0] = isSunday;
151+
_ds[1] = isMonday;
152+
_ds[2] = isTuesday;
153+
_ds[3] = isWednesday;
154+
_ds[4] = isThursday;
155+
_ds[5] = isFriday;
156+
_ds[6] = isSaturday;
90157

91158
UpdateMinDay();
92159
}
93160

161+
/// <summary>
162+
/// Returns a minimal defined day of the week.
163+
/// </summary>
94164
public DayOfWeek MinDay { get; private set; }
95165

166+
/// <summary>
167+
/// Returns whether the day of the week has been defined.
168+
/// </summary>
169+
/// <param name="dayOfWeek"></param>
96170
public bool this[DayOfWeek dayOfWeek] => _ds[(int) dayOfWeek];
97171

98172
private void UpdateMinDay()

test/DateRecurrenceR.Tests.Unit/DateRecurrenceR.Tests.Unit.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFramework>net9.0</TargetFramework>
4+
<TargetFrameworks>net6.0;net7.0;net8.0;net9.0</TargetFrameworks>
55
<ImplicitUsings>enable</ImplicitUsings>
66
<Nullable>enable</Nullable>
77
<WarningsAsErrors>Nullable</WarningsAsErrors>

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ public void Method_GetPatternHash_returns_correct_hash_for_seven_days_2()
220220
hash[DayOfWeek.Saturday].Should().Be(1);
221221
}
222222

223+
#if NET8_0_OR_GREATER
223224
[Fact]
224225
public void Method_8_GetPatternHash_returns_correct_hash_for_seven_days()
225226
{
@@ -246,4 +247,5 @@ public void Method_8_GetPatternHash_returns_correct_hash_for_seven_days()
246247
hash[DayOfWeek.Friday].Should().Be(1);
247248
hash[DayOfWeek.Saturday].Should().Be(1);
248249
}
250+
#endif
249251
}

0 commit comments

Comments
 (0)