File: fpe_test

package info (click to toggle)
mawk 1.3.4.20200120-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,916 kB
  • sloc: ansic: 16,165; sh: 3,515; yacc: 1,125; awk: 722; makefile: 251
file content (130 lines) | stat: -rwxr-xr-x 2,724 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#!/bin/sh
# $MawkId: fpe_test,v 1.7 2010/12/10 17:00:00 tom Exp $
###############################################################################
# copyright 2009,2010, Thomas E. Dickey
# copyright 2010, Guido Berhoerster
# copyright 1994,1995, Michael D. Brennan
#
# This is a source file for mawk, an implementation of
# the AWK programming language.
#
# Mawk is distributed without warranty under the terms of
# the GNU General Public License, version 2, 1991.
###############################################################################

# tests if mawk has been compiled to correctly handle
# floating point exceptions
#
# @Log: fpe_test,v @
# Revision 1.3  1995/08/29  14:17:18  mike
# exit 2 changes
#
# Revision 1.2  1994/12/18  18:51:55  mike
# recognize NAN printed as ? for hpux
#

PROG="${MAWK:-../mawk}"

PATH=/bin:/usr/bin
export PATH

echo "testing floating point exception handling"

STDOUT=${TMPDIR-/tmp}/mawktest$$

test1='BEGIN{ print 4/0 }'


test2='BEGIN {
  x = 100
  do { y = x ; x *= 1000 } while ( y != x )
  print "loop terminated"
}'

# this used to test log(-8), but that was too challenging for cygwin hackers
test3='BEGIN{ print sqrt(-8) }'


echo "testing division by zero"
echo $PROG "$test1"
$PROG "$test1"
ret1=$?
echo

echo "testing overflow"
echo $PROG "$test2"
$PROG "$test2"
ret2=$?
echo

echo "testing domain error"
echo $PROG "$test3"
$PROG "$test3"  > $STDOUT
ret3=$?
cat $STDOUT
echo


# the returns should all be zero or all 2
# core dumps not allowed

trap '
echo compilation defines for floating point are incorrect
rm -f $STDOUT
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* $STDOUT ; exit 1 ; }


same=0

[ $ret1 = $ret2 ] && [ $ret2 = $ret3 ] && same=1


if [ $same = 1 ]
   then
   if [ $ret1 = 0 ]
      then
	echo "results consistent: ignoring floating exceptions"
	# some versions of hpux print NAN as ?
	if egrep '[nN][aA][nN]|\?' $STDOUT  > /dev/null
	then
	     :
	# MSYS / MinGW uses a different string...
	elif fgrep '#IND' $STDOUT > /dev/null
	then
	     echo "found MinGW hack for NaN..."
	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 $STDOUT
   exit 0

   else
	   cat <<-EOF
		results are not consistent
		return values should all be 0 if ignoring FPEs (e.g. with IEEE754)
		or all 2 if trapping FPEs
EOF

exit 1
fi