Fix first part of bug #18982. Thanks to John Darrington for finding
authorBen Pfaff <blp@gnu.org>
Fri, 10 Aug 2007 03:17:55 +0000 (03:17 +0000)
committerBen Pfaff <blp@gnu.org>
Fri, 10 Aug 2007 03:17:55 +0000 (03:17 +0000)
the problem and verifying the fix.

tests/formats/num-in.expected.gz
tests/formats/num-in.sh

index 51e9fff37c70eb8fb0281384011f4fe7ab7d4dbc..40a617d6dcd80bf1284d376060568b4d6e3a90f7 100644 (file)
Binary files a/tests/formats/num-in.expected.gz and b/tests/formats/num-in.expected.gz differ
index 49ba6b533b6c5bbd40b96487328152f86e6139d5..e58af7588fb08134218e01baac253560f327e25e 100755 (executable)
@@ -38,6 +38,44 @@ pass()
 
 cd $TEMPDIR
 
+activity="write PRNG fragment"
+cat > my-rand.pl <<'EOF'
+# This random number generator and the test for it below are drawn
+# from Park and Miller, "Random Number Generators: Good Ones are Hard
+# to Come By", Communications of the ACM 31:10 (October 1988).  It is
+# documented to function properly on systems with a 46-bit or longer
+# real significand, which includes systems that have 64-bit IEEE reals
+# (with 53-bit significand).  The test should catch any systems for
+# which this is not true, in any case.
+
+our ($seed) = 1;
+sub my_rand {
+  my ($modulo) = @_;
+  my ($a) = 16807;
+  my ($m) = 2147483647;
+  my ($tmp) = $a * $seed;
+  $seed = $tmp - $m * int ($tmp / $m);
+  return $seed % $modulo;
+}
+EOF
+if [ $? -ne 0 ] ; then no_result ; fi
+
+activity="write PRNG test program"
+cat > test-my-rand.pl <<'EOF'
+#! /usr/bin/perl
+use strict;
+use warnings;
+do 'my-rand.pl';
+my_rand (1) foreach 1...10000;
+our $seed;
+die $seed if $seed != 1043618065;
+EOF
+if [ $? -ne 0 ] ; then no_result ; fi
+
+activity="test PRNG"
+$PERL test-my-rand.pl
+if [ $? -ne 0 ] ; then no_result ; fi
+
 activity="write Perl program"
 cat > num-in.pl <<'EOF'
 #! /usr/bin/perl
@@ -46,7 +84,7 @@ use POSIX;
 use strict;
 use warnings;
 
-our $next = 0;
+do 'my-rand.pl';
 
 for my $number (0, 1, .5, .015625, 123) {
     my ($base_exp) = floor ($number ? log10 ($number) : 0);
@@ -135,12 +173,6 @@ sub permute_spaces {
 sub pick {
     return $_[int (my_rand ($#_ + 1))];
 }
-
-sub my_rand {
-    my ($modulo) = @_;
-    $next = ($next * 1103515245 + 12345) % (2**32);
-    return int ($next / 65536) % $modulo;
-}
 EOF
 
 activity="generate data"