improve of cmpl.
[bush.git] / testing / 3.OriginalTest.dir / varenv / assoc / assoc.tests
blob8d5c89275f432bb35b22987c5c2ccd6a1f5323cd
1 #   This program is free software: you can redistribute it and/or modify
2 #   it under the terms of the GNU General Public License as published by
3 #   the Free Software Foundation, either version 3 of the License, or
4 #   (at your option) any later version.
6 #   This program is distributed in the hope that it will be useful,
7 #   but WITHOUT ANY WARRANTY; without even the implied warranty of
8 #   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
9 #   GNU General Public License for more details.
11 #   You should have received a copy of the GNU General Public License
12 #   along with this program.  If not, see <http://www.gnu.org/licenses/>.
14 # TEST - basic declaration and assignment
15 typeset -A fluff
16 declare -A
18 fluff[foo]=one
19 fluff[bar]=two
21 declare -A
22 declare -p fluff
24 unset fluff[foo]
25 declare -p fluff
27 fluff[bar]=newval
28 declare fluff[qux]=assigned
30 declare -p fluff
32 unset fluff
34 # TEST - compound assignment and variable attributes
35 declare -A wheat chaff
36 wheat=( [zero]=0 [one]=a [two]=b [three]=c )
38 declare -i chaff
39 chaff=( [zero]=1+4 [one]=3+7 four )
41 declare -A waste=( [pid]=42134 [version]=4.0-devel [source]=$0 [lineno]=$LINENO )
42 declare -r waste
44 declare -A
46 declare +i chaff
47 chaff[hello world]=flip
48 declare -p chaff
50 # TEST - errors
51 waste[stuff]=other
52 unset waste
53 chaff[*]=12
54 chaff=( [one]=a [*]=12 )
56 # TEST - key expansion -- no word splitting
57 chaff[hello world]=flip
58 declare -p chaff
59 echo ${chaff[hello world]}
61 chaff[box]="multiple words"
63 recho ${chaff[@]}
64 recho "${chaff[@]}"
66 recho ${chaff[*]}
67 recho "${chaff[*]}"
69 unset chaff
70 declare -A chaff[200]
71 declare +A chaff
73 chaff[*]=12
74 chaff=( [one]=a [*]=12 )
76 # TEST - keys and values containing spaces
77 unset wheat
78 declare -A wheat
79 wheat=([six]=6 [foo bar]="qux qix" )
81 declare -p wheat
83 unset wheat
84 declare -A wheat=([six]=6 [foo bar]="qux qix" )
86 recho ${wheat[foo bar]}
87 recho "${wheat[foo bar]}"
89 declare -p wheat
91 # TEST - basic expansions: number of elements and value length
92 unset wheat
93 typeset -A wheat
94 wheat=([six]=6 [foo bar]="qux qix" )
96 recho ${#wheat[@]}
98 recho ${#wheat[foo bar]}
100 # TEST - appending assignment operator
101 unset wheat
102 typeset -A wheat
103 wheat=([six]=6 [foo bar]="qux qix" )
105 wheat[foo bar]+=' blat'
107 recho ${wheat[foo bar]}
108 recho "${wheat[foo bar]}"
109 unset wheat
111 flix=9
112 typeset -Ai wheat
113 wheat=([six]=6 [foo bar]=flix )
115 wheat[foo bar]+=7
117 recho ${wheat[foo bar]}
118 recho "${wheat[foo bar]}"
119 unset flix wheat
121 # TEST - index expansion: no word splitting or globbing
122 typeset -A wheat
123 cd ${TMPDIR:=/tmp}
124 touch '[sfiri]'
125 wheat=([s*]=6 [foo bar]=flix )
127 recho ${wheat[@]}
128 rm '[sfiri]'
129 cd $OLDPWD
131 # TEST -- associative array keys expansion
132 unset wheat
133 typeset -A wheat
135 wheat=([six]=6 [foo bar]=flix )
137 recho ${!wheat[@]}
138 recho "${!wheat[@]}"
140 # TEST -- associative array pattern removal
141 unset xpath
142 typeset -A xpath
144 xpath=( [0]=/bin [one]=/bin [two]=/usr/bin [three]=/usr/ucb [four]=/usr/local/bin)
145 xpath+=( [five]=/sbin [six]=/usr/sbin [seven]=. )
147 echo ${#xpath[@]}
149 echo ${xpath[@]}
150 echo ${xpath[@]##*/}
151 echo ${xpath[0]##*/}
152 echo ${xpath[@]%%[!/]*}
153 echo ${xpath[0]%%[!/]*}
154 recho ${xpath##*/}
155 recho ${xpath%%[!/]*}
156 recho ${xpath[five]##*/}
157 recho ${xpath[five]%%[!/]*}
159 echo ${#xpath[*]}
161 echo ${xpath[*]}
162 echo ${xpath[*]##*/}
163 echo ${xpath[*]%%[!/]*}
165 # TEST -- associative array pattern substitution
166 unset xpath
167 typeset -A xpath
169 xpath=( [0]=/bin [one]=/bin [two]=/usr/bin [three]=/usr/ucb [four]=/usr/local/bin)
170 xpath+=( [five]=/sbin [six]=/usr/sbin [seven]=. )
172 echo ${#xpath[@]}
173 # default element is "0" (as a string)
174 echo ${#xpath} -- ${xpath["0"]}
176 echo ${xpath[@]//\//^}
177 echo "${xpath[@]//\//^}" | cat -v
179 zecho "${xpath[@]/\//\\}"
180 zecho "${xpath[@]//\//\\}"
181 zecho "${xpath[@]//[\/]/\\}"
183 # test assignment to key "0"
184 unset T
185 declare -A T
186 T='([a]=1)'
187 echo "${T[@]}"
188 unset T
190 # peculiar ksh93 semantics for unsubscripted assoc variable reference
191 declare -A T
192 T[0]='zero'
193 if [ "$T" != "${T[0]}" ]; then
194         echo 'assoc.tests: $T and ${T[0]} mismatch'
197 ${THIS_SH} ./assoc1.sub
199 ${THIS_SH} ./assoc2.sub
201 ${THIS_SH} ./assoc3.sub
203 ${THIS_SH} ./assoc4.sub
205 ${THIS_SH} ./assoc5.sub
207 ${THIS_SH} ./assoc6.sub
209 ${THIS_SH} ./assoc7.sub
211 # test converting between scalars and assoc arrays
212 unset assoc
213 assoc=assoc
214 declare -A assoc
215 declare -p assoc
216 echo ${assoc[@]}
218 # weird syntax required to append to multiple existing array elements using
219 # compound assignment syntax
220 unset assoc
221 declare -A assoc 
222 assoc=( [one]=one [two]=two [three]=three )
223 assoc+=( [one]+=more [two]+=less )
224 declare -p assoc
226 readonly -A assoc
227 declare -p assoc
229 declare -A hash
231 hash=(["key"]="value1")
232 declare -p hash
233 hash=(["key"]="${hash["key"]} value2")
234 declare -p hash
236 unset hash
238 ${THIS_SH} ./assoc8.sub
240 # new shopt option to prevent multiple expansion of assoc array subscripts
241 ${THIS_SH} ./assoc9.sub
243 ${THIS_SH} ./assoc10.sub
245 # test assigning associative arrays using compound key/value pair assignments
246 ${THIS_SH} ./assoc11.sub