af2a39f9

ical-recurrence: test that the recurrence set has no two instances with the same start

recurEvents unions sets of EventOccurrence, which deduplicates on
(start, end) pairs rather than on the start alone.  A period-valued
RDATE whose start coincides with an instance the RRULE generates
therefore yields two instances at the same instant with different ends.

RFC 5545 says the period-valued form of RDATE is how the duration of a
specific recurrence is modified, so the RDATE should win here.

The same can happen without any RDATE at all: recurEvents inserts the
DTSTART occurrence with the original end while the rule separately
regenerates it through resolveEndOrDurationDate, and those two agree
only when unresolveUTCTimeR . resolveLocalTimeR round-trips, which it
does not for a DTEND whose local time falls in a daylight saving time
gap.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 4s 3s 3s 8s 4s
Eval 52s 12s 12s 1m04s 44s
Build 1m04s 1m36s - - 7m39s
Suite 4s 1m52s - - 2h09m10s

Timeline

0s1m8m20s8m30s8m40s8m50s9m