Skip to content

Commit 5e3df48

Browse files
committed
v0.37 - alias methods start/min and end/max
1 parent 76f5fbe commit 5e3df48

File tree

6 files changed

+152
-19
lines changed

6 files changed

+152
-19
lines changed

Changes

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
Changes for DateTime::Set
22

3+
0.3700 2016-05-17
4+
- end() / max() and start() / min() are aliases to the same method in all classes.
5+
Added docs and tests. Reported by Vincent Berger.
6+
37
0.3600 2015-11-11
48
- move t/22intersects.t to DT::Event::Recurrence module
59

MANIFEST

+1
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ t/18as_list_empty.t
2828
t/19spanset_daylight_savings.t
2929
t/20spanset_week_wrapped_recurrence.t
3030
t/21from_recurrence.t
31+
t/22start_end.t
3132
lib/DateTime/Set.pm
3233
lib/DateTime/Span.pm
3334
lib/DateTime/SpanSet.pm

lib/DateTime/Set.pm

+18-10
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use constant INFINITY => 100 ** 100 ** 100 ;
1515
use constant NEG_INFINITY => -1 * (100 ** 100 ** 100);
1616

1717
BEGIN {
18-
$VERSION = '0.3600';
18+
$VERSION = '0.3700';
1919
}
2020

2121

@@ -620,14 +620,18 @@ sub complement {
620620
return $tmp;
621621
}
622622

