a8b44029

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 57s 1s 1s 58s 57s
Eval 2m48s 12s 12s 3m01s 1m49s
Build 3m00s 0s - - 0s
Suite 57s 13s - - 2h25m26s