0a3648d0

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

ical-recurrence: carry the duration across a mismatched RecurrenceDateTimes

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

@
Value Type:  The default value type for this property is DATE-TIME.
   The value type can be set to DATE or PERIOD.
@

Appendix A.1 requires DTEND and DUE to use the value type of DTSTART and
requires nothing of RDATE, so an RDATE may hand an instance a value type
the event does not use.  The instance still has to end somewhere, so
carry the duration into the value type of the new start instead of
refusing it.

A whole number of days becomes that many days as an exact duration.  Its
inverse rounds up to whole days and never down to none, because a
DATE-valued DTEND is exclusive and cannot name part of a day, so a one
hour event becomes a one day all-day instance.

This also drops StartStartMismatch, which those two arms were the only
users of.  It described a mismatch between the value type of the original
start and of the new one, which is now handled rather than rejected, so
the constructor could no longer be produced.

Suite timing

Time to Start Worker time Duration Time to finish Idle
Config 0s 1s 1s 1s 0s
Eval 0s 13s 13s 14s 0s
Build 13s 6m18s 1m42s 1m56s 0s
Suite 0s 6m33s 1m56s 1m56s 0s

Timeline

0s10s20s30s40s50s1m1m10s1m20s1m30s1m40s1m50s