# test new xtic code
use Chart::Strip;
use strict;
my $MK = 0;
my $H = 3600;
my $D = $H * 24;
my @t;
eval {
# tests assume US/eastern, en_us. skip if we can't make compat.
require POSIX;
POSIX->import();
$ENV{TZ} = 'EST5EDT';
setlocale( LC_ALL(), "C" );
tzset();
if( localtime(1151726400) ne 'Sat Jul 1 00:00:00 2006' ){
die "tests not configured for this timezone/locale\n";
}
};
if($@){
print "1..0 # Skipped: cannot make timezone/locale compatible\n";
exit;
}
if( localtime(1175400000) ne 'Sun Apr 1 00:00:00 2007' ){
# the US govmit changed the daylight saving time rules.
# most OSes don't know that
# expect the fallout from this to be much worse than y2k.
print "1..0 # Skipped: OS has out of date daylight saving time rules\n";
exit;
}
# return xtic data for specified time range
sub gen {
my $t0 = shift;
my $dur = shift;
my $c = Chart::Strip->new();
$c->add_data( [ {time => $t0, value => 1},
{time => $t0 + $dur, value => 1}],
{ style => 'line' });
$c->plot();
$c->{grid}{x};
}
sub test {
my $t = shift;
my $mk = shift;
if( !ref $t ){
print "$t\n" if $mk;
return 'ok';
}
my $t0 = $t->{start};
my $dur = $t->{dur};
my $exp = $t->{exp};
$dur = $1 * $D if $dur =~ /(\d+)D/;
$dur = $1 * $H if $dur =~ /(\d+)H/;
my $res = gen( $t0, $dur );
my $err;
$err = 1 if @$res != @$exp;
if( $mk ){
my $pv;
for my $r (@$res){
my $dt = $pv ? $r->[0] - $pv : '';
print "$t->{dur}\t$t0\t$r->[0]\t$r->[1]\t$r->[2]\t$dt\n";
$pv = $r->[0];
}
print "\n";
}
for my $e (@$exp){
my $terr;
my $r = shift @$res;
$terr = 1 unless $e->[0] == $r->[0];
$terr = 1 unless $e->[1] == $r->[1];
$terr = 1 unless $e->[2] eq $r->[2];
$err ||= $terr;
print STDERR "error: @$e != @$r\n"
if $terr;
}
$err ? 'not ok' : 'ok';
}
my $pd = '';
while(<DATA>){
chop;
my @l = split;
my $dur = $l[0];
my $t0 = $l[1];
my $exp = [@l[2,3,4,5]];
if( /^\#/ ){
# preserve comments
push @t, $_;
next;
}
next unless $dur;
if($dur eq $pd){
push @{$t[-1]{exp}}, $exp;
}else{
push @t, { dur => $dur, start => $t0, exp => [$exp] };
}
$pd = $dur;
}
print "1..", scalar @t, "\n" unless $MK;
my $n = 1;
foreach my $t (@t){
my $r = test($t, $MK);
print "$r ", $n++, "\n" unless $MK;
}
# duration start expected result: tic-time, redmark, label, delta(not-used)
__END__
2100D 1151726400 1167627600 0 2007
2100D 1151726400 1199163600 0 2008 31536000
2100D 1151726400 1230786000 0 2009 31622400
2100D 1151726400 1262322000 0 2010 31536000
2100D 1151726400 1293858000 0 2011 31536000
2100D 1151726400 1325394000 0 2012 31536000
1500D 1151726400 1151726400 0 01/Jul
1500D 1151726400 1167627600 0 2007 15901200
1500D 1151726400 1183262400 0 01/Jul 15634800
1500D 1151726400 1199163600 0 2008 15901200
1500D 1151726400 1214884800 0 01/Jul 15721200
1500D 1151726400 1230786000 0 2009 15901200
1500D 1151726400 1246420800 0 01/Jul 15634800
1500D 1151726400 1262322000 0 2010 15901200
1500D 1151726400 1277956800 0 01/Jul 15634800
750D 1151726400 1151726400 0 01/Jul
750D 1151726400 1159675200 0 01/Oct 7948800
750D 1151726400 1167627600 1 2007 7952400
750D 1151726400 1175400000 0 01/Apr 7776000
750D 1151726400 1183262400 0 01/Jul 7858800
750D 1151726400 1191211200 0 01/Oct 7948800
750D 1151726400 1199163600 1 2008 7952400
750D 1151726400 1207022400 0 01/Apr 7862400
750D 1151726400 1214884800 0 01/Jul 7858800
400D 1151726400 1151726400 0 01/Jul
400D 1151726400 1157083200 0 01/Sep 5356800
400D 1151726400 1162357200 0 01/Nov 5274000
400D 1151726400 1167627600 1 2007 5270400
400D 1151726400 1172725200 0 01/Mar 5097600
400D 1151726400 1177992000 0 01/May 5266800
400D 1151726400 1183262400 0 01/Jul 5270400
200D 1151726400 1151726400 0 01/Jul
200D 1151726400 1154404800 0 01/Aug 2678400
200D 1151726400 1157083200 0 01/Sep 2678400
200D 1151726400 1159675200 0 01/Oct 2592000
200D 1151726400 1162357200 0 01/Nov 2682000
200D 1151726400 1164949200 0 01/Dec 2592000
200D 1151726400 1167627600 1 2007 2678400
100D 1151726400 1151726400 0 01/Jul
100D 1151726400 1152936000 0 15/Jul 1209600
100D 1151726400 1154404800 0 01/Aug 1468800
100D 1151726400 1155614400 0 15/Aug 1209600
100D 1151726400 1157083200 0 01/Sep 1468800
100D 1151726400 1158292800 0 15/Sep 1209600
100D 1151726400 1159675200 0 01/Oct 1382400
50D 1151726400 1151726400 1 01/Jul
50D 1151726400 1152331200 0 08/Jul 604800
50D 1151726400 1152936000 0 15/Jul 604800
50D 1151726400 1153540800 0 22/Jul 604800
50D 1151726400 1154404800 1 01/Aug 864000
50D 1151726400 1155009600 0 08/Aug 604800
50D 1151726400 1155614400 0 15/Aug 604800
20D 1151726400 1151726400 1 01/Jul
20D 1151726400 1151899200 0 03/Jul 172800
20D 1151726400 1152072000 0 05/Jul 172800
20D 1151726400 1152244800 0 07/Jul 172800
20D 1151726400 1152417600 0 09/Jul 172800
20D 1151726400 1152590400 0 11/Jul 172800
20D 1151726400 1152763200 0 13/Jul 172800
20D 1151726400 1152936000 0 15/Jul 172800
20D 1151726400 1153108800 0 17/Jul 172800
20D 1151726400 1153281600 0 19/Jul 172800
12D 1151726400 1151726400 0 Sat
12D 1151726400 1151812800 1 02/Jul 86400
12D 1151726400 1151899200 0 Mon 86400
12D 1151726400 1151985600 0 Tue 86400
12D 1151726400 1152072000 0 Wed 86400
12D 1151726400 1152158400 0 Thu 86400
12D 1151726400 1152244800 0 Fri 86400
12D 1151726400 1152331200 0 Sat 86400
12D 1151726400 1152417600 1 09/Jul 86400
12D 1151726400 1152504000 0 Mon 86400
12D 1151726400 1152590400 0 Tue 86400
12D 1151726400 1152676800 0 Wed 86400
6D 1151726400 1151726400 0 Sat
6D 1151726400 1151812800 1 02/Jul 86400
6D 1151726400 1151899200 0 Mon 86400
6D 1151726400 1151985600 0 Tue 86400
6D 1151726400 1152072000 0 Wed 86400
6D 1151726400 1152158400 0 Thu 86400
3D 1151726400 1151726400 1 01/Jul
3D 1151726400 1151748000 0 6:00 21600
3D 1151726400 1151769600 0 12:00 21600
3D 1151726400 1151791200 0 18:00 21600
3D 1151726400 1151812800 1 02/Jul 21600
3D 1151726400 1151834400 0 6:00 21600
3D 1151726400 1151856000 0 12:00 21600
3D 1151726400 1151877600 0 18:00 21600
3D 1151726400 1151899200 1 03/Jul 21600
3D 1151726400 1151920800 0 6:00 21600
3D 1151726400 1151942400 0 12:00 21600
3D 1151726400 1151964000 0 18:00 21600
2D 1151726400 1151726400 1 01/Jul
2D 1151726400 1151740800 0 4:00 14400
2D 1151726400 1151755200 0 8:00 14400
2D 1151726400 1151769600 0 12:00 14400
2D 1151726400 1151784000 0 16:00 14400
2D 1151726400 1151798400 0 20:00 14400
2D 1151726400 1151812800 1 02/Jul 14400
2D 1151726400 1151827200 0 4:00 14400
2D 1151726400 1151841600 0 8:00 14400
2D 1151726400 1151856000 0 12:00 14400
2D 1151726400 1151870400 0 16:00 14400
2D 1151726400 1151884800 0 20:00 14400
18H 1151726400 1151726400 1 01/Jul
18H 1151726400 1151733600 0 2:00 7200
18H 1151726400 1151740800 0 4:00 7200
18H 1151726400 1151748000 0 6:00 7200
18H 1151726400 1151755200 0 8:00 7200
18H 1151726400 1151762400 0 10:00 7200
18H 1151726400 1151769600 0 12:00 7200
18H 1151726400 1151776800 0 14:00 7200
18H 1151726400 1151784000 0 16:00 7200
9H 1151726400 1151726400 1 01/Jul
9H 1151726400 1151730000 0 1:00 3600
9H 1151726400 1151733600 0 2:00 3600
9H 1151726400 1151737200 0 3:00 3600
9H 1151726400 1151740800 0 4:00 3600
9H 1151726400 1151744400 0 5:00 3600
9H 1151726400 1151748000 0 6:00 3600
9H 1151726400 1151751600 0 7:00 3600
9H 1151726400 1151755200 0 8:00 3600
# check near leap year (near 1Mar2004)
6H 1078106400 1078106400 0 21:00
6H 1078106400 1078110000 0 22:00 3600
6H 1078106400 1078113600 0 23:00 3600
6H 1078106400 1078117200 1 01/Mar 3600
6H 1078106400 1078120800 0 1:00 3600
6H 1078106400 1078124400 0 2:00 3600
22H 1078074000 1078074000 0 12:00
22H 1078074000 1078081200 0 14:00 7200
22H 1078074000 1078088400 0 16:00 7200
22H 1078074000 1078095600 0 18:00 7200
22H 1078074000 1078102800 0 20:00 7200
22H 1078074000 1078110000 0 22:00 7200
22H 1078074000 1078117200 1 01/Mar 7200
22H 1078074000 1078124400 0 2:00 7200
22H 1078074000 1078131600 0 4:00 7200
22H 1078074000 1078138800 0 6:00 7200
22H 1078074000 1078146000 0 8:00 7200
14D 1077512400 1077512400 0 Mon
14D 1077512400 1077598800 0 Tue 86400
14D 1077512400 1077685200 0 Wed 86400
14D 1077512400 1077771600 0 Thu 86400
14D 1077512400 1077858000 0 Fri 86400
14D 1077512400 1077944400 0 Sat 86400
14D 1077512400 1078030800 1 29/Feb 86400
14D 1077512400 1078117200 0 Mon 86400
14D 1077512400 1078203600 0 Tue 86400
14D 1077512400 1078290000 0 Wed 86400
14D 1077512400 1078376400 0 Thu 86400
14D 1077512400 1078462800 0 Fri 86400
14D 1077512400 1078549200 0 Sat 86400
14D 1077512400 1078635600 1 07/Mar 86400
20D 1077512400 1077512400 0 23/Feb
20D 1077512400 1077685200 0 25/Feb 172800
20D 1077512400 1077858000 0 27/Feb 172800
20D 1077512400 1078030800 0 29/Feb 172800
20D 1077512400 1078117200 1 01/Mar 86400
20D 1077512400 1078290000 0 03/Mar 172800
20D 1077512400 1078462800 0 05/Mar 172800
20D 1077512400 1078635600 0 07/Mar 172800
20D 1077512400 1078808400 0 09/Mar 172800
20D 1077512400 1078981200 0 11/Mar 172800
20D 1077512400 1079154000 0 13/Mar 172800
# and near non-leap year (near 1Mar2005)
6H 1109642400 1109642400 0 21:00
6H 1109642400 1109646000 0 22:00 3600
6H 1109642400 1109649600 0 23:00 3600
6H 1109642400 1109653200 1 01/Mar 3600
6H 1109642400 1109656800 0 1:00 3600
6H 1109642400 1109660400 0 2:00 3600
22H 1109610000 1109610000 0 12:00
22H 1109610000 1109617200 0 14:00 7200
22H 1109610000 1109624400 0 16:00 7200
22H 1109610000 1109631600 0 18:00 7200
22H 1109610000 1109638800 0 20:00 7200
22H 1109610000 1109646000 0 22:00 7200
22H 1109610000 1109653200 1 01/Mar 7200
22H 1109610000 1109660400 0 2:00 7200
22H 1109610000 1109667600 0 4:00 7200
22H 1109610000 1109674800 0 6:00 7200
22H 1109610000 1109682000 0 8:00 7200
14D 1109048400 1109048400 0 Tue
14D 1109048400 1109134800 0 Wed 86400
14D 1109048400 1109221200 0 Thu 86400
14D 1109048400 1109307600 0 Fri 86400
14D 1109048400 1109394000 0 Sat 86400
14D 1109048400 1109480400 1 27/Feb 86400
14D 1109048400 1109566800 0 Mon 86400
14D 1109048400 1109653200 0 Tue 86400
14D 1109048400 1109739600 0 Wed 86400
14D 1109048400 1109826000 0 Thu 86400
14D 1109048400 1109912400 0 Fri 86400
14D 1109048400 1109998800 0 Sat 86400
14D 1109048400 1110085200 1 06/Mar 86400
14D 1109048400 1110171600 0 Mon 86400
20D 1109048400 1109134800 0 23/Feb
20D 1109048400 1109307600 0 25/Feb 172800
20D 1109048400 1109480400 0 27/Feb 172800
20D 1109048400 1109653200 1 01/Mar 172800
20D 1109048400 1109826000 0 03/Mar 172800
20D 1109048400 1109998800 0 05/Mar 172800
20D 1109048400 1110171600 0 07/Mar 172800
20D 1109048400 1110344400 0 09/Mar 172800
20D 1109048400 1110517200 0 11/Mar 172800
20D 1109048400 1110690000 0 13/Mar 172800
# check near time change (2Apr)
4H 1143954000 1143954000 1 02/Apr
4H 1143954000 1143955800 0 0:30 1800
4H 1143954000 1143957600 0 1:00 1800
4H 1143954000 1143959400 0 1:30 1800
4H 1143954000 1143961200 0 3:00 1800
4H 1143954000 1143963000 0 3:30 1800
4H 1143954000 1143964800 0 4:00 1800
4H 1143954000 1143966600 0 4:30 1800
8H 1143954000 1143954000 1 02/Apr
8H 1143954000 1143957600 0 1:00 3600
8H 1143954000 1143961200 0 3:00 3600
8H 1143954000 1143964800 0 4:00 3600
8H 1143954000 1143968400 0 5:00 3600
8H 1143954000 1143972000 0 6:00 3600
8H 1143954000 1143975600 0 7:00 3600
8H 1143954000 1143979200 0 8:00 3600
2D 1143954000 1143954000 1 02/Apr
2D 1143954000 1143964800 0 4:00 10800
2D 1143954000 1143979200 0 8:00 14400
2D 1143954000 1143993600 0 12:00 14400
2D 1143954000 1144008000 0 16:00 14400
2D 1143954000 1144022400 0 20:00 14400
2D 1143954000 1144036800 1 03/Apr 14400
2D 1143954000 1144051200 0 4:00 14400
2D 1143954000 1144065600 0 8:00 14400
2D 1143954000 1144080000 0 12:00 14400
2D 1143954000 1144094400 0 16:00 14400
2D 1143954000 1144108800 0 20:00 14400
2D 1143954000 1144123200 1 04/Apr 14400
4D 1143954000 1143954000 1 02/Apr
4D 1143954000 1144036800 0 Mon 82800
4D 1143954000 1144123200 0 Tue 86400
4D 1143954000 1144209600 0 Wed 86400
4D 1143954000 1144296000 0 Thu 86400
# check near time change (29Oct)
4H 1162094400 1162094400 1 29/Oct
4H 1162094400 1162096200 0 0:30 1800
4H 1162094400 1162098000 0 1:00 1800
4H 1162094400 1162099800 0 1:30 1800
4H 1162094400 1162101600 0 1:00 1800
4H 1162094400 1162103400 0 1:30 1800
4H 1162094400 1162105200 0 2:00 1800
4H 1162094400 1162107000 0 2:30 1800
8H 1162094400 1162094400 1 29/Oct
8H 1162094400 1162098000 0 1:00 3600
8H 1162094400 1162101600 0 1:00 3600
8H 1162094400 1162105200 0 2:00 3600
8H 1162094400 1162108800 0 3:00 3600
8H 1162094400 1162112400 0 4:00 3600
8H 1162094400 1162116000 0 5:00 3600
8H 1162094400 1162119600 0 6:00 3600
2D 1162094400 1162094400 1 29/Oct
2D 1162094400 1162112400 0 4:00 18000
2D 1162094400 1162126800 0 8:00 14400
2D 1162094400 1162141200 0 12:00 14400
2D 1162094400 1162155600 0 16:00 14400
2D 1162094400 1162170000 0 20:00 14400
2D 1162094400 1162184400 1 30/Oct 14400
2D 1162094400 1162198800 0 4:00 14400
2D 1162094400 1162213200 0 8:00 14400
2D 1162094400 1162227600 0 12:00 14400
2D 1162094400 1162242000 0 16:00 14400
2D 1162094400 1162256400 0 20:00 14400
4D 1162094400 1162094400 1 29/Oct
4D 1162094400 1162184400 0 Mon 90000
4D 1162094400 1162270800 0 Tue 86400
4D 1162094400 1162357200 0 Wed 86400