c2e0b9db

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

ical-recurrence: keep one instance per start in the recurrence set

@
Where duplicate instances are generated by the "RRULE"
and "RDATE" properties, only one recurrence is considered.
Duplicate instances are ignored.
@

@
The
duration of a specific recurrence may be modified in an exception
component or simply by using an "RDATE" property of PERIOD value
type.
@

Unioning sets of EventOccurrence deduplicates on the start and the end
together, so one instance survived twice whenever the same start arrived
with two different ends.  Key on the start alone instead.

The quote above settles which one wins.  A period-valued RDATE is how the
duration of a single instance is changed, so it is meant to collide with
the instance the rule generates, and it is the one that carries the
intended duration.  DTSTART beats the rule too, because its end is stated
outright while the rule's is derived from it.

This also updates zoned-recurring.occ, which recorded the bug: it listed
four instances for a COUNT=3 rule, the first two being the same instance
with its end written once in each of the event's two time zones.  Its
sibling zoned-recurring.res already listed three, because resolving the
two ends to the same instant collapsed them, so the two golden files for
that calendar disagreed about how many instances it has.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 1m40s 0s 0s 1m41s 1m40s
Eval 1m43s 13s 13s 1m56s 1s
Build 1m56s 6m06s 18m42s 20m38s 16m35s
Suite 1m40s 6m21s 18m58s 20m38s 18m18s

Timeline

0s1m50s18m40s18m50s19m19m10s19m20s19m30s19m40s19m50s20m20m10s20m20s20m30s