06993b68

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

ical-recurrence: exclude exception dates by instant as well as by spelling

[section 3.8.5.1](https://datatracker.ietf.org/doc/html/rfc5545#section-3.8.5.1)

@
Property Parameters:  IANA, non-standard, value data type, and time
   zone identifier property parameters can be specified on this
   property.
@

@
The final recurrence set is generated by gathering all of the
start DATE-TIME values generated by any of the specified "RRULE"
and "RDATE" properties, and then excluding any start DATE-TIME
values specified by "EXDATE" properties.
@

A time zone identifier is allowed on an EXDATE and nothing ties it to the
one DTSTART uses, so a conforming exception can name an instance in
another time zone from the one the instance itself is written in.
Comparing the values as written misses those.

Compare what they resolve to.  This runs on top of the comparison of the
written values rather than replacing it, so an exception or an occurrence
whose time zone the calendar does not define is still excluded on the
strength of its spelling.  Nothing that used to be excluded stops being
excluded, and nothing starts failing for want of a time zone, which
matters because removeExceptionDatetimesSet runs for every event.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 1m08s 0s 0s 1m09s 1m08s
Eval 1m25s 18s 18s 1m43s 15s
Build 1m43s 9m49s 1h05m10s 1h06m54s 1h00m00s
Suite 1m08s 10m08s 1h05m45s 1h06m54s 1h01m25s

Timeline

0s1h2m1h3m1h4m1h5m1h6m