1790240b

By: Tom Sydney Kerckhove <syd@cs-syd.eu>

ical-recurrence: test that Count takes the chronologically first yearly instances

The BYWEEKNO branch of yearlyDayCandidate iterates over the days of the
week in Monday-to-Sunday order regardless of the week start, so with
WKST=SU it emits Sunday last while Sunday is chronologically first.

recurUntil and recurCount both assume the list of occurrences ascends.
recurCount then takes the wrong instances, and recurUntil is worse: it
returns the empty set at the first element past UNTIL, so one
out-of-order day truncates everything after it.  The same ordering also
mis-numbers BYSETPOS in that branch.

monthlyDateTimeRecurrence and weeklyDateTimeRecurrence sort their
candidates before use; yearlyDateTimeRecurrence does not.

With a week start of Sunday, week 1 of 2021 starts on Sunday the 3rd of
January and week 1 of 2022 on Sunday the 2nd, so counting from the
Sunday of week 1 of 2021 the next two instances are the Monday after it
and the Sunday of week 1 of 2022.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 21s 1s 1s 23s 21s
Eval 4m19s 12s 12s 4m32s 3m56s
Build 1h44m14s 2m36s - - 1h39m46s
Suite 21s 2m50s - - 3h07m07s

Timeline

0s4m20s4m30s1h44m1h44m1h44m1h44m1h45m1h45m1h45m1h45m