1*8462SApril.Chin@Sun.COM######################################################################## 2*8462SApril.Chin@Sun.COM# # 3*8462SApril.Chin@Sun.COM# This software is part of the ast package # 4*8462SApril.Chin@Sun.COM# Copyright (c) 1982-2008 AT&T Intellectual Property # 5*8462SApril.Chin@Sun.COM# and is licensed under the # 6*8462SApril.Chin@Sun.COM# Common Public License, Version 1.0 # 7*8462SApril.Chin@Sun.COM# by AT&T Intellectual Property # 8*8462SApril.Chin@Sun.COM# # 9*8462SApril.Chin@Sun.COM# A copy of the License is available at # 10*8462SApril.Chin@Sun.COM# http://www.opensource.org/licenses/cpl1.0.txt # 11*8462SApril.Chin@Sun.COM# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) # 12*8462SApril.Chin@Sun.COM# # 13*8462SApril.Chin@Sun.COM# Information and Software Systems Research # 14*8462SApril.Chin@Sun.COM# AT&T Research # 15*8462SApril.Chin@Sun.COM# Florham Park NJ # 16*8462SApril.Chin@Sun.COM# # 17*8462SApril.Chin@Sun.COM# David Korn <dgk@research.att.com> # 18*8462SApril.Chin@Sun.COM# # 19*8462SApril.Chin@Sun.COM######################################################################## 20*8462SApril.Chin@Sun.COMfunction err_exit 21*8462SApril.Chin@Sun.COM{ 22*8462SApril.Chin@Sun.COM print -u2 -n "\t" 23*8462SApril.Chin@Sun.COM print -u2 -r ${Command}[$1]: "${@:2}" 24*8462SApril.Chin@Sun.COM let Errors+=1 25*8462SApril.Chin@Sun.COM} 26*8462SApril.Chin@Sun.COMalias err_exit='err_exit $LINENO' 27*8462SApril.Chin@Sun.COM 28*8462SApril.Chin@Sun.COMCommand=${0##*/} 29*8462SApril.Chin@Sun.COMinteger Errors=0 30*8462SApril.Chin@Sun.COMfor ((i=0; i < 4; i++ )) 31*8462SApril.Chin@Sun.COMdo for ((j=0; j < 5; j++ )) 32*8462SApril.Chin@Sun.COM do a[i][j]=$i$j 33*8462SApril.Chin@Sun.COM done 34*8462SApril.Chin@Sun.COMdone 35*8462SApril.Chin@Sun.COMfor ((i=0; i < 4; i++ )) 36*8462SApril.Chin@Sun.COMdo for ((j=0; j < 5; j++ )) 37*8462SApril.Chin@Sun.COM do [[ ${a[i][j]} == "$i$j" ]] || err_exit "\${a[$i][$j]} != $i$j" 38*8462SApril.Chin@Sun.COM done 39*8462SApril.Chin@Sun.COMdone 40*8462SApril.Chin@Sun.COMfor ((i=0; i < 4; i++ )) 41*8462SApril.Chin@Sun.COMdo j=0;for k in ${a[i][@]} 42*8462SApril.Chin@Sun.COM do [[ $k == "$i$j" ]] || err_exit "\${a[i][@]} != $i$j" 43*8462SApril.Chin@Sun.COM (( j++ )) 44*8462SApril.Chin@Sun.COM done 45*8462SApril.Chin@Sun.COMdone 46*8462SApril.Chin@Sun.COMunset a 47*8462SApril.Chin@Sun.COMa=( 48*8462SApril.Chin@Sun.COM ( 00 01 02 03 04 ) 49*8462SApril.Chin@Sun.COM ( 10 11 12 13 14 15) 50*8462SApril.Chin@Sun.COM ( 20 21 22 23 24 ) 51*8462SApril.Chin@Sun.COM ( 30 31 32 33 34 ) 52*8462SApril.Chin@Sun.COM) 53*8462SApril.Chin@Sun.COM 54*8462SApril.Chin@Sun.COMfunction check 55*8462SApril.Chin@Sun.COM{ 56*8462SApril.Chin@Sun.COM nameref a=$1 57*8462SApril.Chin@Sun.COM nameref b=a[2] 58*8462SApril.Chin@Sun.COM typeset c=$1 59*8462SApril.Chin@Sun.COM integer i j 60*8462SApril.Chin@Sun.COM for ((i=0; i < 4; i++ )) 61*8462SApril.Chin@Sun.COM do for ((j=0; j < 5; j++ )) 62*8462SApril.Chin@Sun.COM do [[ ${a[$i][$j]} == "$i$j" ]] || err_exit "\${$c[$i][$j]} != $i$j" 63*8462SApril.Chin@Sun.COM done 64*8462SApril.Chin@Sun.COM done 65*8462SApril.Chin@Sun.COM (( ${#a[@]} == 4 )) || err_exit "\${#$c[@]} not 4" 66*8462SApril.Chin@Sun.COM (( ${#a[0][@]} == 5 )) || err_exit "\${#$c[0][@]} not 5" 67*8462SApril.Chin@Sun.COM (( ${#a[1][@]} == 6 )) || err_exit "\${#$c[1][@]} not 6" 68*8462SApril.Chin@Sun.COM set -s -- ${!a[@]} 69*8462SApril.Chin@Sun.COM [[ ${@} == '0 1 2 3' ]] || err_exit "\${!$c[@]} not 0 1 2 3" 70*8462SApril.Chin@Sun.COM set -s -- ${!a[0][@]} 71*8462SApril.Chin@Sun.COM [[ ${@} == '0 1 2 3 4' ]] || err_exit "\${!$c[0][@]} not 0 1 2 3 4" 72*8462SApril.Chin@Sun.COM set -s -- ${!a[1][@]} 73*8462SApril.Chin@Sun.COM [[ ${@} == '0 1 2 3 4 5' ]] || err_exit "\${!$c[1][@]} not 0 1 2 3 4 5" 74*8462SApril.Chin@Sun.COM [[ $a == 00 ]] || err_exit "\$$c is not 00" 75*8462SApril.Chin@Sun.COM [[ ${a[0]} == 00 ]] || err_exit "\${$a[0]} is not 00" 76*8462SApril.Chin@Sun.COM [[ ${a[0][0]} == 00 ]] || err_exit "${a[0][0]} is not 00" 77*8462SApril.Chin@Sun.COM [[ ${a[0][0][0]} == 00 ]] || err_exit "\${$c[0][0][0]} is not 00" 78*8462SApril.Chin@Sun.COM [[ ${a[0][0][1]} == '' ]] || err_exit "\${$c[0][0][1]} is not empty" 79*8462SApril.Chin@Sun.COM [[ ${b[3]} == 23 ]] || err_exit "${!b}[3] not = 23" 80*8462SApril.Chin@Sun.COM} 81*8462SApril.Chin@Sun.COM 82*8462SApril.Chin@Sun.COMcheck a 83*8462SApril.Chin@Sun.COM 84*8462SApril.Chin@Sun.COMunset a 85*8462SApril.Chin@Sun.COMtypeset -A a 86*8462SApril.Chin@Sun.COMfor ((i=0; i < 4; i++ )) 87*8462SApril.Chin@Sun.COMdo for ((j=0; j < 5; j++ )) 88*8462SApril.Chin@Sun.COM do a[$i][j]=$i$j 89*8462SApril.Chin@Sun.COM done 90*8462SApril.Chin@Sun.COMdone 91*8462SApril.Chin@Sun.COMfor ((i=0; i < 4; i++ )) 92*8462SApril.Chin@Sun.COMdo for ((j=0; j < 5; j++ )) 93*8462SApril.Chin@Sun.COM do [[ ${a[$i][j]} == "$i$j" ]] || err_exit "\${a[$i][$j]} == $i$j" 94*8462SApril.Chin@Sun.COM done 95*8462SApril.Chin@Sun.COMdone 96*8462SApril.Chin@Sun.COMa[1][5]=15 97*8462SApril.Chin@Sun.COMb=( 98*8462SApril.Chin@Sun.COM [0]=( 00 01 02 03 04 ) 99*8462SApril.Chin@Sun.COM [1]=( 10 11 12 13 14 15) 100*8462SApril.Chin@Sun.COM [2]=( 20 21 22 23 24 ) 101*8462SApril.Chin@Sun.COM [3]=( 30 31 32 33 34 ) 102*8462SApril.Chin@Sun.COM) 103*8462SApril.Chin@Sun.COMcheck b 104*8462SApril.Chin@Sun.COM[[ ${a[1][@]} == "${b[1][@]}" ]] || err_exit "a[1] not equal to b[1]" 105*8462SApril.Chin@Sun.COMc=( 106*8462SApril.Chin@Sun.COM [0]=( [0]=00 [1]=01 [2]=02 [3]=03 [4]=04 ) 107*8462SApril.Chin@Sun.COM [1]=( [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=15) 108*8462SApril.Chin@Sun.COM [2]=( [0]=20 [1]=21 [2]=22 [3]=23 [4]=24 ) 109*8462SApril.Chin@Sun.COM [3]=( [0]=30 [1]=31 [2]=32 [3]=33 [4]=34 ) 110*8462SApril.Chin@Sun.COM) 111*8462SApril.Chin@Sun.COMcheck c 112*8462SApril.Chin@Sun.COMtypeset -A d 113*8462SApril.Chin@Sun.COMd[0]=( [0]=00 [1]=01 [2]=02 [3]=03 [4]=04 ) 114*8462SApril.Chin@Sun.COMd[1]=( [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 [5]=15) 115*8462SApril.Chin@Sun.COMd[2]=( [0]=20 [1]=21 [2]=22 [3]=23 [4]=24 ) 116*8462SApril.Chin@Sun.COMd[3]=( [0]=30 [1]=31 [2]=32 [3]=33 [4]=34 ) 117*8462SApril.Chin@Sun.COMcheck d 118*8462SApril.Chin@Sun.COMunset a b c d 119*8462SApril.Chin@Sun.COM[[ ${a-set} ]] || err_exit "a is set after unset" 120*8462SApril.Chin@Sun.COM[[ ${b-set} ]] || err_exit "b is set after unset" 121*8462SApril.Chin@Sun.COM[[ ${c-set} ]] || err_exit "c is set after unset" 122*8462SApril.Chin@Sun.COM[[ ${d-set} ]] || err_exit "c is set after unset" 123*8462SApril.Chin@Sun.COMexit $((Errors)) 124