The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use warnings;
use Test::More;
use Test::Fatal;

use DateTime::Moonpig;

sub jan {
  my ($day) = @_;
  DateTime::Moonpig->new( year => 2000, month => 1, day => $day );
}

subtest compare => sub {
  my ($self) = @_;
  plan tests => 10;
  my ($j1, $j2) = (jan(1), jan(2));
  cmp_ok($j1, '==', $j1);
  cmp_ok($j1, '!=', $j2);
  ok(! $j1->precedes($j1));
  ok(  $j1->precedes($j2));
  ok(! $j2->precedes($j1));
  ok(! $j2->precedes($j2));
  ok(! $j1->follows($j1));
  ok(! $j1->follows($j2));
  ok(  $j2->follows($j1));
  ok(! $j2->follows($j2));
};

my $now_pair  = DateTime::Moonpig->from_epoch(epoch => $^T);
my $now_epoch = DateTime::Moonpig->new($^T);

cmp_ok($now_pair, '==', $now_epoch, 'one-arg constructor for M::DateTime');

my $today     = $now_epoch;
my $yesterday = DateTime::Moonpig->new($^T - 86400);
cmp_ok( ($today - 86400), '==', $yesterday, '$dt - $secs'),;

like(
  exception { 86400 - $yesterday },
  qr/forbidden/,
  '$secs - $dt; fatal!',
);

cmp_ok($today, '>', $yesterday, '$today > $yesterday');
cmp_ok($yesterday, '<', $today, '$yesterday < $today');

ok($yesterday->precedes($today), "yesterday precedes today");
ok( ! $yesterday->follows($today), "yesterday doesn't follow today");

ok($today->follows($yesterday), "today follows yesterday");
ok(! $today->precedes($yesterday), "today doesn't precede yesterday");

my $birthday = DateTime::Moonpig->new(
  year      => 1978,
  month     => 7,
  day       => 20,
  hour      => 5,
  minute    => 0,
  second    => 32,
  time_zone => "UTC",
);

my $st = '1978-07-20 05:00:32';

is($birthday->st, $st, '->st formatter works');

done_testing;