# Tests of parameter assignments %prep mkdir assign.tmp && cd assign.tmp touch tmpfile1 tmpfile2 %test typeset -A assoc assoc=(one 1 two 2 odd) 1:assign to association with odd no. of values ?(eval):2: bad set of key/value pairs for associative array # tests of array element assignment array=(1 2 3 4 5) array[1]=42 print $array 0:Replacement of array element >42 2 3 4 5 array=(1 2 3 4 5) array[1]=(42 43) print $array 0:Replacement of array element with array >42 43 2 3 4 5 array=(1 2 3 4 5) array[1,2]=(42 43) print $array 0:Replacement of start of array >42 43 3 4 5 array=(1 2 3 4 5) array[1,4]=(42 43) print $array 0:Replacement of start of array with shorter slice >42 43 5 array=(1 2 3 4 5) array[1,6]=(42 43) print $array 0:Replacement of array by extending slice >42 43 array=(1 2 3 4 5) array[3]=(42 43) print $array 0:Replacement of middle element with array >1 2 42 43 4 5 array=(1 2 3 4 5) array[3,4]=(42 43 44) print $array 0:Replacement of slice in middle >1 2 42 43 44 5 array=(1 2 3 4 5) array[7,8]=(42 43) print $array # check that [6] was left empty... array[6]=41 print $array 0:Appending by replacing elements off the end >1 2 3 4 5 42 43 >1 2 3 4 5 41 42 43 array=(1 2 3 4 5) array[-1]=42 print $array 0:Replacement of last element of array, negative indices >1 2 3 4 42 array=(1 2 3 4 5) array[-1]=(42 43) print $array 0:Replacement of last element of array with array, negative indices >1 2 3 4 42 43 array=(1 2 3 4 5) array[-3,-2]=(42 43 44) print $array 0:Replacement of middle of array, negative indices >1 2 42 43 44 5 array=(1 2 3 4 5) array[-5,-1]=(42 43) print $array 0:Replacement of entire array, negative indices >42 43 array=(1 2 3 4 5) array[-7,-1]=(42 43) print $array 0:Replacement of more than entire array, negative indices >42 43 array=(1 2 3 4 5) array[-7]=42 print $array 0:Replacement of element off start of array. >42 1 2 3 4 5 array=(1 2 3 4 5) array[-7]=42 array[-6]=43 print $array 0:Replacement off start doesn't leave gaps. Hope this is right. >43 1 2 3 4 5 array=(1 2 3 4 5) array[1,-1]=(42 43) print $array array[-3,3]=(1 2 3 4 5) print $array 0:Replacement of entire array, mixed indices >42 43 >1 2 3 4 5 array=(1 2 3 4 5) array[-7,7]=(42 43) print $array 0:Replacement of more than entire array, mixed indices >42 43 array=(1 2 3 4 5) array[3,-2]=(42 43 44) print $array array[-3,5]=(100 99) print $array 0:Replacement of slice in middle, mixed indices >1 2 42 43 44 5 >1 2 42 100 99 5 # (subsection: append to array) array=( ) array[5,6]=( 1 2 3 ) print $array print "${(q@)array}" 0:Append to empty array by range >1 2 3 >'' '' '' '' 1 2 3 array=( a ) array[5,6]=( 1 2 3 ) print $array print "${(q@)array}" 0:Append to 1-element array by range >a 1 2 3 >a '' '' '' 1 2 3 array=( a b ) array[5,6]=( 1 2 3 ) print $array print "${(q@)array}" 0:Append to 2-element array by range >a b 1 2 3 >a b '' '' 1 2 3 array=( a b ) array[5,5]=( 1 2 3 ) print $array print "${(q@)array}" 0:Append to 2-element array by [a,a] range >a b 1 2 3 >a b '' '' 1 2 3 array=( a b c d ) array[5,6]=( 1 2 3 ) print $array print "${(q@)array}" 0:Append array by range, continuously >a b c d 1 2 3 >a b c d 1 2 3 array=( a b c d ) array[5,5]=( 1 2 3 ) print $array print "${(q@)array}" 0:Append array by [a,a] range, continuously >a b c d 1 2 3 >a b c d 1 2 3 array=( ) array+=( 1 2 3 ) print $array print "${(q@)array}" 0:Append empty array via += >1 2 3 >1 2 3 array=( a ) array+=( 1 2 3 ) print $array print "${(q@)array}" 0:Append 1-element array via += >a 1 2 3 >a 1 2 3 # tests of array assignment using lastval ($?) true array=( $? ) print $array 0:Assign $? to array (true) >0 false array=( $? ) print $array 0:Assign $? to array (false) >1 true typeset array=( $? ) print $array 0:Assign $? to array with typeset (true) >0 false typeset array=( $? ) print $array 0:Assign $? to array with typeset (false) >1 array=( ) true array+=( $? ) false array+=( $? ) print $array 0:Append $? to array (true+false) >0 1 # tests of var+=scalar s+=foo echo $s 0:append scalar to unset scalar >foo s=foo s+=bar echo $s 0:append to scalar >foobar set -- a b c 2+=end echo $2 0:append to positional parameter >bend a=(first second) a+=last print -l $a 0:add scalar to array >first >second >last setopt ksharrays a=(first second) a+=last print -l $a unsetopt ksharrays 0:add scalar to array with ksharrays set >firstlast a=(1 2) a[@]+=3 print -l $a 0:add scalar to array with alternate syntax >1 >2 >3 integer i=10 i+=20 (( i == 30 )) 0:add to integer float f=3.4 f+=2.3 printf "%g\n" f 0:add to float >5.7 typeset -A hash hash=(one 1) hash+=string [[ $hash[@] == string ]] 0:add scalar to association # tests of var+=(array) unset a a+=(1 2 3) print -l $a 0:add array to unset parameter >1 >2 >3 a=(a) a+=(b) print -l $a 0:add array to existing array >a >b s=foo s+=(bar) print -l $s 0:add array to scalar >foo >bar integer i=1 i+=(2 3) print -l $i 0:add array to integer >1 >2 >3 float f=2.5 f+=(3.5 4.5) printf '%g\n' $f 0:add array to float >2.5 >3.5 >4.5 typeset -A h h+=(a 1 b 2) print -l $h 0:add to empty association >1 >2 typeset -A h h=(a 1) h+=(b 2 c 3) print -l $h 0:add to association >1 >2 >3 typeset -A h h=(a 1 b 2) h+=() print -l $h 0:add empty array to association >1 >2 # tests of var[range]+=scalar s=sting s[2]+=art echo $s 0:insert scalar inside another >starting s=inert s[-4]+=s echo $s 0:insert scalar inside another with negative index >insert s=append s[2,6]+=age echo $s 0:append scalar to scalar using a range >appendage s=123456789 s[3,-5]+=X echo $s 0:insert scalar inside another, specifying a slice >12345X6789 a=(a b c) a[2]+=oo echo $a 0:append to array element >a boo c a=(a b c d) a[-2]+=ool echo $a 0:append to array element with negative index >a b cool d a=(a b c d) a[2,-1]+=oom echo $a 0:append to array element, specifying a slice >a b c doom setopt ksharrays a=(a b c d) a[0]+=0 echo $a unsetopt ksharrays 0:append to array element with ksharrays set >a0 typeset -A h h=(one foo) h[one]+=bar echo $h 0:append to association element >foobar typeset -A h h[foo]+=bar echo ${(kv)h} 0:append to non-existent association element >foo bar typeset -A h h=(one a two b three c four d) h[(I)*o*]+=append 1:attempt to append to slice of association ?(eval):3: h: attempt to set slice of associative array integer i=123 i[2]+=6 1:attempt to add to indexed integer variable ?(eval):2: attempt to add to slice of a numeric variable float f=1234.5 f[2,4]+=3 1:attempt to add to slice of float variable ?(eval):2: attempt to add to slice of a numeric variable unset u u[3]+=third echo $u[1]:$u[3] 0:append to unset variable with index >:third # tests of var[range]+=(array) a=(1 2 3) a[2]+=(a b) echo $a 0:insert array inside another >1 2 a b 3 a=(a b c) a[-1]+=(d) echo $a 0:append to array using negative index >a b c d a=(1 2 3 4) a[-1,-3]+=(x) echo $a 0:insert array using negative range >1 2 x 3 4 s=string s[2]+=(a b) 1:attempt to insert array into string ?(eval):2: s: attempt to assign array value to non-array integer i=365 i[2]+=(1 2) 1:attempt to insert array into string ?(eval):2: i: attempt to assign array value to non-array typeset -A h h=(a 1) h[a]+=(b 2) 1:attempt to append array to hash element ?(eval):3: h: attempt to set slice of associative array unset u u[-34,-2]+=(a z) echo $u 0:add array to indexed unset variable >a z repeat 10 PATH=. echo hello 0:saving and restoring of exported special parameters >hello >hello >hello >hello >hello >hello >hello >hello >hello >hello repeat 10 FOO=BAR BAR=FOO echo $FOO $BAR 0:save and restore multiple variables around builtin > > > > > > > > > > call() { print $HELLO; } export HELLO=world call HELLO=universe call call HELLO=${HELLO}liness call call unset HELLO 0:save and restore when using original value in temporary >world >universe >world >worldliness >world (integer i n x float f setopt globassign i=tmpfile1 n=tmpf* x=*2 f=2+2 typeset -p i n x f) 0:GLOB_ASSIGN with numeric types >typeset -i i=0 >typeset -a n=( tmpfile1 tmpfile2 ) >typeset x=tmpfile2 >typeset -E f=4.000000000e+00 setopt globassign foo=tmpf* print $foo unsetopt globassign foo=tmpf* print $foo 0:GLOB_ASSIGN option >tmpfile1 tmpfile2 >tmpf* (setopt globassign typeset -A foo touch gatest1 gatest2 foo=(gatest*) print ${(t)foo} rm -rf gatest*) 0:GLOB_ASSIGN doesn't monkey with type if not scalar assignment. >association-local A=(first second) A="${A[*]}" /bin/sh -c 'echo $A' print -l "${A[@]}" 0:command execution with assignments shadowing array parameter >first second >first >second setopt ksharrays A=(first second) A="${A[*]}" /bin/sh -c 'echo $A' print -l "${A[@]}" unsetopt ksharrays 0:command execution with assignments shadowing array parameter with ksharrays >first second >first >second typeset -aU unique_array=(first second) unique_array[1]=second print $unique_array 0:assignment to unique array >second typeset -a array=(first) array[1,3]=(FIRST) print $array 0:slice beyond length of array >FIRST # tests of string assignments a="abc" a[1]=x print $a 0:overwrite first character in string >xbc a="abc" a[2]="x" print $a 0:overwrite middle character in string >axc a="abc" a[3]="x" print $a 0:overwrite last character in string >abx a="abc" a[-1]="x" print $a 0:overwrite -1 character in string >abx a="abc" a[-2]="x" print $a 0:overwrite -2 character (middle) in string >axc a="ab" a[-2]="x" print $a 0:overwrite -2 character (first) in string >xb a="abc" a[-3]="x" print $a 0:overwrite -3 character (first) in string >xbc a="abc" a[-4]="x" print $a 0:overwrite -4 character (before first) in string >xabc a="abc" a[-5]="x" print $a 0:overwrite -5 character (before-before first) in string >xabc a="abc" a[-4,0]="x" print $a 0:overwrite [-4,0] characters (before first) in string >xabc a="abc" a[-4,-4]="x" print $a 0:overwrite [-4,-4] character (before first) in string >xabc a="abc" a[-40,-30]="x" print $a 0:overwrite [-40,-30] characters (far before first) in string >xabc a="abc" a[-40,1]="x" print $a 0:overwrite [-40,1] characters in short string >xbc a="abc" a[-40,40]="x" print $a 0:overwrite [-40,40] characters in short string >x a="abc" a[2,40]="x" print $a 0:overwrite [2,40] characters in short string >ax a="abc" a[2,-1]="x" print $a 0:overwrite [2,-1] characters in short string >ax a="abc" a[-2,-1]="x" print $a 0:overwrite [-2,-1] characters in short string >ax a="a" a[-1]="xx" print $a 0:overwrite [-1] character with "xx" >xx a="a" a[-2]="xx" print $a 0:overwrite [-2] character (before first) with "xx" >xxa a="a" a[2]="xx" print $a 0:overwrite [2] character (after last) with "xx" >axx a="" a[1]="xx" print $a 0:overwrite [1] character (string: "") with "xx" >xx a="" a[-1]="xx" print $a 0:overwrite [-1] character (string: "") with "xx" >xx a="" a[2]="xx" print $a 0:overwrite [2] character (string: "") with "xx" >xx