Hi,
DateTime::Set 0.21 dies when as_list is asked to produce a list from
outside the range of the set. It shows up in the tests included with
DateTime::Event::ICal.
Can't call method "is_infinite" on an undefined value at
/usr/lib/perl5/site_perl/5.8.3/DateTime/Set.pm line 508.
I've attached a patch for DateTime::Set. Hope you find it useful.
sbg
diff -ruN DateTime-Set-0.21/lib/DateTime/Set.pm DateTime-Set-0.21-sbg/lib/DateTime/Set.pm
--- DateTime-Set-0.21/lib/DateTime/Set.pm 2005-04-08 00:40:53.000000000 +1000
+++ DateTime-Set-0.21-sbg/lib/DateTime/Set.pm 2005-05-06 15:16:52.299754149 +1000
@@ -505,8 +505,8 @@
## return undef if $set->{set}->is_too_complex; # undef = no begin/end
return undef
- if $set->max->is_infinite ||
- $set->min->is_infinite;
+ if ( $set->max && $set->max->is_infinite ) ||
+ ( $set->min && $set->min->is_infinite );
# return if $set->{set}->is_null; # nothing = empty
my @result;
diff -ruN DateTime-Set-0.21/t/as_list_empty.t DateTime-Set-0.21-sbg/t/as_list_empty.t
--- DateTime-Set-0.21/t/as_list_empty.t 1970-01-01 10:00:00.000000000 +1000
+++ DateTime-Set-0.21-sbg/t/as_list_empty.t 2005-05-06 15:19:07.307484035 +1000
@@ -0,0 +1,24 @@
+#!/usr/bin/perl
+
+use strict;
+
+use Test::More tests => 2;
+
+use DateTime;
+use DateTime::Set;
+
+my $d1 = DateTime->new( year => 2002, month => 3, day => 11 );
+my $d2 = DateTime->new( year => 2002, month => 4, day => 11 );
+my $d3 = DateTime->new( year => 2002, month => 5, day => 11 );
+my( $set, $r, @dt );
+
+$set = DateTime::Set->from_datetimes( dates => [ $d1 ] );
[EMAIL PROTECTED] = $set->as_list;
+$r = join(' ', @dt);
+
+is($r, '2002-03-11T00:00:00', 'Single date set');
+
[EMAIL PROTECTED] = $set->as_list( start => $d2, end => $d3 );
+$r = join(' ', @dt);
+
+is($r, '', 'Out of range');