Fix calculation of the recurring weekdays
Both the result of the first_dayofweek_of_year and the target weekday are zero-based (0 fo sunday) while the target month-day or year-day is 1-based. Adjust logic accordingly. Also add testcase for this PR to the kyua test suite PR: 201062 Submitted by: Richard Narron <comet.berkeley@gmail.com> MFC after: 1 week
This commit is contained in:
parent
2b99119f6d
commit
c01c8cccf5
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=359585
@ -578,7 +578,9 @@ parsedaymonth(char *date, int *yearp, int *monthp, int *dayp, int *flags,
|
|||||||
/* Every dayofweek of the year */
|
/* Every dayofweek of the year */
|
||||||
if (lflags == (F_DAYOFWEEK | F_VARIABLE)) {
|
if (lflags == (F_DAYOFWEEK | F_VARIABLE)) {
|
||||||
dow = first_dayofweek_of_year(year);
|
dow = first_dayofweek_of_year(year);
|
||||||
d = (idayofweek - dow + 8) % 7;
|
if (dow < 0)
|
||||||
|
continue;
|
||||||
|
d = (idayofweek - dow + 7) % 7 + 1;
|
||||||
while (d <= 366) {
|
while (d <= 366) {
|
||||||
if (remember_yd(year, d, &rm, &rd))
|
if (remember_yd(year, d, &rm, &rd))
|
||||||
remember(&remindex,
|
remember(&remindex,
|
||||||
@ -616,7 +618,9 @@ parsedaymonth(char *date, int *yearp, int *monthp, int *dayp, int *flags,
|
|||||||
(F_MONTH | F_DAYOFWEEK | F_MODIFIERINDEX | F_VARIABLE)) {
|
(F_MONTH | F_DAYOFWEEK | F_MODIFIERINDEX | F_VARIABLE)) {
|
||||||
offset = indextooffset(modifierindex);
|
offset = indextooffset(modifierindex);
|
||||||
dow = first_dayofweek_of_month(year, imonth);
|
dow = first_dayofweek_of_month(year, imonth);
|
||||||
d = (idayofweek - dow + 8) % 7;
|
if (dow < 0)
|
||||||
|
continue;
|
||||||
|
d = (idayofweek - dow + 7) % 7 + 1;
|
||||||
|
|
||||||
if (offset > 0) {
|
if (offset > 0) {
|
||||||
while (d <= yearinfo->monthdays[imonth]) {
|
while (d <= yearinfo->monthdays[imonth]) {
|
||||||
@ -650,7 +654,9 @@ parsedaymonth(char *date, int *yearp, int *monthp, int *dayp, int *flags,
|
|||||||
/* Every dayofweek of the month */
|
/* Every dayofweek of the month */
|
||||||
if (lflags == (F_DAYOFWEEK | F_MONTH | F_VARIABLE)) {
|
if (lflags == (F_DAYOFWEEK | F_MONTH | F_VARIABLE)) {
|
||||||
dow = first_dayofweek_of_month(year, imonth);
|
dow = first_dayofweek_of_month(year, imonth);
|
||||||
d = (idayofweek - dow + 8) % 7;
|
if (dow < 0)
|
||||||
|
continue;
|
||||||
|
d = (idayofweek - dow + 7) % 7 + 1;
|
||||||
while (d <= yearinfo->monthdays[imonth]) {
|
while (d <= yearinfo->monthdays[imonth]) {
|
||||||
if (remember_ymd(year, imonth, d))
|
if (remember_ymd(year, imonth, d))
|
||||||
remember(&remindex,
|
remember(&remindex,
|
||||||
|
@ -188,6 +188,7 @@ LANG=C
|
|||||||
06/28 jun 28
|
06/28 jun 28
|
||||||
06/29 jun 29
|
06/29 jun 29
|
||||||
06/30 jun 30
|
06/30 jun 30
|
||||||
|
06/SunThird sunthird
|
||||||
07/01 jul 1
|
07/01 jul 1
|
||||||
07/02 jul 2
|
07/02 jul 2
|
||||||
07/03 jul 3
|
07/03 jul 3
|
||||||
|
3
usr.bin/calendar/tests/regress.s5.out
Normal file
3
usr.bin/calendar/tests/regress.s5.out
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Jun 21* sunthird
|
||||||
|
Jun 21 jun 21
|
||||||
|
Jun 22 jun 22
|
@ -7,12 +7,13 @@ CALENDAR="${CALENDAR_BIN} ${CALENDAR_FILE}"
|
|||||||
|
|
||||||
REGRESSION_START($1)
|
REGRESSION_START($1)
|
||||||
|
|
||||||
echo 1..28
|
echo 1..29
|
||||||
|
|
||||||
REGRESSION_TEST(`s1',`$CALENDAR -t 29.12.2006')
|
REGRESSION_TEST(`s1',`$CALENDAR -t 29.12.2006')
|
||||||
REGRESSION_TEST(`s2',`$CALENDAR -t 30.12.2006')
|
REGRESSION_TEST(`s2',`$CALENDAR -t 30.12.2006')
|
||||||
REGRESSION_TEST(`s3',`$CALENDAR -t 31.12.2006')
|
REGRESSION_TEST(`s3',`$CALENDAR -t 31.12.2006')
|
||||||
REGRESSION_TEST(`s4',`$CALENDAR -t 01.01.2007')
|
REGRESSION_TEST(`s4',`$CALENDAR -t 01.01.2007')
|
||||||
|
REGRESSION_TEST(`s5',`$CALENDAR -t 21.06.2015')
|
||||||
|
|
||||||
REGRESSION_TEST(`a1',`$CALENDAR -A 3 -t 28.12.2006')
|
REGRESSION_TEST(`a1',`$CALENDAR -A 3 -t 28.12.2006')
|
||||||
REGRESSION_TEST(`a2',`$CALENDAR -A 3 -t 29.12.2006')
|
REGRESSION_TEST(`a2',`$CALENDAR -A 3 -t 29.12.2006')
|
||||||
|
Loading…
Reference in New Issue
Block a user