9d362187

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

ical-recurrence: revive the resolve/unresolve roundtrip test

This test was disabled because it asserted that resolving and unresolving
any local time gives it back, which is false: a local time inside a
spring-forward gap has no instant that maps to it, and a single generated
observance with TZOFFSETTO past TZOFFSETFROM creates exactly such a gap.

That roundtrip is the existence test.  'localTimeExists' defines it that
way and 'recurEvents' drops the instances that fail it, so the property
is worth having rather than deleting.  It is restricted to the local
times the zone has, with the gap derived from the two offsets the way the
neighbouring tests derive which offset each direction picks.  Deriving it
from the roundtrip would assert a tautology.

Nothing here is red: no source changed, and the property passes as soon
as its domain is right.  Two things earn their own tests instead, because
the generators cannot reach them:

Local times near the transition.  The property generates the local time
independently of the observance, so the two land within an hour of each
other essentially never and the gap went uncovered.  Four cases pin it,
including both boundaries: the gap is [start, start + (to - from)), so
02:30 comes back as 01:30 while 03:00 comes back unchanged.

Leap seconds.  Whether one survives depends on the time of day and on the
offset: 23:59:60 at a zero offset comes back, 00:00:60 normalises into the
following minute, and 23:59:60 at +01:00 lands on the next day's midnight.
That is a property of splitting an instant into a wall clock rather than
anything about time zones, so the property excludes it and three cases pin
the behaviour that justifies the exclusion.

Found while doing so, not addressed here: BYSECOND admits 0 to 60, so a
rule can generate a local time holding a leap second, and
'localTimeExists' then reports it nonexistent and drops the instance
everywhere except 23:59:60 at a zero offset.