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

# find out why it died if not running under make

$debug = 0; 

$Time::ParseDate::debug = $debug;

BEGIN {
	$okat = 12;
	$ENV{'LANG'} = 'C';
	$ENV{'TZ'} = 'PST8PDT'; 

	%k = (
		'%' =>	'%',
		'a' =>	'Sat',
		'A' =>	'Saturday',
		'b' =>	'Nov',
		'h' =>	'Nov',
		'B' =>	'November',
		'c' =>	"Sat Nov 19 21:05:57 1994",
		'd' =>	'19',
		'D' =>	'11/19/94',
		'e' =>	'19',
		'f' =>	'.500',
		'F' =>	'.500000',
		'H' =>	'21',
		'I' =>	'09',
		'j' =>	'323',
		'k' =>	'21',
		'l' =>	' 9',
		'm' =>	'11',
		'M' =>	'05',
		'n' =>	"\n",
		'o' =>	'19th',
		'p' =>	"PM",
		'r' =>	"09:05:57 PM",
		'R' =>	"21:05",
		'S' =>	"57",
		't' =>	"\t",
		'T' =>	"21:05:57",
		'U' =>	"46",
		'v' =>	"19-Nov-1994",
		'w' =>	"6",
		'W' =>	"46",
		'x' =>	"11/19/94",
		'y' =>  "94",
		'Y' =>  "1994",
		'X' =>	"21:05:57",
		'Z' =>	"PST"
		);

	$sdt_start_line = __LINE__+2;
	@sdt = (
		796969332, ['950404 00:22:12 "EDT'],
		796969332, ['950404 00:22:12.500 "EDT'],
		796969332.5, ['950404 00:22:12.500 "EDT', SUBSECOND => 1],
		786437763, ['Fri Dec  2 22:56:03 1994', NOW => 785300000],
		786437763, ['Fri Dec  2 22:56:03 1994,', NOW => 785300000, WHOLE => 0],
		786408963, ['Fri Dec  2 22:56:03 GMT+0 1994', NOW => 785300000],
		786408963, ['Fri Dec  2 22:56:03 GMT+0 1994,', NOW => 785300000, WHOLE => 0],
		786408963, ['Fri Dec  2 22:56:03.500 GMT+0 1994', NOW => 785300000],
		786408963.5, ['Fri Dec  2 22:56:03.500 GMT+0 1994', SUBSECOND => 1, NOW => 785300000],
		786437763, ['Fri Dec  2 22:56:03 GMT-8 1994', NOW => 785300000],
		786437763, ['Fri Dec  2 22:56:03 GMT-8 1994, stuff', NOW => 785300000, WHOLE => 0],
		786437760, ['94/12/02.22:56', NOW => 785300000],
		786437760, ['1994/12/02 10:56Pm', NOW => 785300000],
		786437760, ['1994/12/2 10:56 PM', NOW => 785300000],
		786437760, ['12/02/94 22:56', NOW => 785300000],
		786437760, ['12/02/94 22:56.', NOW => 785300000, WHOLE => 0],
		786437760, ['12/2/94 10:56Pm', NOW => 785300000],
		786437760, ['94/12/2 10:56 pm', NOW => 785300000],
		786437763, ['94/12/02 22:56:03', NOW => 785300000],   
		786437763, ['94/12/02 22:56:03.500', NOW => 785300000],   
		786437763.5, ['94/12/02 22:56:03.500', SUBSECOND => 1, NOW => 785300000],   
		786437763, ['94/12/02 10:56:03:500PM', NOW => 785300000],   
		786437763.5, ['94/12/02 10:56:03:500PM', SUBSECOND => 1, NOW => 785300000],   
		786437760, ['10:56Pm 94/12/02', NOW => 785300000],
		786437763, ['22:56:03 1994/12/02', NOW => 785300000],
		786437763, ['22:56:03.5 1994/12/02', NOW => 785300000],
		786437763.5, ['22:56:03.5 1994/12/02', SUBSECOND => 1,  NOW => 785300000],
		786437760, ['22:56 1994/12/2', NOW => 785300000],
		786437760, ['10:56PM 12/02/94', NOW => 785300000],
		786437760, ['10:56 pm 12/2/94', NOW => 785300000],
#		786437760, ['10:56 pm 12/2/94, when', NOW => 785300000, WHOLE => 0],
		786437760, ['22:56 94/12/2', NOW => 785300000],
		786437760, ['10:56Pm 94/12/02', NOW => 785300000],
		796980132, ['Tue Apr 4 00:22:12 PDT 1995'],
		796980132, ['April 4th 1995 12:22:12AM', ZONE => PDT],
		827878812, ['Tue Mar 26 14:20:12 1996'],		
		827878812, ['Tue Mar 26 14:20:12 1996', SUBSECOND => 1],
		827878812, ['Tue Mar 26 14:20:12.5 1996, and then', WHOLE => 0],
		827878812.5, ['Tue Mar 26 14:20:12.5 1996', SUBSECOND => 1],
		827878812, ['Tue Mar 26 14:20:12 GMT-0800 1996'],
		827878812, ['Tue Mar 26 17:20:12 EST 1996'],
		827878812, ['Tue Mar 26 17:20:12 EST 1996, before Joe', WHOLE => 0],
		827878812, ['Tue Mar 26 17:20:12 GMT-0500 1996'],
		827878812, ['Tue Mar 26 22:20:12 GMT 1996'],
		827878812, ['Tue Mar 26 22:20:12 +0000 (GMT) 1996'],
		827878812, ['Tue, 26 Mar 22:20:12 +0000 (GMT) 1996'],
		784394917, ['Wed, 9 Nov 1994 7:28:37'],
		784394917, ['Wed, 9 Nov 1994 7:28:37: Seven', WHOLE => 0],
		784887518, ['Tue, 15 Nov 1994 0:18:38'], 
		788058300, ['21 dec 17:05', NOW => 785300000],
		802940400, ['06/12/1995'],
		802940400, ['12/06/1995', UK => 1],
		802940400, ['12/06/95', UK => 1],
		802940400, ['06.12.1995'],
		802940400, ['06.12.1995, Fred', WHOLE => 0],
		803026800, ['13/06/1995'],
		803026800, ['13/06/95'],
		784394917, ['Wed, 9 Nov 1994 15:28:37 +0000 (GMT)'],
		827878812, ['Tue Mar 26 23:20:12 GMT+0100 1996'],
		827878812, ['Wed Mar 27 05:20:12 GMT+0700 1996'],
		827878812, ['Wed Mar 27 05:20:12 +0700 1996'],
		827878812, ['Wed Mar 27 05:20:12 +07:00 1996'],
		827878812, ['Wed Mar 27 05:20:12 +0700 (EST) 1996'],
		796980132, ['1995/04/04 00:22:12 PDT'],
		796720932, ['1995/04 00:22:12 PDT'],
		796980132, ['1995/04/04 00:22:12 PDT'],
		796980132, ['Tue, 4 Apr 95 00:22:12 PDT'],
		796980132, ['Tue 4 Apr 1995 00:22:12 PDT'],
		796980132, ['04 Apr 1995 00:22:12 PDT'],
		796980132, ['4 Apr 1995 00:22:12 PDT'],
		796980132, ['Tue, 04 Apr 00:22:12 PDT', NOW => 796980132],
		796980132, ['Tue 04 Apr 00:22:12 PDT', NOW => 796980132],
		796980132, ['04 Apr 00:22:12 PDT', NOW => 796980132],
		796980132, ['Apr 04 00:22:12 PDT', NOW => 796980132],
		796980132, ['Apr 4 00:22:12 PDT', NOW => 796980132],
		796980132, ['Tue, Apr 4 00:22:12 PDT', NOW => 796980132],
		796980132, ['Apr 4 1995 00:22:12 PDT'],
		796980132, ['April 4th 1995 00:22:12 PDT'],
		796980132, ["April 4th, '95 00:22:12 PDT"],
		796980132, ["April 4th 00:22:12 PDT", NOW => 796980132],
		796980132, ['95/04/04 00:22:12 PDT'],
		796980132, ['04/04/95 00:22:12 PDT'],
		796720932, ['95/04 00:22:12 PDT'],
		796720932, ['04/95 00:22:12 PDT'],
		796980132, ['04/04 00:22:12 PDT', NOW => 796980132],
		796980132, ['040495 00:22:12 PDT'],
		796980132, ['950404 00:22:12 PDT'],
		796969332, ['950404 00:22:12 EDT'],
		796980132, ['04.04.95 00:22:12', ZONE => PDT],
		796980120, ['04.04.95 00:22', ZONE => PDT],
		796978800, ['04.04.95 12AM', ZONE => PDT],
		796978800, ['04.04.95 12am', ZONE => PDT],
		796980120, ['04.04.95 0022', ZONE => PDT],
		796980132, ['04.04.95 12:22:12am', ZONE => PDT],
		797023332, ['950404 122212', ZONE => PDT],
		797023332, ['122212 950404', ZONE => PDT, TIMEFIRST => 1],
		796980120, ['04.04.95 12:22AM', ZONE => PDT],
		796978800, ['95/04/04 midnight', ZONE => PDT],
		796978800, ['95/04/04 Midnight', ZONE => PDT],
		797022000, ['95/04/04 Noon', ZONE => PDT],
		797022000, ['95/04/04 noon', ZONE => PDT],
		797022000, ['95/04/04 12Pm', ZONE => PDT],
		796978803, ['+3 secs', NOW => 796978800],
		796979600, ['+0800 seconds', NOW => 796978800],
		796979600, ['+0800 seconds, Nothing', NOW => 796978800, WHOLE => 0],
		796986000, ['+2 hour', NOW => 796978800],
		796979400, ['+10min', NOW => 796978800],
		796979400, ['+10 minutes', NOW => 796978800],
		797011203, ['95/04/04 +3 secs', ZONE => EDT, NOW => 796935600],
		797062935, ['4 day +3 secs', ZONE => PDT, NOW => 796720932],
		797062935, ['now + 4 days +3 secs', ZONE => PDT, NOW => 796720932],
		797062935, ['now +4 days +3 secs', ZONE => PDT, NOW => 796720932],
		796720932, ['now', ZONE => PDT, NOW => 796720932],
		796720936, ['now +4 secs', ZONE => PDT, NOW => 796720932],
		796735332, ['now +4 hours', ZONE => PDT, NOW => 796720932],
		797062935, ['+4 days +3 secs', ZONE => PDT, NOW => 796720932],
		797062935, ['+ 4 days +3 secs', ZONE => PDT, NOW => 796720932],
		797062929, ['4 day -3 secs', ZONE => PDT, NOW => 796720932],
		796375329, ['-4 day -3 secs', ZONE => PDT, NOW => 796720932],
		796375329, ['now - 4 days -3 secs', ZONE => PDT, NOW => 796720932],
		796375329, ['now -4 days -3 secs', ZONE => PDT, NOW => 796720932],
		796720928, ['now -4 secs', ZONE => PDT, NOW => 796720932],
		796706532, ['now -4 hours', ZONE => PDT, NOW => 796720932],
		796375329, ['-4 days -3 secs', ZONE => PDT, NOW => 796720932],
		796375329, ['- 4 days -3 secs', ZONE => PDT, NOW => 796720932],
		797322132, ['1 week', NOW => 796720932],
		801987732, ['2 month', NOW => 796720932],
		804579732, ['3 months', NOW => 796720932],
		804579732, ['3 months, 7 days', NOW => 796720932, WHOLE => 0],  # perhaps this is wrong
		859879332, ['2 years', NOW => 796720932],
		797671332, ['Wed after next', NOW => 796980132],
		797498532, ['next monday', NOW => 796980132],
		797584932, ['next tuesday', NOW => 796980132],
		797584932, ['next tuesday, the 9th', NOW => 796980132, WHOLE => 0],  # perhaps this is wrong
		797066532, ['next wEd', NOW => 796980132],
		796378932, ['last tuesday', NOW => 796980132],
		796465332, ['last wednesday', NOW => 796980132],
		796893732, ['last monday', NOW => 796980132],
		797036400, ['today at 4pm', NOW => 796980132],
		797080932, ['tomorrow +4hours', NOW => 796980132],
		796950000, ['yesterday at 4pm', NOW => 796980132],
		796378932, ['last week', NOW => 796980132],
		794305332, ['last month', NOW => 796980132],
		765444132, ['last year', NOW => 796980132],
		797584932, ['next week', NOW => 796980132],
		799572132, ['next month', NOW => 796980132],
		828606132, ['next year', NOW => 796980132],
		836391600, ['July 3rd, 4:00AM 1996 ', DATE_REQUIRED =>1, TIME_REQUIRED=>1, NO_RELATIVE=>1, NOW=>796980132],
		783718105, ['Tue, 01 Nov 1994 11:28:25 -0800'],
		202779300, ['5:35 pm june 4th CST 1976'],
		236898000, ['5pm EDT 4th july 1977'],
		236898000, ['5pm EDT 4 july 1977'],
		819594300, ['21-dec 17:05', NOW => 796980132],
		788058300, ['21-dec 17:05', NOW => 796980132, PREFER_PAST => 1],
		819594300, ['21-dec 17:05', NOW => 796980132, PREFER_FUTURE => 1],
		793415100, ['21-feb 17:05', NOW => 796980132, PREFER_PAST => 1],
		824951100, ['21-feb 17:05', NOW => 796980132, PREFER_FUTURE => 1],
		819594300, ['21/dec 17:05', NOW => 796980132],
		756522300, ['21/dec/93 17:05'],
		788058300, ['dec 21 1994 17:05'],
		788058300, ['dec 21 94 17:05'],
		788058300, ['dec 21 94 17:05'],
		796465332, ['Wednesday', NOW => 796980132, PREFER_PAST => 1],
		796378932, ['Tuesday', NOW => 796980132, PREFER_PAST => 1],
		796893732, ['Monday', NOW => 796980132, PREFER_PAST => 1],
		797066532, ['Wednesday', NOW => 796980132, PREFER_FUTURE => 1],
		797584932, ['Tuesday', NOW => 796980132, PREFER_FUTURE => 1],
		797498532, ['Monday', NOW => 796980132, PREFER_FUTURE => 1],
		802915200, ['06/12/1995', ZONE => GMT],
		828860438, ['06/Apr/1996:23:00:38 -0800'],
		828860438, ['06/Apr/1996:23:00:38'],
		828943238, ['07/Apr/1996:23:00:38 -0700'],
		828878618, ['07/Apr/1996:12:03:38', ZONE => GMT],
		828856838, ['06/Apr/1996:23:00:38 -0700'],
		828946838, ['07/Apr/1996:23:00:38 -0800'],
		895474800, ['5/18/1998'],
		796980132, ['04/Apr/1995:00:22:12', ZONE => PDT], 
		796983732, ['04/Apr/1995:00:22:12 -0800'], 
		796983732, ['04/Apr/1995:00:22:12', ZONE => PST], 
		202772100, ['5:35 pm june 4th 1976 EDT'],
		796892400, ['04/03', NOW => 796980132, PREFER_PAST => 1],
		765702000, ['04/07', NOW => 796980132, PREFER_PAST => 1],
		883641600, ['1/1/1998', VALIDATE => 1],
		852105600, ['1/1/1997'],
		852105600, ['last year', NOW => 883641600],
		820483200, ['-2 years', NOW => 883641600],
		832402800, ['-2 years', NOW => 895474800],
		891864000, ['+3 days', NOW => 891608400],
		891777600, ['+2 days', NOW => 891608400],
		902938515, ['1998-08-12 12:15:15', ZONE => 'EDT'],
		946684800, ['2000-01-01 00:00:00', ZONE => GMT],
		1262304000, ['2010-01-01 00:00:00', ZONE => GMT],
		757065600, ['12/28/93', NOW => 1262304000],
		1924675200, ['12/28/30', NOW => 1262304000],
		946751430, ['Jan  1 2000 10:30:30AM'],
		946722083, ['Sat Jan  1 02:21:23 2000'],
		946774740, ['Jan 1 2000 4:59PM', WHOLE => 1],
		946774740, ['Jan  1 2000  4:59PM', WHOLE => 1],
		0, ['1970/01/01 00:00:00', ZONE => GMT],
		796980132, ['Tue 4 Apr 1995 00:22:12 PDT 8', WHOLE => 0],
		789008700, ['dec 32 94 17:05'],
		796983072, ['1995/04/04 00:71:12 PDT'],
		undef, ['1995/04/04 00:71:12 PDT', VALIDATE => 1],
		undef, ['38/38/21', VALIDATE => 1],
		undef, ['dec 32 94 17:05', VALIDATE => 1],
		undef, ['Tue 4 Apr 1995 00:22:12 PDT 8', WHOLE => 1],
		undef, ['Tue 4 Apr 199 00:22:12 PDT'],
		1924675200, ['12/28/30', NOW => 1262304000, PREFUR_FUTURE => 1],
		1924675200, ['28/12/30', NOW => 1262304000, PREFUR_FUTURE => 1, UK => 1],
		-1578240000, ['12/28/19', NOW => 902938515, PREFER_PAST => 1],
		-347155200, ['1959-01-01 00:00:00', ZONE => GMT],
		-158083200, ['12/28/64', NOW => 902938515],
		-1231084800, ['12/28/30', NOW => 1262304000, PREFER_PAST => 1],
		-345600, ['1969-12-28 00:00:00', ZONE => GMT],
		-1231084800, ['28/12/30', NOW => 1262304000, PREFER_PAST => 1, UK => 1],
		1577520000, ['12/28/19', NOW => 902938515, PREFER_FUTURE => 1],
		1766908800, ['12/28/25', NOW => 902938515],
		958521600, ['17 May 2000 00:00:00 GMT'],
		979718400, ['1/17/01', NOW => 993067736],
		995353200, ['7/17/01', NOW => 993067736],
		995353200, ['7/17/01', NOW => 993067736, PREFER_FUTURE => 1],
		995366188, ['17/07/2001 18:36:28 +0800', WHOLE => 1],
		995366188, ['17/07/2001 18:36:28+0800', WHOLE => 1],
		995330188, ['17/07/2001 0:36:28+0000', WHOLE => 1],
		995416588, ['17/07/2001 24:36:28+0000', WHOLE => 1],
		undef, ['17/07/2001 24:36:28+0000', WHOLE => 1, VALIDATE => 1],
		995330188, ['17/07/2001 0:36:28+0000', WHOLE => 1, VALIDATE => 1],
		796375332, ['4 days ago', WHOLE =>1, ZONE => PDT, NOW => 796720932],
		796720931, ['1 second ago', WHOLE =>1, ZONE => PDT, NOW => 796720932],
		796375331, ['4 days 1 second ago', WHOLE =>1, ZONE => PDT, NOW => 796720932],
		796375331, ['1 second 4 days ago', WHOLE =>1, ZONE => PDT, NOW => 796720932],
		953467299, ['Sun Mar 19 17:31:39 IST 2000'],
		784111777, ['Sunday, 06-Nov-94 08:49:37 GMT' ],
		954933672, ['Wed Apr  5 13:21:12 MET DST 2000' ],
		729724230, ['1993-02-14T13:10:30', NOW => 796980132],
#ISO8601		729724230, ['19930214T131030', NOW => 796980132],
		14400, ['+4 hours', NOW => 0],
		345600, ['+4 days', NOW => 0],
		957744000, ['Sunday before last', NOW => 958521600],
		957139200, ['Sunday before last', NOW => 958348800],
		796720930.5, ['1.5 second ago', WHOLE =>1.5, ZONE => PDT, NOW => 796720932],
		796720930.5, ['1 1/2 second ago', WHOLE =>1.5, ZONE => PDT, NOW => 796720932],
		5, ['5 seconds', UK => 1, NOW => 0],
		6, ['5 seconds', UK => 1, NOW => 1],
		1078876800, ['2004-03-10 00:00:00 GMT'],
		1081551599, ['-1 second +1 month', NOW => 1078876800, ZONE => 'PDT'],
		1081526399, ['-1 second +1 month', NOW => 1078876800, ZONE => 'GMT'],
		1304661600, ['11pm', NOW => 1304611460],
		1304636400, ['11pm', NOW => 1304611460, GMT => 1],
		1304557200, ['1am', NOW => 1304611460, GMT => 1],
		1246950000, ['2009/7/7'],
		-1636819200, ['1918/2/18'],
		1246950000, ['2009/7/7'],
		1256435700, ['2009-10-25 02:55:00', ZONE => 'MET'],
		1256439300, ['+ 1 hour', NOW => 1256435700, ZONE => 'MET'],
		1256464500, ['2009-10-25 02:55:00', ZONE => 'PDT'],
		1256468100, ['+ 1 hour', NOW => 1256464500, ZONE => 'PDT'],
		1256468100, ['2009-10-25 02:55:00', ZONE => 'PST'],
		1256471700, ['+ 1 hour', NOW => 1256468100, ZONE => 'PST'],
		[1304622000, 'Foo'], ['12pm Foo', NOW => 1304611460, WHOLE => 0],
		undef, ['Foo 12pm', NOW => 1304611460, WHOLE => 0],
		undef, ['Foo noon', NOW => 1304611460, WHOLE => 0],
		undef, ['Foo midnight', NOW => 1304611460, WHOLE => 0],
		1011252345, ['Wed Jan 16 23:25:45 2002'],
		1012550400, ['Feb 1', NOW => 1011252345],
		1012550400, ['Feb 1', NOW => 1011252345, FUZZY => 1, PREFER_FUTURE => 1],
		1012550400, ['2/1/02', NOW => 1011252345, FUZZY => 1, PREFER_FUTURE => 1],
		1011247200, ['6am', GMT => 1, NOW => 1011252345],
		1256435700, ['2009-10-25 02:55:00', ZONE => 'MEZ'],
		1348073459, ['2012-09-19 09:50:59'],
		1348073459.344702843, ['2012-09-19 09:50:59.344702843', SUBSECOND => 1],
		1304233200, ['May 1, 2011', WHOLE => 1],
		1304233200, ['May 1, 2011', WHOLE => 0],
		1301641200, ['April 1, 2011', WHOLE => 0],
		1301641200, ['April 1, 2011', WHOLE => 1],
		);

	%tztests = (
		"YDT"  =>   -8*3600,         # Yukon Daylight
		"HDT"  =>   -9*3600,         # Hawaii Daylight
		"BST"  =>   +1*3600,         # British Summer   
		"MEST" =>   +2*3600         # Middle European Summer  
	);

}

