summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorJim Meyering <jim@meyering.net>2005-09-24 07:57:36 +0000
committerJim Meyering <jim@meyering.net>2005-09-24 07:57:36 +0000
commit01b7701a24fed8f35393399bb810ab05ee0f2237 (patch)
treefc175cfb93a90e30c18bd4000ce57706b11ef86e /tests
parent2cb5253b1fe54fdc319bd64fe20e438be1d6a328 (diff)
downloadcoreutils-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')
-rwxr-xr-xtests/misc/date31
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'}],