home *** CD-ROM | disk | FTP | other *** search
- #!/bin/sh
-
- # tests if mawk has been compiled to correctly handle
- # floating point exceptions
- #
-
- PATH=.:$PATH
-
- test1='BEGIN{ print 4/0 }'
-
-
- test2='BEGIN {
- x = 100
- do { y = x ; x *= 1000 } while ( y != x )
- print "loop terminated"
- }'
-
- test3='BEGIN{ print log(-8) }'
-
-
- echo "testing division by zero"
- echo mawk "$test1"
- mawk "$test1"
- ret1=$?
- echo
-
- echo "testing overflow"
- echo mawk "$test2"
- mawk "$test2"
- ret2=$?
- echo
-
- echo "testing domain error"
- echo mawk "$test3"
- mawk "$test3" > temp$$
- ret3=$?
- cat temp$$
- echo
-
-
- # the returns should all be zero or all 1
- # core dumps not allowed
-
- trap '
- echo compilation defines for floating point are incorrect
- rm -f temp$$
- exit 1' 0
-
- echo
- echo ==============================
-
- echo return1 = $ret1
- echo return2 = $ret2
- echo return3 = $ret3
-
-
- [ $ret1 -gt 128 ] && { echo test1 failed ; exception=1 ; }
- [ $ret2 -gt 128 ] && { echo test2 failed ; exception=1 ; }
- [ $ret3 -gt 128 ] && { echo test3 failed ; exception=1 ; }
-
- [ "$exception" = 1 ] && { rm -f core temp$$ ; exit 1 ; }
-
-
- same=0
-
- [ $ret1 = $ret2 ] && [ $ret2 = $ret3 ] && same=1
-
-
- if [ $same = 1 ]
- then
- if [ $ret1 = 0 ]
- then
- echo results consistent: ignoring floating exceptions
- if grep -i nan temp$$ > /dev/null
- then :
- else
- echo "but the library is not IEEE754 compatible"
- echo "test 3 failed"
- exit 1
- fi
- else echo results consistent: trapping floating exceptions
- fi
-
- trap 0
- rm -f temp$$
- exit 0
-
- else
- echo results are not consistent
- echo 'return values should all be 0 if ignoring FPEs (e.g. with IEEE754)
- or all 1 if trapping FPEs'
-
- exit 1
- fi
-
-