use Time::CTime;
use Time::JulianDay;
use Time::ParseDate;
use Time::Local;
use Time::Timezone;
#use POSIX qw(tzset);

#-use POSIX qw(tzset);
# - -eval { tzset }; # Might not be implemented everywhere +use Time::Piece;

#eval { tzset };                 # Might not be implemented everywhere

use Time::Piece;

my @x = localtime(785307957);
my @y = gmtime(785307957);
my $hd = $y[2] - $x[2];
$hd += 24 if $hd < 0;
$hd %= 24;
if ($hd != 8) {
	print "1..0 # Skipped: It seems localtime() does not honor \$ENV{TZ} when set in the test script.  Please set the TZ environment variable to PST8PDT and rerun.";
	print "hd = $hd, x = @x, y = @y\n" if $debug || -t STDOUT;
	exit 0;
}

my $before_big = $okat-1+scalar(keys %k)+scalar(keys %tztests);

printf "1..%d\n", $before_big + scalar(grep(ref($_), @sdt));

print "ok 1\n";

$epoch = ($Time::JulianDay::jd_epoch - 2440588) * 86400
	+ $Time::JulianDay::jd_epoch_remainder;
print STDERR "\nEpoch = $epoch\n" if $epoch;

$etime = 785307957.5 - $epoch;


