1886e264

ical-recurrence: record how colliding observances are resolved

If two observances of one time zone put a transition at the same local
time, timeZoneRuleOccurrences can only keep one, and M.unions keeps the
leftmost of the maps it is given.  Those arrive in Ord TimeZoneObservance
order, which compares DTSTART first and the offsets after it, so the
smaller TZOFFSETTO wins and the order the calendar listed them in has no
say in it.

Checked with a time zone holding two STANDARD observances that both start
at 20200101T000000, one going to +0200 and the other to +0500.  An event
in June resolves to 10:00 UTC either way round, so the +0200 one wins
whichever order the file lists them in.

Worth saying that it is deterministic: the answer does not depend on the
order the observances happened to be parsed in, which is the failure this
looked like it might be.  It is only arbitrary.

Recorded rather than changed.  The spec does not say what a time zone
whose observances disagree about one instant means, so there is nothing to
be faithful to, and "last one listed wins" or "latest DTSTART wins" would
be no less arbitrary.  Rejecting it would turn input that resolves today
into an unfixable error.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval 1s 10s 10s 11s 0s
Build 10s 53s 53s 1m04s 0s
Suite 0s 1m05s 1m04s 1m04s 0s

Timeline

0s10s20s30s40s50s1m