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