#!/usr/bin/perl -w
use strict;
use Test::More;
plan tests => 11;
use DateTime;
use DateTime::Set;
#======================================================================
# SET ELEMENT IMMUTABILITY TESTS
#======================================================================
my $t1 = new DateTime( year => '1810', month => '11', day => '22' );
my $t2 = new DateTime( year => '1900', month => '11', day => '22' );
my $s1 = DateTime::Set->from_datetimes( dates => [ $t1, $t2 ] );
ok( $s1->min->ymd eq '1810-11-22',
'got 1810-11-22 - min' );
$t1->add( days => 3 );
ok( $t1->ymd eq '1810-11-25',
'change object to 1810-11-25' );
ok( $s1->min->ymd eq '1810-11-22',
'still getting '. $s1->min->ymd . ' - after changing original object' );
$s1->set_time_zone( 'America/Sao_Paulo' );
is( $s1->min->time_zone_long_name, 'America/Sao_Paulo',
'changing object time zone in place' );
$s1->add( hours => 2 );
is( $s1->min->hour, 2 ,
'changing object hour in place' );
# map
{
my $s2 = $s1->map( sub { $_->add( days => 2 ) } );
isa_ok( $s2, 'DateTime::Set' );
is( $s2->min->ymd.",".$s2->max->ymd, "1810-11-24,1900-11-24", "map" );
is( $s1->min->ymd.",".$s1->max->ymd, "1810-11-22,1900-11-22", "map does not mutate set" );
}
# grep
{
my $t = new DateTime( year => '1850' );
my $s2 = $s1->grep( sub { $_ > $t } );
isa_ok( $s2, 'DateTime::Set' );
is( $s2->min->ymd.",".$s2->max->ymd, "1900-11-22,1900-11-22", "grep" );
is( $s1->min->ymd.",".$s1->max->ymd, "1810-11-22,1900-11-22", "grep does not mutate set" );
}
1;