eval " 1/0; ";  # tests a bug in ctime!
$x = ctime($etime);
print $x eq "Sat Nov 19 21:05:57 PST 1994\n" ? "ok 2\n" : "not ok 2\n";

print julian_day(1994,11,19) == 2449676 ? "ok 3\n" : "not ok 3\n";

@x = inverse_julian_day(2449676);

print (($x[0] == 1994 and $x[1] == 11 and $x[2] == 19) ? "ok 4\n" : "not ok 4\n");

print "ok 5\n";

print day_of_week(2449676) == 6 ? "ok 6\n" : "not ok 6\n";

$bs = 786439995 - $epoch;

use vars qw($isdst $wday $yday);
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime($bs);

$jdtgm = jd_timegm($sec,$min,$hour,$mday,$mon,$year);
$jdtl = jd_timelocal($sec,$min,$hour,$mday,$mon,$year);
$tltl = timelocal($sec,$min,$hour,$mday,$mon,$year);

$year += 100 if $year < 70;
$jd = julian_day($year+1900, $mon+1, $mday);
$s = jd_secondsgm($jd, $hour, $min, $sec);
$lo = tz_local_offset($bs);

print <<"" if $debug;
	s = $s
	bs = $bs
	jdtgm = $jdtgm
	jdtl = $jdtl
	tltl = $tltl
	lo = $lo

