afc0c153

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

Committer: Tom Sydney Kerckhove <NorfairKing@users.noreply.github.com>

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 3m07s 0s 0s 3m08s 3m07s
Eval 3m13s 11s 11s 3m25s 5s
Build 3m24s 0s 0s 3m24s 0s
Suite 3m07s 12s 17s 3m25s 3m12s

Timeline

0s3m20s