use Test::More;
use DateTime::Ordinal;

sub yawn {
	my ($format, $expected) = @_;
	my %default_date = (
		year       => 3000,
		month      => 1,
		day        => 1,
		hour       => 1,
		minute     => 1,
		second     => 1,
		nanosecond => 500000000,
		time_zone => '+00:00'
	);
	%default_date = (%default_date, %{$data});
	my $dt = DateTime::Ordinal->new(%default_date);
	is ($dt->strftime($format), $expected, "expected - $expected");
}

yawn('%{day}', 1);
yawn('%{day}(f)', 'one');
yawn('%{day}(o)', '1st');
yawn('%{day}(of)', 'first');

yawn('%d', '01');
yawn('%d(o)', '1st');
yawn('%d(f)', 'one');
yawn('%d(of)', 'first');

yawn('%A the %d(o) of %B, %Y', 'Wednesday the 1st of January, 3000');
yawn('%A the %d(of) of %B, %Y', 'Wednesday the first of January, 3000');
yawn('%A the %d(f) of %B, %Y', 'Wednesday the one of January, 3000');

yawn('%m(o) month of the year', '1st month of the year');
yawn('%m(of) month of the year', 'first month of the year');
yawn('%m(f) month of the year', 'one month of the year');

yawn('the %Y(o) year', 'the 3000th year');
yawn('the %Y(f) year', 'the three thousand year');
yawn('the %Y(of) year', 'the three thousandth year');

yawn("It's the %M(o) minute of the %H(o) hour in the %j(o) day within the %m(o) month of the year", "It's the 1st minute of the 1st hour in the 1st day within the 1st month of the year");

yawn("It's the %M(of) minute of the %H(of) hour in the %j(of) day within the %m(of) month of the year", "It's the first minute of the first hour in the first day within the first month of the year");


my $dt = DateTime::Ordinal->new(
	year       => 3000,
	month      => 4,
	day        => 1,
	hour       => 2,
	minute     => 3,
	second     => 4,
);

is($dt->strftime("It's the %M(of) minute of the %H(o) hour on day %d(f) in the %m(o) month within the year %Y(f)"), "It's the third minute of the 2nd hour on day one in the 4th month within the year three thousand");


done_testing();