print $s == $bs ? "ok 7\n" : "not ok 7\n";

print $jdtgm == $bs ? "ok 8\n" : "not ok 8\n";

print $jdtl == $bs+8*3600 ? "ok 9\n" : "not ok 9\n";

print $tltl == $bs+8*3600 ? "ok 10\n" : "not ok 10\n";

print $lo == - 28800 ? "ok 11\n" : "no ok 11\n";

################### make these last...
$c = $okat;

@lt = localtime($etime);
$lt[0] += ($etime - int($etime));
foreach $i (sort keys %k) {
	$x = strftime("-%$i-", @lt);
	print $x eq "-$k{$i}-" ? "ok $c # $i - $k{$i}\n" : "not ok $c # $i - $k{$i}: $x\n";
	if ($debug && $x ne "-$k{$i}-") {
		print "strftime(\"-%$i-\") = $x.\n\tshould be: $k{$i}.\n";
		exit(0);
	}
	$c++;
}

foreach $i (keys %tztests) {
	$tzo = tz_offset($i,799572132);
	print $tzo eq $tztests{$i} ? "ok $c\n" : "not ok $c\n";
	if (($debug || -t STDOUT) && $tzo ne $tztests{$i}) {
		print "tz_offset($i) = $tzo != $tztests{$i}\n";
		exit(0);
	}
	$c++;
}


