044138f3

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

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 21s 1s 1s 23s 21s
Eval 4m19s 11s 11s 4m31s 3m56s
Build 1h45m33s 2m44s - - 1h41m54s
Suite 21s 2m57s - - 4h27m33s

Timeline

0s4m20s4m30s1h45m1h45m1h46m1h46m1h46m1h46m1h46m1h46m