14887Schin########################################################################
24887Schin#                                                                      #
34887Schin#               This software is part of the ast package               #
4*8462SApril.Chin@Sun.COM#          Copyright (c) 1982-2008 AT&T Intellectual Property          #
54887Schin#                      and is licensed under the                       #
64887Schin#                  Common Public License, Version 1.0                  #
7*8462SApril.Chin@Sun.COM#                    by AT&T Intellectual Property                     #
84887Schin#                                                                      #
94887Schin#                A copy of the License is available at                 #
104887Schin#            http://www.opensource.org/licenses/cpl1.0.txt             #
114887Schin#         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         #
124887Schin#                                                                      #
134887Schin#              Information and Software Systems Research               #
144887Schin#                            AT&T Research                             #
154887Schin#                           Florham Park NJ                            #
164887Schin#                                                                      #
174887Schin#                  David Korn <dgk@research.att.com>                   #
184887Schin#                                                                      #
194887Schin########################################################################
204887Schinfunction err_exit
214887Schin{
22*8462SApril.Chin@Sun.COM	print -u2 -r $'\t'"${Command}[$1] ${@:2}"
234887Schin	((errors++))
244887Schin}
254887Schinalias err_exit='err_exit $LINENO'
264887Schin
274887Schininteger aware=0 contrary=0 ignorant=0
284887Schin
294887Schinfunction test_glob
304887Schin{
314887Schin	typeset lineno expected drop arg got sep op val add del
32*8462SApril.Chin@Sun.COM	lineno=$1
33*8462SApril.Chin@Sun.COM	shift
344887Schin	if	[[ $1 == --* ]]
354887Schin	then	del=${1#--}
364887Schin		shift
374887Schin	fi
384887Schin	if	[[ $1 == ++* ]]
394887Schin	then	add=${1#++}
404887Schin		shift
414887Schin	fi
42*8462SApril.Chin@Sun.COM	expected=$1
43*8462SApril.Chin@Sun.COM	shift
444887Schin	if	(( contrary ))
454887Schin	then	if	[[ $expected == "<Beware> "* ]]
464887Schin		then	expected=${expected#"<Beware> "}
474887Schin			expected="$expected <Beware>"
484887Schin		fi
494887Schin		if	[[ $expected == *"<aXb> <abd>"* ]]
504887Schin		then	expected=${expected/"<aXb> <abd>"/"<abd> <aXb>"}
514887Schin		fi
524887Schin	fi
534887Schin	for arg
544887Schin	do	got="$got$sep<$arg>"
554887Schin		sep=" "
564887Schin	done
574887Schin	if	(( ignorant && aware ))
584887Schin	then	if	[[ $del ]]
594887Schin		then	got="<$del> $got"
604887Schin		fi
614887Schin		if	[[ $add ]]
624887Schin		then	expected="<$add> $expected"
634887Schin		fi
644887Schin	fi
654887Schin	if	[[ $got != "$expected" ]]
66*8462SApril.Chin@Sun.COM	then	'err_exit' $lineno "glob -- expected '$expected', got '$got'"
674887Schin	fi
684887Schin}
69*8462SApril.Chin@Sun.COMalias test_glob='test_glob $LINENO'
704887Schin
714887Schinfunction test_case
724887Schin{
734887Schin	typeset lineno expected subject pattern got
744887Schin	lineno=$1 expected=$2 subject=$3 pattern=$4
754887Schin	eval "
764887Schin		case $subject in
774887Schin		$pattern)	got='<match>' ;;
784887Schin		*)		got='<nomatch>' ;;
794887Schin		esac
804887Schin	"
814887Schin	if	[[ $got != "$expected" ]]
82*8462SApril.Chin@Sun.COM	then	'err_exit' $lineno "case $subject in $pattern) -- expected '$expected', got '$got'"
834887Schin	fi
844887Schin}
85*8462SApril.Chin@Sun.COMalias test_case='test_case $LINENO'
864887Schin
874887SchinCommand=${0##*/}
884887Schintmp=/tmp/ksh$$
894887Schininteger errors=0
904887Schinunset undefined
914887Schin
924887Schinexport LC_COLLATE=C
934887Schin
94*8462SApril.Chin@Sun.COMmkdir $tmp || err_exit "mkdir $tmp failed"
954887Schintrap "cd /; rm -rf $tmp" EXIT
96*8462SApril.Chin@Sun.COMcd $tmp || err_exit "cd $tmp failed"
974887Schinrm -rf *
984887Schin
994887Schintouch B b
1004887Schinset -- *
1014887Schincase $* in
1024887Schin'b B')	contrary=1 ;;
1034887Schinb|B)	ignorant=1 ;;
1044887Schinesac
1054887Schinset -- $(/bin/sh -c 'echo [a-c]')
1064887Schincase $* in
1074887SchinB)	aware=1 ;;
1084887Schinesac
1094887Schinrm -rf *
1104887Schin
1114887Schintouch a b c d abc abd abe bb bcd ca cb dd de Beware
1124887Schinmkdir bdir
1134887Schin
114*8462SApril.Chin@Sun.COMtest_glob '<a> <abc> <abd> <abe> <X*>' a* X*
115*8462SApril.Chin@Sun.COMtest_glob '<a> <abc> <abd> <abe>' \a*
1164887Schin
1174887Schinif	( set --nullglob ) 2>/dev/null
1184887Schinthen
1194887Schin	set --nullglob
1204887Schin
121*8462SApril.Chin@Sun.COM	test_glob '<a> <abc> <abd> <abe>' a* X*
1224887Schin
1234887Schin	set --nonullglob
1244887Schinfi
1254887Schin
1264887Schinif	( set --failglob ) 2>/dev/null
1274887Schinthen
1284887Schin	set --failglob
1294887Schin	mkdir tmp
1304887Schin	touch tmp/l1 tmp/l2 tmp/l3
1314887Schin
132*8462SApril.Chin@Sun.COM	test_glob '' tmp/l[12] tmp/*4 tmp/*3
133*8462SApril.Chin@Sun.COM	test_glob '' tmp/l[12] tmp/*4 tmp/*3
1344887Schin
1354887Schin	rm -r tmp
1364887Schin	set --nofailglob
1374887Schinfi
1384887Schin
139*8462SApril.Chin@Sun.COMtest_glob '<bdir/>' b*/
140*8462SApril.Chin@Sun.COMtest_glob '<*>' \*
141*8462SApril.Chin@Sun.COMtest_glob '<a*>' 'a*'
142*8462SApril.Chin@Sun.COMtest_glob '<a*>' a\*
143*8462SApril.Chin@Sun.COMtest_glob '<c> <ca> <cb> <a*> <*q*>' c* a\* *q*
144*8462SApril.Chin@Sun.COMtest_glob '<**>' "*"*
145*8462SApril.Chin@Sun.COMtest_glob '<**>' \**
146*8462SApril.Chin@Sun.COMtest_glob '<\.\./*/>' "\.\./*/"
147*8462SApril.Chin@Sun.COMtest_glob '<s/\..*//>' 's/\..*//'
148*8462SApril.Chin@Sun.COMtest_glob '</^root:/{s/^[!:]*:[!:]*:\([!:]*\).*$/\1/>' "/^root:/{s/^[!:]*:[!:]*:\([!:]*\).*"'$'"/\1/"
149*8462SApril.Chin@Sun.COMtest_glob '<abc> <abd> <abe> <bb> <cb>' [a-c]b*
150*8462SApril.Chin@Sun.COMtest_glob ++Beware '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> <dd> <de>' [a-y]*[!c]
151*8462SApril.Chin@Sun.COMtest_glob '<abd> <abe>' a*[!c]
1524887Schin
1534887Schintouch a-b aXb
1544887Schin
155*8462SApril.Chin@Sun.COMtest_glob '<a-b> <aXb>' a[X-]b
1564887Schin
1574887Schintouch .x .y
1584887Schin
159*8462SApril.Chin@Sun.COMtest_glob --Beware '<Beware> <d> <dd> <de>' [!a-c]*
1604887Schin
1614887Schinif	mkdir a\*b 2>/dev/null
1624887Schinthen
1634887Schin	touch a\*b/ooo
1644887Schin
165*8462SApril.Chin@Sun.COM	test_glob '<a*b/ooo>' a\*b/*
166*8462SApril.Chin@Sun.COM	test_glob '<a*b/ooo>' a\*?/*
167*8462SApril.Chin@Sun.COM	test_case '<match>' '!7' '*\!*'
168*8462SApril.Chin@Sun.COM	test_case '<match>' 'r.*' '*.\*'
169*8462SApril.Chin@Sun.COM	test_glob '<abc>' a[b]c
170*8462SApril.Chin@Sun.COM	test_glob '<abc>' a["b"]c
171*8462SApril.Chin@Sun.COM	test_glob '<abc>' a[\b]c
172*8462SApril.Chin@Sun.COM	test_glob '<abc>' a?c
173*8462SApril.Chin@Sun.COM	test_case '<match>' 'abc' 'a"b"c'
174*8462SApril.Chin@Sun.COM	test_case '<match>' 'abc' 'a*c'
175*8462SApril.Chin@Sun.COM	test_case '<nomatch>' 'abc' '"a?c"'
176*8462SApril.Chin@Sun.COM	test_case '<nomatch>' 'abc' 'a\*c'
177*8462SApril.Chin@Sun.COM	test_case '<nomatch>' 'abc' 'a\[b]c'
178*8462SApril.Chin@Sun.COM	test_case '<match>' '"$undefined"' '""'
179*8462SApril.Chin@Sun.COM	test_case '<match>' 'abc' 'a["\b"]c'
1804887Schin
1814887Schin	rm -rf mkdir a\*b
1824887Schinfi
1834887Schin
1844887Schinmkdir man
1854887Schinmkdir man/man1
1864887Schintouch man/man1/sh.1
1874887Schin
188*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.*
189*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' $(echo */man*/sh.*)
190*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' "$(echo */man*/sh.*)"
1914887Schin
192*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' 'a***c'
193*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' 'a*****?c'
194*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?*****??'
195*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*****??'
196*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*****??c'
197*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?*****?c'
198*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****c'
199*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****?'
200*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '?***?****'
201*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*******c'
202*8462SApril.Chin@Sun.COMtest_case '<match>' 'abc' '*******?'
203*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a*cd**?**??k'
204*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k'
205*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k***'
206*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k'
207*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k**'
208*8462SApril.Chin@Sun.COMtest_case '<match>' 'abcdecdhjk' 'a****c**?**??*****'
209*8462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[-abc]'
210*8462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[abc-]'
211*8462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" '\\'
212*8462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" '[\\]'
213*8462SApril.Chin@Sun.COMtest_case '<match>' "'\\'" "'\\'"
214*8462SApril.Chin@Sun.COMtest_case '<match>' "'['" '[[]'
215*8462SApril.Chin@Sun.COMtest_case '<match>' '[' '[[]'
216*8462SApril.Chin@Sun.COMtest_case '<match>' "'['" '['
217*8462SApril.Chin@Sun.COMtest_case '<match>' '[' '['
218*8462SApril.Chin@Sun.COMtest_case '<match>' "'[abc'" "'['*"
219*8462SApril.Chin@Sun.COMtest_case '<nomatch>' "'[abc'" '[*'
220*8462SApril.Chin@Sun.COMtest_case '<match>' '[abc' "'['*"
221*8462SApril.Chin@Sun.COMtest_case '<nomatch>' '[abc' '[*'
222*8462SApril.Chin@Sun.COMtest_case '<match>' 'abd' "a[b/c]d"
223*8462SApril.Chin@Sun.COMtest_case '<match>' 'a/d' "a[b/c]d"
224*8462SApril.Chin@Sun.COMtest_case '<match>' 'acd' "a[b/c]d"
225*8462SApril.Chin@Sun.COMtest_case '<match>' "']'" '[]]'
226*8462SApril.Chin@Sun.COMtest_case '<match>' "'-'" '[]-]'
227*8462SApril.Chin@Sun.COMtest_case '<match>' 'p' '[a-\z]'
228*8462SApril.Chin@Sun.COMtest_case '<match>' '"/tmp"' '[/\\]*'
229*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '??**********?****?'
230*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '??**********?****c'
231*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '?************c****?****'
232*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' '*c*?**'
233*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' 'a*****c*?**'
234*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'abc' 'a********???*******'
235*8462SApril.Chin@Sun.COMtest_case '<nomatch>' "'a'" '[]'
236*8462SApril.Chin@Sun.COMtest_case '<nomatch>' 'a' '[]'
237*8462SApril.Chin@Sun.COMtest_case '<nomatch>' "'['" '[abc'
238*8462SApril.Chin@Sun.COMtest_case '<nomatch>' '[' '[abc'
2394887Schin
240*8462SApril.Chin@Sun.COMtest_glob ++Beware '<b> <bb> <bcd> <bdir>' b*
241*8462SApril.Chin@Sun.COMtest_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]*
2424887Schin
2434887Schinif	( set --nocaseglob ) 2>/dev/null
2444887Schinthen
2454887Schin	set --nocaseglob
2464887Schin
247*8462SApril.Chin@Sun.COM	test_glob '<Beware> <b> <bb> <bcd> <bdir>' b*
248*8462SApril.Chin@Sun.COM	test_glob '<Beware> <b> <bb> <bcd> <bdir>' [b]*
249*8462SApril.Chin@Sun.COM	test_glob '<Beware> <b> <bb> <bcd> <bdir>' [bB]*
2504887Schin
2514887Schin	set --nonocaseglob
2524887Schinfi
2534887Schin
2544887Schinif	( set -f ) 2>/dev/null
2554887Schinthen
2564887Schin	set -f
2574887Schin
258*8462SApril.Chin@Sun.COM	test_glob '<*>' *
2594887Schin
2604887Schin	set +f
2614887Schinfi
2624887Schin
2634887Schinif	( set --noglob ) 2>/dev/null
2644887Schinthen
2654887Schin	set --noglob
2664887Schin
267*8462SApril.Chin@Sun.COM	test_glob '<*>' *
2684887Schin
2694887Schin	set --glob
2704887Schinfi
2714887Schin
2724887SchinFIGNORE='.*|*'
273*8462SApril.Chin@Sun.COMtest_glob '<*>' *
2744887Schin
2754887SchinFIGNORE='.*|*c|*e|?'
276*8462SApril.Chin@Sun.COMtest_glob '<a-b> <aXb> <abd> <bb> <bcd> <bdir> <ca> <cb> <dd> <man>' *
2774887Schin
2784887SchinFIGNORE='.*|*b|*d|?'
279*8462SApril.Chin@Sun.COMtest_glob '<Beware> <abc> <abe> <bdir> <ca> <de> <man>' *
2804887Schin
2814887SchinFIGNORE=
282*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.*
2834887Schin
2844887Schinunset FIGNORE
285*8462SApril.Chin@Sun.COMtest_glob '<bb> <ca> <cb> <dd> <de>' ??
286*8462SApril.Chin@Sun.COMtest_glob '<man/man1/sh.1>' */man*/sh.*
2874887Schin
2884887SchinGLOBIGNORE='.*:*'
2894887Schinset -- *
2904887Schinif	[[ $1 == '*' ]]
2914887Schinthen
2924887Schin	GLOBIGNORE='.*:*c:*e:?'
293*8462SApril.Chin@Sun.COM	test_glob '<>' *
2944887Schin
2954887Schin	GLOBIGNORE='.*:*b:*d:?'
296*8462SApril.Chin@Sun.COM	test_glob '<>' *
2974887Schin
2984887Schin	unset GLOBIGNORE
299*8462SApril.Chin@Sun.COM	test_glob '<>' *
300*8462SApril.Chin@Sun.COM	test_glob '<man/man1/sh.1>' */man*/sh.*
3014887Schin
3024887Schin	GLOBIGNORE=
303*8462SApril.Chin@Sun.COM	test_glob '<man/man1/sh.1>' */man*/sh.*
3044887Schinfi
305*8462SApril.Chin@Sun.COMunset GLOBIGNORE
306*8462SApril.Chin@Sun.COM
307*8462SApril.Chin@Sun.COMfunction test_sub
308*8462SApril.Chin@Sun.COM{
309*8462SApril.Chin@Sun.COM	x='${subject'$2'}'
310*8462SApril.Chin@Sun.COM	eval g=$x
311*8462SApril.Chin@Sun.COM	if	[[ "$g" != "$3" ]]
312*8462SApril.Chin@Sun.COM	then	'err_exit' $1 subject="'$subject' $x failed, expected '$3', got '$g'"
313*8462SApril.Chin@Sun.COM	fi
314*8462SApril.Chin@Sun.COM}
315*8462SApril.Chin@Sun.COMalias test_sub='test_sub $LINENO'
316*8462SApril.Chin@Sun.COM
317*8462SApril.Chin@Sun.COMset --noglob --nobraceexpand
318*8462SApril.Chin@Sun.COM
319*8462SApril.Chin@Sun.COMsubject='A regular expressions test'
320*8462SApril.Chin@Sun.COM
321*8462SApril.Chin@Sun.COMtest_sub '/e/#'               'A r#gular expressions test'
322*8462SApril.Chin@Sun.COMtest_sub '//e/#'              'A r#gular #xpr#ssions t#st'
323*8462SApril.Chin@Sun.COMtest_sub '/[^e]/#'            '# regular expressions test'
324*8462SApril.Chin@Sun.COMtest_sub '//[^e]/#'           '###e######e###e########e##'
325*8462SApril.Chin@Sun.COMtest_sub '/+(e)/#'            'A r#gular expressions test'
326*8462SApril.Chin@Sun.COMtest_sub '//+(e)/#'           'A r#gular #xpr#ssions t#st'
327*8462SApril.Chin@Sun.COMtest_sub '/@-(e)/#'           'A r#gular expressions test'
328*8462SApril.Chin@Sun.COMtest_sub '//@-(e)/#'          'A r#gular #xpr#ssions t#st'
329*8462SApril.Chin@Sun.COMtest_sub '/?(e)/#'            '#A regular expressions test'
330*8462SApril.Chin@Sun.COMtest_sub '//?(e)/#'           '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#'
331*8462SApril.Chin@Sun.COMtest_sub '/*(e)/#'            '#A regular expressions test'
332*8462SApril.Chin@Sun.COMtest_sub '//*(e)/#'           '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#'
333*8462SApril.Chin@Sun.COMtest_sub '//@(e)/[\1]'        'A r[e]gular [e]xpr[e]ssions t[e]st'
334*8462SApril.Chin@Sun.COMtest_sub '//@-(e)/[\1]'       'A r[e]gular [e]xpr[e]ssions t[e]st'
335*8462SApril.Chin@Sun.COMtest_sub '//+(e)/[\1]'        'A r[e]gular [e]xpr[e]ssions t[e]st'
336*8462SApril.Chin@Sun.COMtest_sub '//+-(e)/[\1]'       'A r[e]gular [e]xpr[e]ssions t[e]st'
337*8462SApril.Chin@Sun.COMtest_sub '//@(+(e))/[\1]'     'A r[e]gular [e]xpr[e]ssions t[e]st'
338*8462SApril.Chin@Sun.COMtest_sub '//@(+-(e))/[\1]'    'A r[e]gular [e]xpr[e]ssions t[e]st'
339*8462SApril.Chin@Sun.COMtest_sub '//-(e)/#'           'A regular expressions test'
340*8462SApril.Chin@Sun.COMtest_sub '//--(e)/#'          'A regular expressions test'
341*8462SApril.Chin@Sun.COMtest_sub '//?(e)/[\1]'        '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
342*8462SApril.Chin@Sun.COMtest_sub '//{0,1}(e)/[\1]'    '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
343*8462SApril.Chin@Sun.COMtest_sub '//*(e)/[\1]'        '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
344*8462SApril.Chin@Sun.COMtest_sub '//{0,}(e)/[\1]'     '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
345*8462SApril.Chin@Sun.COMtest_sub '//@(?(e))/[\1]'     '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
346*8462SApril.Chin@Sun.COMtest_sub '//@({0,1}(e))/[\1]' '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
347*8462SApril.Chin@Sun.COMtest_sub '//@(*(e))/[\1]'     '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
348*8462SApril.Chin@Sun.COMtest_sub '//@({0,}(e))/[\1]'  '[]A[] []r[e]g[]u[]l[]a[]r[] [e]x[]p[]r[e]s[]s[]i[]o[]n[]s[] []t[e]s[]t[]'
349*8462SApril.Chin@Sun.COMtest_sub '/?-(e)/#'           '#A regular expressions test'
350*8462SApril.Chin@Sun.COMtest_sub '/@(?-(e))/[\1]'     '[]A regular expressions test'
351*8462SApril.Chin@Sun.COMtest_sub '/!(e)/#'            '#'
352*8462SApril.Chin@Sun.COMtest_sub '//!(e)/#'           '#'
353*8462SApril.Chin@Sun.COMtest_sub '/@(!(e))/[\1]'      '[A regular expressions test]'
354*8462SApril.Chin@Sun.COMtest_sub '//@(!(e))/[\1]'     '[A regular expressions test]'
355*8462SApril.Chin@Sun.COM
356*8462SApril.Chin@Sun.COMsubject='e'
357*8462SApril.Chin@Sun.COM
358*8462SApril.Chin@Sun.COMtest_sub '/!(e)/#'            '#e'
359*8462SApril.Chin@Sun.COMtest_sub '//!(e)/#'           '#e#'
360*8462SApril.Chin@Sun.COMtest_sub '/!(e)/[\1]'         '[]e'
361*8462SApril.Chin@Sun.COMtest_sub '//!(e)/[\1]'        '[]e[]'
362*8462SApril.Chin@Sun.COMtest_sub '/@(!(e))/[\1]'      '[]e'
363*8462SApril.Chin@Sun.COMtest_sub '//@(!(e))/[\1]'     '[]e[]'
364*8462SApril.Chin@Sun.COM
365*8462SApril.Chin@Sun.COMsubject='a'
366*8462SApril.Chin@Sun.COM
367*8462SApril.Chin@Sun.COMtest_sub '/@(!(a))/[\1]'      '[]a'
368*8462SApril.Chin@Sun.COMtest_sub '//@(!(a))/[\1]'     '[]a[]'
369*8462SApril.Chin@Sun.COM
370*8462SApril.Chin@Sun.COMsubject='aha'
371*8462SApril.Chin@Sun.COM
372*8462SApril.Chin@Sun.COMtest_sub '/@(!(a))/[\1]'      '[aha]'
373*8462SApril.Chin@Sun.COMtest_sub '//@(!(a))/[\1]'     '[aha]'
374*8462SApril.Chin@Sun.COMtest_sub '/@(!(aha))/[\1]'    '[ah]a'
375*8462SApril.Chin@Sun.COMtest_sub '//@(!(aha))/[\1]'   '[ah][a]'
3764887Schin
3774887Schinexit $errors
378