623-
sub min {
623+
sub start {
624624
return _fix_datetime( $_[0]->{set}->min );
625625
}
626626

627-
sub max {
627+
*min = \&start;
628+
629+
sub end {
628630
return _fix_datetime( $_[0]->{set}->max );
629631
}
630632

633+
*max = \&end;
634+
631635
# returns a DateTime::Span
632636
sub span {
633637
my $set = $_[0]->{set}->span;
@@ -901,18 +905,22 @@ datetime in the set.
901905
902906
This method can be used to change the C<locale> of a datetime set.
903907
904-
=item * min
905908
906-
=item * max
909+
=item * start, min
910+
911+
=item * end, max
907912
908-
The first and last C<DateTime> in the set. These methods may return
909-
C<undef> if the set is empty. It is also possible that these methods
910-
may return a C<DateTime::Infinite::Past> or
911-
C<DateTime::Infinite::Future> object.
913+
The first and last C<DateTime> in the set.
912914
913-
These methods return just a I<copy> of the actual boundary value.
915+
These methods may return C<undef> if the set is empty.
916+
917+
It is also possible that these methods
918+
may return a C<DateTime::Infinite::Past> or C<DateTime::Infinite::Future> object.
919+
920+
These methods return just a I<copy> of the actual value.
914921
If you modify the result, the set will not be modified.
915922
923+
916924
=item * span
917925
918926
Returns the total span of the set, as a C<DateTime::Span> object.

lib/DateTime/Span.pm

+5-2
Original file line numberDiff line numberDiff line change
@@ -423,9 +423,9 @@ scalar containing infinity.
423423
424424
Also available as C<size()>.
425425
426-
=item * start
426+
=item * start, min
427427
428-
=item * end
428+
=item * end, max
429429
430430
First or last dates in the span.
431431
@@ -435,6 +435,9 @@ C<DateTime::Infinite::Future> or a C<DateTime::Infinite::Past>xs object.
435435
If the set ends C<before> a date C<$dt>, it returns C<$dt>. Note that
436436
in this case C<$dt> is not a set element - but it is a set boundary.
437437
438+
These methods return just a I<copy> of the actual boundary value.
439+
If you modify the result, the set will not be modified.
440+
438441
=cut
439442
440443
# scalar containing either negative infinity

lib/DateTime/SpanSet.pm

+22-7
Original file line numberDiff line numberDiff line change
@@ -502,14 +502,18 @@ sub complement {
502502
return $tmp;
503503
}
504504

505-
sub min {
505+
sub start {
506506
return DateTime::Set::_fix_datetime( $_[0]->{set}->min );
507507
}
508508

509-
sub max {
509+
*min = \&start;
510+
511+
sub end {
510512
return DateTime::Set::_fix_datetime( $_[0]->{set}->max );
511513
}
512514

515+
*max = \&end;
516+
513517
# returns a DateTime::Span
514518
sub span {
515519
my $set = $_[0]->{set}->span;
@@ -646,13 +650,24 @@ the local time are made, except to account for leap seconds. If the
646650
new time zone is floating, then the I<UTC> time is adjusted in order
647651
to leave the local time untouched.
648652
649-
=item * min
650653
651-
=item * max
654+
=item * start, min
655+
656+
=item * end, max
657+
658+
First or last dates in the set.
659+
660+
It is possible that the return value from these methods may be a
661+
C<DateTime::Infinite::Future> or a C<DateTime::Infinite::Past> object.
662+
663+
If the set ends C<before> a date C<$dt>, it returns C<$dt>. Note that
664+
in this case C<$dt> is not a set element - but it is a set boundary.
665+
666+
These methods may return C<undef> if the set is empty.
667+
668+
These methods return just a I<copy> of the actual boundary value.
669+
If you modify the result, the set will not be modified.
652670
653-
First or last dates in the set. These methods may return C<undef> if
654-
the set is empty. It is also possible that these methods may return a
655-
scalar containing infinity or negative infinity.
656671
657672
=item * duration
658673

t/22start_end.t

+102
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
#!/usr/bin/perl -w
2+
3+
use strict;
4+
5+
use Test::More;
6+
plan tests => 34;
7+
8+
use DateTime;
9+
use DateTime::Set;
10+
11+
my $future = DateTime::Infinite::Future->new();
12+
my $past = DateTime::Infinite::Past->new();
13+
my $t1 = new DateTime( year => '1810', month => '11', day => '22' );
14+
my $t2 = new DateTime( year => '1900', month => '11', day => '22' );
15+
16+
# Set tests
17+
18+
{
19+
my $set1 = DateTime::Set->from_datetimes( dates => [ $t1, $t2 ] );
20+
21+
ok( $set1->min->ymd eq '1810-11-22', 'min is ' . $set1->min->ymd );
22+
ok( $set1->max->ymd eq '1900-11-22', 'max is ' . $set1->max->ymd );
23+
ok( $set1->start->ymd eq '1810-11-22', 'start is ' . $set1->start->ymd );
24+
ok( $set1->end->ymd eq '1900-11-22', 'end is ' . $set1->end->ymd );
25+
}
26+
27+
{
28+
my $set1 = DateTime::Set->from_datetimes( dates => [ $past, $future ] );
29+
30+
ok( $set1->min->is_infinite, 'min is infinite' );
31+
ok( $set1->max->is_infinite, 'max is infinite' );
32+
ok( $set1->start->is_infinite, 'start is infinite' );
33+
ok( $set1->end->is_infinite, 'end is infinite' );
34+
}
35+
36+
{
37+
my $set1 = DateTime::Set->from_datetimes( dates => [] );
38+
39+
ok( !defined $set1->min, 'min is undef' );
40+
ok( !defined $set1->max, 'max is undef' );
41+
ok( !defined $set1->start, 'start is undef' );
42+
ok( !defined $set1->end, 'end is undef' );
43+
}
44+
45+
# Span tests
46+
47+
{
48+
my $set1 = DateTime::Span->from_datetimes( start => $t1, end => $t2 );
49+
50+
ok( $set1->min->ymd eq '1810-11-22', 'min is ' . $set1->min->ymd );
51+
ok( $set1->max->ymd eq '1900-11-22', 'max is ' . $set1->max->ymd );
52+
ok( $set1->start->ymd eq '1810-11-22', 'start is ' . $set1->start->ymd );
53+
ok( $set1->end->ymd eq '1900-11-22', 'end is ' . $set1->end->ymd );
54+
}
55+
56+
{
57+
my $set1 = DateTime::Span->from_datetimes( start => $past, end => $future );
58+
59+
ok( $set1->min->is_infinite, 'min is infinite' );
60+
ok( $set1->max->is_infinite, 'max is infinite' );
61+
ok( $set1->start->is_infinite, 'start is infinite' );
62+
ok( $set1->end->is_infinite, 'end is infinite' );
63+
}
64+
65+
{
66+
my $set1 = DateTime::Span->from_datetimes( start => $past );
67+
68+
ok( $set1->max->is_infinite, 'max is infinite' );
69+
ok( $set1->end->is_infinite, 'end is infinite' );
70+
}
71+
72+
# SpanSet tests
73+
74+
{
75+
my $set1 = DateTime::SpanSet->from_spans( spans => [ DateTime::Set->from_datetimes( dates => [ $t1, $t2 ] ) ] );
76+
77+
ok( $set1->min->ymd eq '1810-11-22', 'min is ' . $set1->min->ymd );
78+
ok( $set1->max->ymd eq '1900-11-22', 'max is ' . $set1->max->ymd );
79+
ok( $set1->start->ymd eq '1810-11-22', 'start is ' . $set1->start->ymd );
80+
ok( $set1->end->ymd eq '1900-11-22', 'end is ' . $set1->end->ymd );
81+
}
82+
83+
{
84+
my $set1 = DateTime::SpanSet->from_spans( spans => [ DateTime::Set->from_datetimes( dates => [ $past, $future ] ) ] );
85+
86+
ok( $set1->min->is_infinite, 'min is infinite' );
87+
ok( $set1->max->is_infinite, 'max is infinite' );
88+
ok( $set1->start->is_infinite, 'start is infinite' );
89+
ok( $set1->end->is_infinite, 'end is infinite' );
90+
}
91+
92+
{
93+
my $set1 = DateTime::SpanSet->from_spans( spans => [ ] );
94+
95+
ok( !defined $set1->min, 'min is undef' );
96+
ok( !defined $set1->max, 'max is undef' );
97+
ok( !defined $set1->start, 'start is undef' );
98+
ok( !defined $set1->end, 'end is undef' );
99+
}
100+
101+
1;
102+

0 commit comments

Comments
 (0)