while (@sdt) {
	$es = shift(@sdt);
	my $eremaining;
	if (ref($es)) {
		$eremaining = $es->[1];
		$es = $es->[0];
	}
	$es -= $epoch if defined($es);
	$ar = shift(@sdt);
	$toparse = shift(@$ar);
	%opts = @$ar;
	if (defined $opts{NOW}) {
		$opts{NOW} -= $epoch;
	}
	$opts{WHOLE} = 1 unless defined $opts{WHOLE};
	my $remaining;
	if (defined $eremaining) {
		($s, $remaining) = parsedate($toparse, %opts);
	} else {
		$s = parsedate($toparse, %opts);
	}
	if (! defined($es) && ! defined($s)) {
		print "ok $c # $toparse\n";
	} elsif (defined($es) && defined($s) && ($es == $s || "$es" eq "$s")) {
		print "ok $c # $toparse\n";
	} else {
		print "not ok $c # $toparse\n";
		if (-t STDOUT || $debug) {
			if (defined($es)) {
				print strftime("Expected($es):    %c %Z\n", localtime($es));
			} else {
				print "Expected undef\n";
			}

			$s = 0 unless defined $s;
			print strftime("\tGot($s): %c %Z", localtime($s));
			print strftime(" (%m/%d %I:%M %p GMT)\n", gmtime($s));
			print "\tInput: $toparse\n";
			for my $zk (keys %opts) {
				my $zv = $opts{$zk};
				if ($zk eq 'NOW') {
					print strftime("\t\tNOW => %c %Z\n", localtime($zv));
				} else {
					print "\t\t$zk => $zv\n";
				}
			}
			if (-t STDOUT) {
				print "The parse...\n";
				$Time::ParseDate::debug = 1;
				&parsedate($toparse, %opts);
				printf "Test that failed was on line %d\n",	
					$c-$before_big+$sdt_start_line-1;
				exit(0);
			}
		}
	}
	if (defined($eremaining)) {
		$c++;
		if ($remaining eq $eremaining) {
			print "ok $c # remaining = '$eremaining'\n";
		} else {
			print "not ok $c # remaining = '$eremaining'\n";
			if (-t STDOUT || $debug) {
				print "# got '$remaining' instead\n";
			}
		}
	}
	$c++;
}