The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w

use strict;
use warnings;

use Test::More;

plan skip_all => "DateTime needed" unless eval { require DateTime };

{
    package Sim::Date;

    use strict;
    use warnings;

    require DateTime;
    use Test::Sims;

    make_rand year  => [1800..2100];

    sub sim_datetime {
        my %args = @_;

        my $year = $args{year} || rand_year();
        my $date = DateTime->new( year => $year );

        my $days_in_year = $date->is_leap_year ? 366 : 365;
        my $secs = rand( $days_in_year * 24 * 60 * 60 );
        $date->add( seconds => $secs );

        $date->set( %args );

        return $date;
    }

    export_sims();
}


{
    package Foo;

    use Test::More;
    Sim::Date->import();

    my $date = sim_datetime();

    cmp_ok $date->year, ">=", 1800;
    cmp_ok $date->year, "<=", 2101;

    $date = sim_datetime(
        year   => 2008,
        second => 23,
    );

    is $date->year, 2008;
    is $date->second, 23;
    note $date;

    $date = sim_datetime(
        month   => 8
    );

    is $date->month, 8;
    note $date;
}


done_testing();