da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# This software is part of the ast package #
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner# Copyright (c) 1982-2010 AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# and is licensed under the #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Common Public License, Version 1.0 #
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin# by AT&T Intellectual Property #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# A copy of the License is available at #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# http://www.opensource.org/licenses/cpl1.0.txt #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Information and Software Systems Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# AT&T Research #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# Florham Park NJ #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# David Korn <dgk@research.att.com> #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin# #
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin########################################################################
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfunction err_exit
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -u2 -n "\t"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin print -u2 -r ${Command}[$1]: "${@:2}"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin let Errors+=1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinalias err_exit='err_exit $LINENO'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinCommand=${0##*/}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chininteger Errors=0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinx=abc
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinx+=def ;} 2> /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ $x != abcdef ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'abc+def != abcdef'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chininteger i=3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{ i+=4;} 2> /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif (( i != 7 ))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit '3+4!=7'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chiniarray=( one two three )
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{ iarray+= (four five six) ;} 2> /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ ${iarray[@]} != 'one two three four five six' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'index array append fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset iarray
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chiniarray=one
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{ iarray+= (four five six) ;} 2> /dev/null
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ ${iarray[@]} != 'one four five six' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'index array append to scalar fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintypeset -A aarray
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinaarray=( [1]=1 [3]=4 [xyz]=xyz )
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinaarray+=( [2]=2 [3]=3 [foo]=bar )
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ ${aarray[3]} != 3 ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'associative array append fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ ${#aarray[@]} != 5 ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'number of elements of associative array append fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpoint=(x=1 y=2)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinpoint+=( y=3 z=4)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ ${point.y} != 3 ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'compound append fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinif [[ ${point.x} != 1 ]]
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinthen err_exit 'compound append to compound variable unsets existing variables'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinunset foo
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfoo=one
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfoo+=(two)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif [[ ${foo[@]} != 'one two' ]]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen err_exit 'array append to non array variable fails'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfi
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinunset foo
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfoo[0]=(x=3)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chinfoo+=(x=4)
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${foo[1].x} == 4 ]] || err_exit 'compound append to index array not working'
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin[[ ${foo[0].x} == 3 ]] || err_exit 'compound append to index array unsets existing variables'
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinexit $((Errors))