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