The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl Date-Components.t'

#########################

# change 'tests => 1' to 'tests => last_test_to_print';

use Test::More tests => 90;
#use Test::More qw(no_plan);
BEGIN { use_ok('Date::Components') };
BEGIN { use_ok('Test::Manifest') };
use Date::Components qw(date1_to_date2_delta);

#########################

# Insert your test code below, the Test::More module is use()ed here so read
# its man page ( perldoc Test::More ) for help writing this test script.

ok(1, '1 is true');
is(2+2, 4, ' The sum is four');
isnt(2*3, 5, 'The product is five');
isnt(2 ** 3, 6, "The results is not six");



# Check for faulty input
eval {date1_to_date2_delta('4/11/2002,   12/25/2007')};
ok(($@),      'Two arguments CANNOT be combined into one');

eval {date1_to_date2_delta('whatever')};
ok(($@),      'Invalid parameter');

eval {date1_to_date2_delta([])};
ok(($@),      'Array reference is NOT allowed.');

eval {date1_to_date2_delta({})};
ok(($@),      'Hash reference is NOT allowed.');

eval {date1_to_date2_delta('')};
ok(($@),      'Null reference is NOT allowed.');

eval {date1_to_date2_delta()};
ok(($@),      'TWO date strings are required.');

eval {date1_to_date2_delta('8/15/3003',  '09/11/1336',  '11/16/1001')};
ok(($@),      'TOO many parameters supplied');

eval {date1_to_date2_delta('4/32/2002, 12/25/2007')};
ok(($@),      'Invalid day of month');

eval {date1_to_date2_delta({}, '12/25/2007')};
ok(($@),      'Date MUST be SCALAR');

eval {date1_to_date2_delta('4/32/2002', [])};
ok(($@),      'Date MUST be SCALAR');

eval {date1_to_date2_delta('', '12/25/2007')};
ok(($@),      'NULL is NOT allowed.');

eval {date1_to_date2_delta('4/32/2002', '')};
ok(($@),      'NULL is NOT allowed.');

eval {date1_to_date2_delta('4/32/2002', '12/25/2007')};
ok(($@),      'Dates do not parse successfully.');

eval {date1_to_date2_delta('4/30/2002', '0/25/2007')};
ok(($@),      'Dates do not parse successfully.');




is(date1_to_date2_delta('1/1/-399',                      '12/31/-400'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('12/31/-401',                      '1/1/-400'),  (-1),                    'date1 minus date2 = -1                     ');
is(date1_to_date2_delta('4/11/2002',                       '4/9/2002'),    2,                     'date1 minus date2 =  2                     ');
is(date1_to_date2_delta('12/25/2005',                    '12/29/2005'),  -4,                      'date1 minus date2 = -4                     ');
is(date1_to_date2_delta('12/25/2007',                    '12/25/2003'),  (365*4 + 1),             'date1 minus date2 = (365*4 + 1)            ');
is(date1_to_date2_delta('1/1/2000',                        '1/1/2399'),  (-400*365.25 + 3 + 365), 'date1 minus date2 = (-400*365.25 + 3 + 365)');
is(date1_to_date2_delta('1/1/2000',                        '1/1/2400'),  (-400*365.25 + 3),       'date1 minus date2 = (-400*365.25 + 3)      ');
is(date1_to_date2_delta('1/1/0',                           '1/1/2400'),  ((-400*365.25 + 3)*6),   'date1 minus date2 = ((-400*365.25 + 3)*6)  ');
is(date1_to_date2_delta('1/1/1999',                      '12/31/1998'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('1/1/1',                            '12/31/0'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('1/2/0',                              '1/1/0'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('1/1/0',                           '12/31/-1'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('1/1/-1',                          '12/31/-2'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('1/1/-199',                      '12/31/-200'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('1/1/-299',                      '12/31/-300'),  (1),                     'date1 minus date2 = 1                      ');
is(date1_to_date2_delta('Sat Jan  7 08:50:51   1995',      '1/8/1996'),  (-366),                  'date1 minus date2 = -366                   ');
is(date1_to_date2_delta('3/24/1995',                      '3/25/1996'),  (-367),                  'date1 minus date2 = -367                   ');
is(date1_to_date2_delta('2/3/2001',                        '3/1/1995'),  (6*365 + 2 - 26),        'date1 minus date2 = (6*365 + 2 - 26)       ');
is(date1_to_date2_delta('3/1/1995',                        '2/3/2001'),  (-6*365 - 2 + 26),       'date1 minus date2 = (-6*365 - 2 + 26)      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1544'),  (0),                     'date1 minus date2 = 0                      ');





# Double check the expected outputs for this group
is(date1_to_date2_delta('12/11/1544',                    '12/11/2001'),  -166916,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/2000'),  -166551,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1999'),  -166185,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1601'),  -20819 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1600'),  -20454 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1599'),  -20088 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1543'),  366    ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1201'),  125278 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1200'),  125643 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1199'),  126009 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/801'),   271375 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/800'),   271740 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/799'),   272106 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/401'),   417472 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/400'),   417837 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/399'),   418203 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/1'),     563569 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/0'),     563934 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-1'),    564300 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-399'),  709666 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-400'),  710031 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-401'),  710397 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-799'),  855763 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-800'),  856128 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('12/11/1544',                    '12/11/-801'),  856494 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/2001'),   -801118,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/2000'),   -800753,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1999'),   -800387,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1601'),   -655021,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1600'),   -654656,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1599'),   -654290,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1543'),   -633836,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1201'),   -508924,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1200'),   -508559,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1199'),   -508193,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/801'),    -362827,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/800'),    -362462,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/799'),    -362096,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/401'),    -216730,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/400'),    -216365,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/399'),    -215999,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/1'),      -70633 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/0'),      -70268 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-1'),     -69902 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-399'),   75464  ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-400'),   75829  ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-401'),   76195  ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-799'),   221561 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-800'),   221926 ,                     'date1 minus date2 = 0                      ');
is(date1_to_date2_delta('7/23/-192',                    '12/11/-801'),   222292 ,                     'date1 minus date2 = 0                      ');