The intersects() method returns undef when it can't decide if there is
an intersection.

2008/12/13 Elliot Shank <[email protected]>:
> In the code below, why do the span sets not intersect when the spans taken
> from them do?
>
> I've tried this code on both Red Hat 5.2 and on Mac OS X 10.5.
>
> DateTime: 0.4501
> DateTime::SpanSet: 0.25
> DateTime::Event::Recurrence: 0.16
>
> =======
>
> next start 1: 2008-12-17T07:00:00
> next end 1:   2008-12-18T07:00:00
> next start 2: 2008-12-17T17:00:00
> next end 2:   2008-12-18T17:00:00
> spans intersect: yes
> span sets intersect: no
>
> =======
>
> use DateTime;
> use DateTime::SpanSet;
> use DateTime::Event::Recurrence;
>
> my $start_1 = DateTime::Event::Recurrence->weekly(days => 3, hours => 7);
> my $end_1 = DateTime::Event::Recurrence->weekly(days => 4, hours => 7);
> my $span_set_1 = DateTime::SpanSet->from_sets(start_set => $start_1, end_set
> => $end_1);
>
> my $start_2 = DateTime::Event::Recurrence->weekly(days => 3, hours => 17);
> my $end_2 = DateTime::Event::Recurrence->weekly(days => 4, hours => 17);
> my $span_set_2 = DateTime::SpanSet->from_sets(start_set => $start_2, end_set
> => $end_2);
>
> my $now = DateTime->now();
>
> my $span_1 = $span_set_1->next($now);
> my $span_2 = $span_set_2->next($now);
>
> say 'next start 1: ', $span_1->start();
> say 'next end 1:   ', $span_1->end();
> say 'next start 2: ', $span_2->start();
> say 'next end 2:   ', $span_2->end();
>
> say 'spans intersect: ', $span_1->intersects($span_2) ? 'yes' : 'no';
> say 'span sets intersect: ', $span_set_1->intersects($span_set_2) ? 'yes' :
> 'no';
>

...
say 'span sets intersect: ', $span_set_1->intersects($span_set_2) ?
'yes' : 'no';
say 'span sets intersect is defined: ', defined
$span_set_1->intersects($span_set_2) ? 'yes' : 'no';
my $span_3 = DateTime::Span->from_datetimes( start =>
DateTime->new(year=>2001), end => DateTime->ne
w(year=>2002) );

say 'span sets intersect: ', $span_2->intersects($span_3) ? 'yes' : 'no';
say 'span sets intersect is defined: ', defined
$span_2->intersects($span_3) ? 'yes' : 'no';

...
span sets intersect: no
span sets intersect is defined: no
span sets intersect: no
span sets intersect is defined: yes

this was probably a poor design decision, and it seems to be undocumented.

Flávio S. Glock

Reply via email to