summaryrefslogtreecommitdiff
path: root/dotfiles/system/.zsh/modules/Test/D06subscript.ztst
diff options
context:
space:
mode:
Diffstat (limited to 'dotfiles/system/.zsh/modules/Test/D06subscript.ztst')
-rw-r--r--dotfiles/system/.zsh/modules/Test/D06subscript.ztst268
1 files changed, 268 insertions, 0 deletions
diff --git a/dotfiles/system/.zsh/modules/Test/D06subscript.ztst b/dotfiles/system/.zsh/modules/Test/D06subscript.ztst
new file mode 100644
index 0000000..1449236
--- /dev/null
+++ b/dotfiles/system/.zsh/modules/Test/D06subscript.ztst
@@ -0,0 +1,268 @@
+# Test parameter subscripting.
+
+%prep
+
+ s='Twinkle, twinkle, little *, [how] I [wonder] what? You are!'
+ a=('1' ']' '?' '\2' '\]' '\?' '\\3' '\\]' '\\?' '\\\4' '\\\]' '\\\?')
+ typeset -g -A A
+ A=($a)
+
+%test
+
+ x=','
+ print $s[(i)winkle] $s[(I)winkle]
+ print ${s[(i)You are]} $#s
+ print ${s[(r)$x,(R)$x]}
+0:Scalar pattern subscripts without wildcards
+>2 11
+>53 60
+>, twinkle, little *,
+
+ x='*'
+ print $s[(i)*] $s[(i)\*] $s[(i)$x*] $s[(i)${(q)x}*] $s[(I)$x\*]
+ print $s[(r)?,(R)\?] $s[(r)\?,(R)?]
+ print $s[(r)\*,(R)*]
+ print $s[(r)\],(R)\[]
+0:Scalar pattern subscripts with wildcards
+>1 26 1 26 26
+>Twinkle, twinkle, little *, [how] I [wonder] what? ? You are!
+>*, [how] I [wonder] what? You are!
+>] I [
+
+ print $s[(i)x] : $s[(I)x]
+ print $s[(r)x] : $s[(R)x]
+0:Scalar pattern subscripts that do not match
+>61 : 0
+>:
+
+ print -R $s[$s[(i)\[]] $s[(i)$s[(r)\*]] $s[(i)${(q)s[(r)\]]}]
+0:Scalar subscripting using a pattern subscript to get the index
+>[ 1 33
+
+ print -R $a[(r)?] $a[(R)?]
+ print $a[(n:2:i)?] $a[(n:2:I)?]
+ print $a[(i)\?] $a[(I)\?]
+ print $a[(i)*] $a[(i)\*]
+0:Array pattern subscripts
+>1 ?
+>2 2
+>3 3
+>1 13
+
+ # It'd be nice to do some of the following with (r), but we run into
+ # limitations of the ztst script parsing of backslashes in the output.
+ print -R $a[(i)\\\\?] $a[(i)\\\\\?]
+ print -R $a[(i)\\\\\\\\?] $a[(i)\\\\\\\\\?]
+ print -R ${a[(i)\\\\\\\\?]} ${a[(i)\\\\\\\\\?]}
+ print -R "$a[(i)\\\\\\\\?] $a[(i)\\\\\\\\\?]"
+ print -R $a[(i)\]] $a[(i)\\\\\]] $a[(i)\\\\\\\\\]] $a[(i)\\\\\\\\\\\\\]]
+ print -R $a[(i)${(q)a[5]}] $a[(i)${(q)a[8]}] $a[(i)${(q)a[11]}]
+ print -R $a[(i)${a[3]}] $a[(i)${a[6]}] $a[(i)${a[9]}] $a[(i)${a[12]}]
+0:Array pattern subscripts with multiple backslashes
+>4 6
+>7 9
+>7 9
+>7 9
+>2 5 8 11
+>5 8 11
+>1 3 4 6
+
+ print -R $A[1] $A[?] $A[\\\\3] $A[\\\]]
+ print -R $A[$a[11]]
+ print -R $A[${(q)a[5]}]
+0:Associative array lookup (direct subscripting)
+>] \2 \\] \?
+>\\\?
+>\\\?
+
+ # The (o) is necessary here for predictable output ordering
+ print -R $A[(I)\?] ${(o)A[(I)?]}
+ print -R $A[(i)\\\\\\\\3]
+ print -R $A[(I)\\\\\\\\\?] ${(o)A[(I)\\\\\\\\?]}
+0:Associative array lookup (pattern subscripting)
+>? 1 ?
+>\\3
+>\\? \\3 \\?
+
+ print -R $A[(R)\?] : ${(o)A[(R)?]}
+ print -R $A[(R)\\\\\?] ${(o)A[(R)\\\\?]} ${(o)A[(R)\\\\\?]}
+ print -R ${(o)A[(R)\\\\\\\\\]]}
+0:Associative array lookup (reverse subscripting)
+>: ]
+>\? \2 \? \?
+>\\]
+
+ eval 'A[*]=star'
+1:Illegal associative array assignment
+?(eval):1: A: attempt to set slice of associative array
+
+ x='*'
+ A[$x]=xstar
+ A[${(q)x}]=qxstar
+ print -R ${(k)A[(r)xstar]} $A[$x]
+ print -R ${(k)A[(r)qxstar]} $A[${(q)x}]
+ A[(e)*]=star
+ A[\*]=backstar
+ print -R ${(k)A[(r)star]} $A[(e)*]
+ print -R ${(k)A[(r)backstar]} $A[\*]
+0:Associative array assignment
+>* xstar
+>\* qxstar
+>* star
+>\* backstar
+
+ o='['
+ c=']'
+ A[\]]=cbrack
+ A[\[]=obrack
+ A[\\\[]=backobrack
+ A[\\\]]=backcbrack
+ print -R $A[$o] $A[$c] $A[\[] $A[\]] $A[\\\[] $A[\\\]]
+ print -R $A[(i)\[] $A[(i)\]] $A[(i)\\\\\[] $A[(i)\\\\\]]
+0:Associative array keys with open and close brackets
+>obrack cbrack obrack cbrack backobrack backcbrack
+>[ ] \[ \]
+
+ print -R $A[$o] $A[$s[(r)\[]]
+ print -R $A[(r)$c] $A[(r)$s[(r)\]]]
+ print -R $A[$A[(i)\\\\\]]]
+0:Associative array lookup using a pattern subscript to get the key
+>obrack obrack
+>] ]
+>backcbrack
+
+ print -R ${A[${A[(r)\\\\\\\\\]]}]::=zounds}
+ print -R ${A[${A[(r)\\\\\\\\\]]}]}
+ print -R $A[\\\\\]]
+0:Associative array substitution-assignment with reverse pattern subscript key
+>zounds
+>zounds
+>zounds
+
+ print -R ${(o)A[(K)\]]}
+ print -R ${(o)A[(K)\\\]]}
+0:Associative array keys interpreted as patterns
+>\2 backcbrack cbrack star
+>\\\4 \\\? star zounds
+
+# It doesn't matter which element we get, since we never guarantee
+# ordering of an associative array. So just test the number of matches.
+ array=(${(o)A[(k)\]]})
+ print ${#array}
+ array=(${(o)A[(k)\\\]]})
+ print ${#array}
+0:Associative array keys interpreted as patterns, single match
+>1
+>1
+
+ typeset -g "A[one\"two\"three\"quotes]"=QQQ
+ typeset -g 'A[one\"two\"three\"quotes]'=qqq
+ print -R "$A[one\"two\"three\"quotes]"
+ print -R $A[one\"two\"three\"quotes]
+ A[one"two"three"four"quotes]=QqQq
+ print -R $A[one"two"three"four"quotes]
+ print -R $A[$A[(i)one\"two\"three\"quotes]]
+ print -R "$A[$A[(i)one\"two\"three\"quotes]]"
+0:Associative array keys with double quotes
+>QQQ
+>qqq
+>QqQq
+>qqq
+>QQQ
+
+ print ${x::=$A[$A[(i)one\"two\"three\"quotes]]}
+ print $x
+ print ${x::="$A[$A[(i)one\"two\"three\"quotes]]"}
+ print $x
+0:More keys with double quotes, used in assignment-expansion
+>qqq
+>qqq
+>QQQ
+>QQQ
+
+ qqq=lower
+ QQQ=upper
+ print ${(P)A[one\"two\"three\"quotes]}
+ print "${(P)A[$A[(i)one\"two\"three\"quotes]]}"
+0:Keys with double quotes and the (P) expansion flag
+>lower
+>upper
+
+ typeset -ga empty
+ echo X${${empty##*}[-1]}X
+0:Negative index applied to substition result from empty array
+>XX
+
+ print $empty[(i)] $empty[(I)]
+0:(i) returns 1 for empty array, (I) returns 0.
+>1 0
+
+ array=(one two three four)
+ print X$array[0]X
+0:Element zero is empty if KSH_ZERO_SUBSCRIPT is off.
+>XX
+
+ array[0]=fumble
+1:Can't set element zero if KSH_ZERO_SUBSCRIPT is off.
+?(eval):1: array: assignment to invalid subscript range
+
+ print X$array[(R)notfound]X
+0:(R) returns empty if not found if KSH_ZERO_SUBSCRIPT is off.
+>XX
+
+ setopt KSH_ZERO_SUBSCRIPT
+ print X$array[0]X
+0:Element zero is element one if KSH_ZERO_SUBSCRIPT is on.
+>XoneX
+
+ array[0]=fimble
+ print $array
+0:Can set element zero if KSH_ZERO_SUBSCRIPT is on.
+>fimble two three four
+
+ print X$array[(R)notfound]X
+0:(R) yuckily returns the first element on failure withe KSH_ZERO_SUBSCRIPT
+>XfimbleX
+
+ unsetopt KSH_ZERO_SUBSCRIPT
+ array[(R)notfound,(r)notfound]=(help help here come the seventies retreads)
+ print $array
+0:[(R)notfound,(r)notfound] replaces the whole array
+>help help here come the seventies retreads
+
+ string="Why, if it isn't Officer Dibble"
+ print "[${string[0]}][${string[1]}][${string[0,3]}]"
+0:String subscripts with KSH_ZERO_SUBSCRIPT unset
+>[][W][Why]
+
+ setopt KSH_ZERO_SUBSCRIPT
+ print "[${string[0]}][${string[1]}][${string[0,3]}]"
+0:String subscripts with KSH_ZERO_SUBSCRIPT set
+>[W][W][Why]
+
+ unsetopt KSH_ZERO_SUBSCRIPT
+ string[0,3]="Goodness"
+ print $string
+0:Assignment to chunk of string ignores element 0
+>Goodness, if it isn't Officer Dibble
+
+ string[0]=!
+1:Can't set only element zero of string
+?(eval):1: string: assignment to invalid subscript range
+
+ typeset -A assoc=(leader topcat officer dibble sidekick choochoo)
+ alias myind='echo leader' myletter='echo 1' myletter2='echo 4'
+ print ${assoc[$(myind)]}
+ print $assoc[$(myind)]
+ print ${assoc[$(myind)][$(myletter)]}${assoc[$(myind)][$(myletter2)]}
+ assoc[$(myind)]='of the gang'
+ print ${assoc[$(myind)]}
+ print $assoc[$(myind)]
+ print $assoc[leader]
+0: Parsing subscript with non-trivial tokenisation
+>topcat
+>topcat
+>tc
+>of the gang
+>of the gang
+>of the gang