The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl
use 5.012;
use lib 'blib/lib', 'blib/arch';
use Benchmark qw/timethis timethese/;
use POSIX();
use Panda::Date qw/now today date rdate :const idate/;
use Panda::Time qw/tzget tzset/;
use Class::Date;
use Data::Dumper qw/Dumper/;
use Storable qw/freeze nfreeze thaw dclone/;
say "START";

    my $cdate = new Class::Date("2013-06-05 23:45:56");
    my $date  = new Panda::Date("2013-06-05 23:45:56");
    my $crel = Class::Date::Rel->new("1M");
    my $rel  = rdate("1M");
    
    timethese(-1, {
        cdate_new_str   => sub { new Class::Date("2013-01-25 21:26:43"); },
        panda_new_str   => sub { new Panda::Date("2013-01-25 21:26:43"); },
        cdate_new_epoch => sub { new Class::Date(1000000000); },
        panda_new_epoch => sub { new Panda::Date(1000000000); },
        panda_new_reuse => sub { state $date = new Panda::Date(0); $date->set(1000000000); },
        
        cdate_now => sub { Class::Date->now; },
        panda_now => sub { now(); },
        
        cdate_truncate     => sub { $cdate->truncate },
        panda_truncate_new => sub { $date->truncate_new },
        panda_truncate     => sub { $date->truncate },
        cdate_today  => sub { Class::Date->now->truncate; },
        panda_today1 => sub { now()->truncate; },
        panda_today2 => sub { today(); },
        cdate_stringify => sub { $cdate->string },
        panda_stringify => sub { $date->to_string },
        cdate_strftime => sub { $cdate->strftime("%H:%M:%S") },
        panda_strftime => sub { $date->strftime("%H:%M:%S") },
        cdate_clone_simple => sub { $cdate->clone },
        panda_clone_simple => sub { $date->clone },
        cdate_clone_change => sub { $cdate->clone(year => 2008, month => 12) },
        panda_clone_change => sub { $date->clone({year => 2008, month => 12}) },
        cdate_rel_new_sec => sub { new Class::Date::Rel 1000 },
        pdate_rel_new_sec => sub { new Panda::Date::Rel 1000 },
        cdate_rel_new_str => sub { new Class::Date::Rel "1Y 2M 3D 4h 5m 6s" },
        panda_rel_new_str => sub { new Panda::Date::Rel "1Y 2M 3D 4h 5m 6s" },
        cdate_add     => sub { $cdate = $cdate + '1M' },
        panda_add_new => sub { $date = $date + '1M' },
        panda_add     => sub { $date += '1M' },
        panda_add2    => sub { $date += MONTH },
        panda_add3    => sub { $date->month($date->month+1) },
        cdate_compare => sub { $cdate == $cdate },
        panda_compare => sub { $date == $date },
    });