1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-06-07 15:56:04 +02:00

c.f. 20034: zsh/mathfunc tests

This commit is contained in:
Peter Stephenson 2004-06-09 12:05:35 +00:00
parent ed76bafc5e
commit beb6d32294
2 changed files with 111 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2004-06-09 Peter Stephenson <pws@csr.com>
* c.f. 20034: Test/V03mathfunc.ztst: tests for the zsh/mathfunc
module.
2004-06-08 Peter Stephenson <pws@pwstephenson.fsnet.co.uk>
* 20029: Src/Modules/mathfunc.c: rand48(seed) stopped being

106
Test/V03mathfunc.ztst Normal file
View File

@ -0,0 +1,106 @@
# Tests for the module zsh/mathfunc
%prep
if ( zmodload -i zsh/mathfunc ) >/dev/null 2>&1; then
zmodload -i zsh/mathfunc
else
ZTST_unimplemented="The module zsh/mathfunc is not available."
fi
%test
# -g makes pi available in later tests
float -gF 5 pi
(( pi = 4 * atan(1.0) ))
print $pi
0:Basic operation with atan
>3.14159
float -F 5 result
(( result = atan(3,2) ))
print $result
0:atan with two arguments
>0.98279
print $(( atan(1,2,3) ))
1:atan can't take three arguments
?(eval):1: wrong number of arguments: atan(1,2,3)
float r1=$(( rand48() ))
float r2=$(( rand48() ))
float r3=$(( rand48() ))
# Yes, this is a floating point equality test like they tell
# you not to do. As the pseudrandom sequence is deterministic,
# this is the right thing to do in this case.
if (( r1 == r2 )); then
print "Seed not updated correctly the first time"
else
print "First two random numbers differ, OK"
fi
if (( r2 == r3 )); then
print "Seed not updated correctly the second time"
else
print "Second two random numbers differ, OK"
fi
0:rand48 with default initialisation
F:This test fails if your math library doesn't have erand48().
>First two random numbers differ, OK
>Second two random numbers differ, OK
seed=f45677a6cbe4
float r1=$(( rand48(seed) ))
float r2=$(( rand48(seed) ))
seed2=$seed
float r3=$(( rand48(seed) ))
float r4=$(( rand48(seed2) ))
# Yes, this is a floating point equality test like they tell
# you not to do. As the pseudrandom sequence is deterministic,
# this is the right thing to do in this case.
if (( r1 == r2 )); then
print "Seed not updated correctly the first time"
else
print "First two random numbers differ, OK"
fi
if (( r2 == r3 )); then
print "Seed not updated correctly the second time"
else
print "Second two random numbers differ, OK"
fi
if (( r3 == r4 )); then
print "Identical seeds generate identical numbers, OK"
else
print "Indeterminate result from identical seeds"
fi
0:rand48 with pre-generated seed
F:This test fails if your math library doesn't have erand48().
>First two random numbers differ, OK
>Second two random numbers differ, OK
>Identical seeds generate identical numbers, OK
float -F 5 pitest
(( pitest = 4.0 * atan(1) ))
# This is a string test of the output to 5 digits.
if [[ $pi = $pitest ]]; then
print "OK, atan on an integer seemed to work"
else
print "BAD: got $pitest instead of $pi"
fi
0:Conversion of arguments from integer
>OK, atan on an integer seemed to work
float -F 5 result
typeset str
for str in 0 0.0 1 1.5 -1 -1.5; do
(( result = abs($str) ))
print $result
done
0:Use of abs on various numbers
>0.00000
>0.00000
>1.00000
>1.50000
>1.00000
>1.50000
print $(( sqrt(-1) ))
1:Non-negative argument checking for square roots.
?(eval):1: math: argument to sqrt out of range