diff options
author | Jim Meyering <jim@meyering.net> | 2005-09-24 07:57:36 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2005-09-24 07:57:36 +0000 |
commit | 01b7701a24fed8f35393399bb810ab05ee0f2237 (patch) | |
tree | fc175cfb93a90e30c18bd4000ce57706b11ef86e /tests/misc | |
parent | 2cb5253b1fe54fdc319bd64fe20e438be1d6a328 (diff) | |
download | coreutils-01b7701a24fed8f35393399bb810ab05ee0f2237.tar.xz |
(uninit-64): Restore this test.
Add start-up code to detect, and work around, the cases in
which the test might fail.
Diffstat (limited to 'tests/misc')
-rwxr-xr-x | tests/misc/date | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/misc/date b/tests/misc/date index 651a2467e..5fca6a0b3 100755 --- a/tests/misc/date +++ b/tests/misc/date @@ -36,6 +36,20 @@ my $dy = '1998-01-19'; # next month my $fmt = "'+%Y-%m-%d %T'"; +# Determine a number of seconds that will provoke an invalid +# time diagnostic from date. If possible, use a number that +# is less than 2^64, yet so large that it would cause the resulting +# tm_year value to be too large for a 32-bit int. But some systems +# (Solaris 8) have a buggy localtime that mistakenly accepts such +# invalid times and give garbage in tm_year. Other systems might +# have an int type that is wider than 32. So if this localtime +# call succeeds, use 2^64 as the number of seconds. +my $n_seconds = 72057594037927935; +my @d = localtime ($n_seconds); +my $year = $d[5]; +defined $year + and $n_seconds = '18446744073709551616'; + my @Tests = ( # test-name, [option, option, ...] {OUT=>"expected-output"} @@ -223,6 +237,23 @@ my @Tests = ['neg-secs', '-d @-22 +%05s', {OUT=>"-0022"}], ['neg-secs2', '-d @-22 +%_5s', {OUT=>" -22"}], + # Before today's fix, date would print uninitialized data + # to standard output for an out-of-range date: + # $ date -d @$(echo 2^56-1|bc) 2> /dev/null | od -a -N3 + # 0000000 p 4 6 + # 0000003 + ['uninit-64', "-d \@$n_seconds", + {OUT=>''}, + # Use ERR_SUBST to get around fact that the diagnostic + # you get on a system with 32-bit time_t is not the same as + # the one you get for a system where it's 64 bits wide: + # - date: time 72057594037927935 is out of range + # + date: invalid date `@72057594037927935' + {ERR_SUBST => 's/.*//'}, + {ERR => "\n"}, + {EXIT => 1}, + ], + ['fill-1', '-d 1999-12-08 +%_3d', {OUT=>' 8'}], ['fill-2', '-d 1999-12-08 +%03d', {OUT=>'008'}], |