c1fde2ee

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 40s 1s 1s 42s 40s
Eval 56s 10s 10s 1m06s 13s
Build 1m06s 22s 18m35s 19m41s 18m11s
Suite 40s 34s 19m00s 19m41s 19m06s

Timeline

0s1m19m20s19m30s19m40s