cced828d

ical-recurrence: test that a yearly BySetPos selects within the whole year

BYSETPOS is evaluated against the candidate set of the entire frequency
period.  Only afterwards are the selected instances restricted to those
at or after DTSTART.

yearlyDateTimeRecurrence has the 'next > start' guard inside the list
that filterSetPos numbers, so instances before DTSTART are dropped
before BYSETPOS is applied and later candidates slide into their
positions.  monthlyDateTimeRecurrence and weeklyDateTimeRecurrence
apply that same guard after filterSetPos; yearly is the odd one out.

For 2020 the candidate set is the 15th of January, April, July and
October, so BYSETPOS=1 selects the 15th of January, which is before
DTSTART and therefore not part of the recurrence set.  The 15th of July
must not take its place.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 2s 1s 1s 4s 2s
Eval 4s 11s 11s 16s 0s
Build 16s 6m40s 8m35s 8m51s 6m41s
Suite 2s 6m53s 8m48s 8m51s 6m44s

Timeline

0s10s7m7m10s7m20s7m30s7m40s7m50s8m8m10s8m20s8m30s8m40s8m50s