1*b30d1939SAndy Fiddaman#
2*b30d1939SAndy Fiddaman# CDDL HEADER START
3*b30d1939SAndy Fiddaman#
4*b30d1939SAndy Fiddaman# The contents of this file are subject to the terms of the
5*b30d1939SAndy Fiddaman# Common Development and Distribution License (the "License").
6*b30d1939SAndy Fiddaman# You may not use this file except in compliance with the License.
7*b30d1939SAndy Fiddaman#
8*b30d1939SAndy Fiddaman# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*b30d1939SAndy Fiddaman# or http://www.opensolaris.org/os/licensing.
10*b30d1939SAndy Fiddaman# See the License for the specific language governing permissions
11*b30d1939SAndy Fiddaman# and limitations under the License.
12*b30d1939SAndy Fiddaman#
13*b30d1939SAndy Fiddaman# When distributing Covered Code, include this CDDL HEADER in each
14*b30d1939SAndy Fiddaman# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*b30d1939SAndy Fiddaman# If applicable, add the following below this CDDL HEADER, with the
16*b30d1939SAndy Fiddaman# fields enclosed by brackets "[]" replaced with your own identifying
17*b30d1939SAndy Fiddaman# information: Portions Copyright [yyyy] [name of copyright owner]
18*b30d1939SAndy Fiddaman#
19*b30d1939SAndy Fiddaman# CDDL HEADER END
20*b30d1939SAndy Fiddaman#
21*b30d1939SAndy Fiddaman
22*b30d1939SAndy Fiddaman#
23*b30d1939SAndy Fiddaman# Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved.
24*b30d1939SAndy Fiddaman#
25*b30d1939SAndy Fiddaman
26*b30d1939SAndy Fiddaman#
27*b30d1939SAndy Fiddaman# This test checks whether the arithmetric function "iszero" is available.
28*b30d1939SAndy Fiddaman#
29*b30d1939SAndy Fiddaman# This was reported as CR #6777491 ("*ksh93* lacks arithmetric function
30*b30d1939SAndy Fiddaman# iszero()"):
31*b30d1939SAndy Fiddaman# ------------ snip ------------
32*b30d1939SAndy Fiddaman# ksh93 lacks arithmetric function "iszero()" which limits the ability
33*b30d1939SAndy Fiddaman# to classify floating-point values or even correctly match against
34*b30d1939SAndy Fiddaman# zero (since IEEE754-1985/2008 floating-point math differs between
35*b30d1939SAndy Fiddaman# positive and negaive zero values).
36*b30d1939SAndy Fiddaman# Frequency
37*b30d1939SAndy Fiddaman#    Always
38*b30d1939SAndy Fiddaman# Regression
39*b30d1939SAndy Fiddaman#    No
40*b30d1939SAndy Fiddaman# Steps to Reproduce
41*b30d1939SAndy Fiddaman#    $ ksh93 -c '(( iszero(0) )) && print "0 is a zero"'
42*b30d1939SAndy Fiddaman# Expected Result
43*b30d1939SAndy Fiddaman#    Output to stdout:
44*b30d1939SAndy Fiddaman# -- snip --
45*b30d1939SAndy Fiddaman# 0 is a zero
46*b30d1939SAndy Fiddaman# -- snip --
47*b30d1939SAndy Fiddaman# Actual Result
48*b30d1939SAndy Fiddaman#    ksh93 exists with:
49*b30d1939SAndy Fiddaman# -- snip --
50*b30d1939SAndy Fiddaman# ksh93: iszero(0) : unknown function
51*b30d1939SAndy Fiddaman# -- snip --
52*b30d1939SAndy Fiddaman# Error Message(s)
53*b30d1939SAndy Fiddaman#    ksh93: iszero(0) : unknown function
54*b30d1939SAndy Fiddaman# Test Case
55*b30d1939SAndy Fiddaman#    ksh93 -c '(( iszero(0) )) && print "0 is a zero"'
56*b30d1939SAndy Fiddaman# ------------ snip ------------
57*b30d1939SAndy Fiddaman#
58*b30d1939SAndy Fiddaman
59*b30d1939SAndy Fiddaman# test setup
60*b30d1939SAndy Fiddamanfunction err_exit
61*b30d1939SAndy Fiddaman{
62*b30d1939SAndy Fiddaman	print -u2 -n "\t"
63*b30d1939SAndy Fiddaman	print -u2 -r ${Command}[$1]: "${@:2}"
64*b30d1939SAndy Fiddaman	(( Errors < 127 && Errors++ ))
65*b30d1939SAndy Fiddaman}
66*b30d1939SAndy Fiddamanalias err_exit='err_exit $LINENO'
67*b30d1939SAndy Fiddaman
68*b30d1939SAndy Fiddamanset -o nounset
69*b30d1939SAndy FiddamanCommand=${0##*/}
70*b30d1939SAndy Fiddamaninteger Errors=0
71*b30d1939SAndy Fiddaman
72*b30d1939SAndy Fiddamantypeset str
73*b30d1939SAndy Fiddamaninteger i
74*b30d1939SAndy Fiddaman
75*b30d1939SAndy Fiddamantypeset -a tests=(
76*b30d1939SAndy Fiddaman	'(( iszero(0)   )) && print "OK"'
77*b30d1939SAndy Fiddaman	'(( iszero(0.)  )) && print "OK"'
78*b30d1939SAndy Fiddaman	'(( iszero(-0)  )) && print "OK"'
79*b30d1939SAndy Fiddaman	'(( iszero(-0.) )) && print "OK"'
80*b30d1939SAndy Fiddaman	'float n=0.  ; (( iszero(n) )) && print "OK"'
81*b30d1939SAndy Fiddaman	'float n=+0. ; (( iszero(n) )) && print "OK"'
82*b30d1939SAndy Fiddaman	'float n=-0. ; (( iszero(n) )) && print "OK"'
83*b30d1939SAndy Fiddaman	'float n=1.  ; (( iszero(n) )) || print "OK"'
84*b30d1939SAndy Fiddaman	'float n=1.  ; (( iszero(n-1.) )) && print "OK"'
85*b30d1939SAndy Fiddaman	'float n=-1. ; (( iszero(n+1.) )) && print "OK"'
86*b30d1939SAndy Fiddaman)
87*b30d1939SAndy Fiddaman
88*b30d1939SAndy Fiddamanfor (( i=0 ; i < ${#tests[@]} ; i++ )) ; do
89*b30d1939SAndy Fiddaman	str="$( $SHELL -o errexit -c "${tests[i]}" 2>&1 )" || err_exit "test $i: returned non-zero exit code $?"
90*b30d1939SAndy Fiddaman	[[ "${str}" == "OK" ]] || err_exit "test $i: expected 'OK', got '${str}'"
91*b30d1939SAndy Fiddamandone
92*b30d1939SAndy Fiddaman
93*b30d1939SAndy Fiddaman# tests done
94*b30d1939SAndy Fiddamanexit $((Errors))
95