X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Fformats%2Fnum-in.sh;h=b61019f370a57e782d05cfc352b2e6c0b363f139;hb=89306c3c6b335e23a09bc2c3442d8b08e60cb328;hp=49ba6b533b6c5bbd40b96487328152f86e6139d5;hpb=0fa141762183890ebd139ccd9264f08db9011539;p=pspp-builds.git diff --git a/tests/formats/num-in.sh b/tests/formats/num-in.sh index 49ba6b53..b61019f3 100755 --- a/tests/formats/num-in.sh +++ b/tests/formats/num-in.sh @@ -9,6 +9,7 @@ if [ -z "$top_builddir" ] ; then top_builddir=. ; fi if [ -z "$top_srcdir" ] ; then top_srcdir=. ; fi top_builddir=`cd $top_builddir; pwd` PSPP=$top_builddir/src/ui/terminal/pspp +: ${PERL:=perl} # ensure that top_srcdir is absolute top_srcdir=`cd $top_srcdir; pwd` @@ -38,6 +39,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 +85,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 +174,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"