Blame src/cmd/ksh93/tests/glob.sh

Packit Service a8c26c
########################################################################
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#               This software is part of the ast package               #
Packit Service a8c26c
#          Copyright (c) 1982-2012 AT&T Intellectual Property          #
Packit Service a8c26c
#                      and is licensed under the                       #
Packit Service a8c26c
#                 Eclipse Public License, Version 1.0                  #
Packit Service a8c26c
#                    by AT&T Intellectual Property                     #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#                A copy of the License is available at                 #
Packit Service a8c26c
#          http://www.eclipse.org/org/documents/epl-v10.html           #
Packit Service a8c26c
#         (with md5 checksum b35adb5213ca9657e911e9befb180842)         #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#              Information and Software Systems Research               #
Packit Service a8c26c
#                            AT&T Research                             #
Packit Service a8c26c
#                           Florham Park NJ                            #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
#                  David Korn <dgk@research.att.com>                   #
Packit Service a8c26c
#                                                                      #
Packit Service a8c26c
########################################################################
Packit Service a8c26c
function err_exit
Packit Service a8c26c
{
Packit Service a8c26c
	print -u2 -r $'\t'"${Command}[$1] ${@:2}"
Packit Service a8c26c
	((Errors++))
Packit Service a8c26c
}
Packit Service a8c26c
alias err_exit='err_exit $LINENO'
Packit Service a8c26c
Packit Service a8c26c
Command=${0##*/}
Packit Service a8c26c
integer aware=0 contrary=0 Errors=0 ignorant=0
Packit Service a8c26c
Packit Service a8c26c
tmp=$(mktemp -dt) || { err_exit mktemp -dt failed; exit 1; }
Packit Service a8c26c
trap "cd /; rm -rf $tmp" EXIT
Packit Service a8c26c
Packit Service a8c26c
function test_glob
Packit Service a8c26c
{
Packit Service a8c26c
	typeset lineno expected drop arg got sep op val add del
Packit Service a8c26c
	lineno=$1
Packit Service a8c26c
	shift
Packit Service a8c26c
	if	[[ $1 == --* ]]
Packit Service a8c26c
	then	del=${1#--}
Packit Service a8c26c
		shift
Packit Service a8c26c
	fi
Packit Service a8c26c
	if	[[ $1 == ++* ]]
Packit Service a8c26c
	then	add=${1#++}
Packit Service a8c26c
		shift
Packit Service a8c26c
	fi
Packit Service a8c26c
	expected=$1
Packit Service a8c26c
	shift
Packit Service a8c26c
	if	(( contrary ))
Packit Service a8c26c
	then	if	[[ $expected == "<Beware> "* ]]
Packit Service a8c26c
		then	expected=${expected#"<Beware> "}
Packit Service a8c26c
			expected="$expected <Beware>"
Packit Service a8c26c
		fi
Packit Service a8c26c
		if	[[ $expected == *"<aXb> <abd>"* ]]
Packit Service a8c26c
		then	expected=${expected/"<aXb> <abd>"/"<abd> <aXb>"}
Packit Service a8c26c
		fi
Packit Service a8c26c
	fi
Packit Service a8c26c
	for arg
Packit Service a8c26c
	do	got="$got$sep<$arg>"
Packit Service a8c26c
		sep=" "
Packit Service a8c26c
	done
Packit Service a8c26c
	if	(( ignorant && aware ))
Packit Service a8c26c
	then	if	[[ $del ]]
Packit Service a8c26c
		then	got="<$del> $got"
Packit Service a8c26c
		fi
Packit Service a8c26c
		if	[[ $add ]]
Packit Service a8c26c
		then	expected="<$add> $expected"
Packit Service a8c26c
		fi
Packit Service a8c26c
	fi
Packit Service a8c26c
	if	[[ $got != "$expected" ]]
Packit Service a8c26c
	then	'err_exit' $lineno "glob -- expected '$expected', got '$got'"
Packit Service a8c26c
	fi
Packit Service a8c26c
}
Packit Service a8c26c
alias test_glob='test_glob $LINENO'
Packit Service a8c26c
Packit Service a8c26c
function test_case
Packit Service a8c26c
{
Packit Service a8c26c
	typeset lineno expected subject pattern got
Packit Service a8c26c
	lineno=$1 expected=$2 subject=$3 pattern=$4
Packit Service a8c26c
	eval "
Packit Service a8c26c
		case $subject in
Packit Service a8c26c
		$pattern)	got='<match>' ;;
Packit Service a8c26c
		*)		got='<nomatch>' ;;
Packit Service a8c26c
		esac
Packit Service a8c26c
	"
Packit Service a8c26c
	if	[[ $got != "$expected" ]]
Packit Service a8c26c
	then	'err_exit' $lineno "case $subject in $pattern) -- expected '$expected', got '$got'"
Packit Service a8c26c
	fi
Packit Service a8c26c
}
Packit Service a8c26c
alias test_case='test_case $LINENO'
Packit Service a8c26c
Packit Service a8c26c
unset undefined
Packit Service a8c26c
Packit Service a8c26c
cd $tmp || { err_exit "cd $tmp failed"; exit 1; }
Packit Service a8c26c
Packit Service a8c26c
export LC_COLLATE=C
Packit Service a8c26c
touch B b
Packit Service a8c26c
set -- *
Packit Service a8c26c
case $* in
Packit Service a8c26c
'b B')	contrary=1 ;;
Packit Service a8c26c
b|B)	ignorant=1 ;;
Packit Service a8c26c
esac
Packit Service a8c26c
set -- $(LC_ALL=C /bin/sh -c 'echo [a-c]')
Packit Service a8c26c
case $* in
Packit Service a8c26c
B)	aware=1 ;;
Packit Service a8c26c
esac
Packit Service a8c26c
rm -rf *
Packit Service a8c26c
Packit Service a8c26c
touch a b c d abc abd abe bb bcd ca cb dd de Beware
Packit Service a8c26c
mkdir bdir
Packit Service a8c26c
Packit Service a8c26c
test_glob ' <abc> <abd> <abe> <X*>' a* X*
Packit Service a8c26c
test_glob ' <abc> <abd> <abe>' \a*
Packit Service a8c26c
Packit Service a8c26c
if	( set --nullglob ) 2>/dev/null
Packit Service a8c26c
then
Packit Service a8c26c
	set --nullglob
Packit Service a8c26c
Packit Service a8c26c
	test_glob ' <abc> <abd> <abe>' a* X*
Packit Service a8c26c
Packit Service a8c26c
	set --nonullglob
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
if	( set --failglob ) 2>/dev/null
Packit Service a8c26c
then
Packit Service a8c26c
	set --failglob
Packit Service a8c26c
	mkdir tmp
Packit Service a8c26c
	touch tmp/l1 tmp/l2 tmp/l3
Packit Service a8c26c
Packit Service a8c26c
	test_glob '' tmp/l[12] tmp/*4 tmp/*3
Packit Service a8c26c
	test_glob '' tmp/l[12] tmp/*4 tmp/*3
Packit Service a8c26c
Packit Service a8c26c
	rm -r tmp
Packit Service a8c26c
	set --nofailglob
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
test_glob '<bdir/>' b*/
Packit Service a8c26c
test_glob '<*>' \*
Packit Service a8c26c
test_glob '<a*>' 'a*'
Packit Service a8c26c
test_glob '<a*>' a\*
Packit Service a8c26c
test_glob '<c> <ca> <cb> <a*> <*q*>' c* a\* *q*
Packit Service a8c26c
test_glob '<**>' "*"*
Packit Service a8c26c
test_glob '<**>' \**
Packit Service a8c26c
test_glob '<\.\./*/>' "\.\./*/"
Packit Service a8c26c
test_glob '<s/\..*//>' 's/\..*//'
Packit Service a8c26c
test_glob '</^root:/{s/^[!:]*:[!:]*:\([!:]*\).*$/\1/>' "/^root:/{s/^[!:]*:[!:]*:\([!:]*\).*"'$'"/\1/"
Packit Service a8c26c
test_glob '<abc> <abd> <abe> <bb> <cb>' [a-c]b*
Packit Service a8c26c
test_glob ++Beware '<abd> <abe> <bb> <bcd> <bdir> <ca> <cb> 
<de>' [a-y]*[!c]
Packit Service a8c26c
test_glob '<abd> <abe>' a*[!c]
Packit Service a8c26c
Packit Service a8c26c
touch a-b aXb
Packit Service a8c26c
Packit Service a8c26c
test_glob '<a-b> <aXb>' a[X-]b
Packit Service a8c26c
Packit Service a8c26c
touch .x .y
Packit Service a8c26c
Packit Service a8c26c
test_glob --Beware '<Beware> <d> 
<de>' [!a-c]*
Packit Service a8c26c
Packit Service a8c26c
if	mkdir a\*b 2>/dev/null
Packit Service a8c26c
then
Packit Service a8c26c
	touch a\*b/ooo
Packit Service a8c26c
Packit Service a8c26c
	test_glob '<a*b/ooo>' a\*b/*
Packit Service a8c26c
	test_glob '<a*b/ooo>' a\*?/*
Packit Service a8c26c
	test_case '<match>' '!7' '*\!*'
Packit Service a8c26c
	test_case '<match>' 'r.*' '*.\*'
Packit Service a8c26c
	test_glob '<abc>' a[b]c
Packit Service a8c26c
	test_glob '<abc>' a["b"]c
Packit Service a8c26c
	test_glob '<abc>' a[\b]c
Packit Service a8c26c
	test_glob '<abc>' a?c
Packit Service a8c26c
	test_case '<match>' 'abc' 'a"b"c'
Packit Service a8c26c
	test_case '<match>' 'abc' 'a*c'
Packit Service a8c26c
	test_case '<nomatch>' 'abc' '"a?c"'
Packit Service a8c26c
	test_case '<nomatch>' 'abc' 'a\*c'
Packit Service a8c26c
	test_case '<nomatch>' 'abc' 'a\[b]c'
Packit Service a8c26c
	test_case '<match>' '"$undefined"' '""'
Packit Service a8c26c
	test_case '<match>' 'abc' 'a["\b"]c'
Packit Service a8c26c
Packit Service a8c26c
	rm -rf mkdir a\*b
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
mkdir man
Packit Service a8c26c
mkdir man/man1
Packit Service a8c26c
touch man/man1/sh.1
Packit Service a8c26c
Packit Service a8c26c
test_glob '<man/man1/sh.1>' */man*/sh.*
Packit Service a8c26c
test_glob '<man/man1/sh.1>' $(echo */man*/sh.*)
Packit Service a8c26c
test_glob '<man/man1/sh.1>' "$(echo */man*/sh.*)"
Packit Service a8c26c
Packit Service a8c26c
test_case '<match>' 'abc' 'a***c'
Packit Service a8c26c
test_case '<match>' 'abc' 'a*****?c'
Packit Service a8c26c
test_case '<match>' 'abc' '?*****??'
Packit Service a8c26c
test_case '<match>' 'abc' '*****??'
Packit Service a8c26c
test_case '<match>' 'abc' '*****??c'
Packit Service a8c26c
test_case '<match>' 'abc' '?*****?c'
Packit Service a8c26c
test_case '<match>' 'abc' '?***?****c'
Packit Service a8c26c
test_case '<match>' 'abc' '?***?****?'
Packit Service a8c26c
test_case '<match>' 'abc' '?***?****'
Packit Service a8c26c
test_case '<match>' 'abc' '*******c'
Packit Service a8c26c
test_case '<match>' 'abc' '*******?'
Packit Service a8c26c
test_case '<match>' 'abcdecdhjk' 'a*cd**?**??k'
Packit Service a8c26c
test_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k'
Packit Service a8c26c
test_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??k***'
Packit Service a8c26c
test_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k'
Packit Service a8c26c
test_case '<match>' 'abcdecdhjk' 'a**?**cd**?**??***k**'
Packit Service a8c26c
test_case '<match>' 'abcdecdhjk' 'a****c**?**??*****'
Packit Service a8c26c
test_case '<match>' "'-'" '[-abc]'
Packit Service a8c26c
test_case '<match>' "'-'" '[abc-]'
Packit Service a8c26c
test_case '<match>' "'\\'" '\\'
Packit Service a8c26c
test_case '<match>' "'\\'" '[\\]'
Packit Service a8c26c
test_case '<match>' "'\\'" "'\\'"
Packit Service a8c26c
test_case '<match>' "'['" '[[]'
Packit Service a8c26c
test_case '<match>' '[' '[[]'
Packit Service a8c26c
test_case '<match>' "'['" '['
Packit Service a8c26c
test_case '<match>' '[' '['
Packit Service a8c26c
test_case '<match>' "'[abc'" "'['*"
Packit Service a8c26c
test_case '<nomatch>' "'[abc'" '[*'
Packit Service a8c26c
test_case '<match>' '[abc' "'['*"
Packit Service a8c26c
test_case '<nomatch>' '[abc' '[*'
Packit Service a8c26c
test_case '<match>' 'abd' "a[b/c]d"
Packit Service a8c26c
test_case '<match>' 'a/d' "a[b/c]d"
Packit Service a8c26c
test_case '<match>' 'acd' "a[b/c]d"
Packit Service a8c26c
test_case '<match>' "']'" '[]]'
Packit Service a8c26c
test_case '<match>' "'-'" '[]-]'
Packit Service a8c26c
test_case '<match>' 'p' '[a-\z]'
Packit Service a8c26c
test_case '<match>' '"/tmp"' '[/\\]*'
Packit Service a8c26c
test_case '<nomatch>' 'abc' '??**********?****?'
Packit Service a8c26c
test_case '<nomatch>' 'abc' '??**********?****c'
Packit Service a8c26c
test_case '<nomatch>' 'abc' '?************c****?****'
Packit Service a8c26c
test_case '<nomatch>' 'abc' '*c*?**'
Packit Service a8c26c
test_case '<nomatch>' 'abc' 'a*****c*?**'
Packit Service a8c26c
test_case '<nomatch>' 'abc' 'a********???*******'
Packit Service a8c26c
test_case '<nomatch>' "'a'" '[]'
Packit Service a8c26c
test_case '<nomatch>' 'a' '[]'
Packit Service a8c26c
test_case '<nomatch>' "'['" '[abc'
Packit Service a8c26c
test_case '<nomatch>' '[' '[abc'
Packit Service a8c26c
Packit Service a8c26c
test_glob ++Beware ' <bb> <bcd> <bdir>' b*
Packit Service a8c26c
test_glob '<Beware>  <bb> <bcd> <bdir>' [bB]*
Packit Service a8c26c
Packit Service a8c26c
if	( set --nocaseglob ) 2>/dev/null
Packit Service a8c26c
then
Packit Service a8c26c
	set --nocaseglob
Packit Service a8c26c
Packit Service a8c26c
	test_glob '<Beware>  <bb> <bcd> <bdir>' b*
Packit Service a8c26c
	test_glob '<Beware>  <bb> <bcd> <bdir>' [b]*
Packit Service a8c26c
	test_glob '<Beware>  <bb> <bcd> <bdir>' [bB]*
Packit Service a8c26c
Packit Service a8c26c
	set --nonocaseglob
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
if	( set -f ) 2>/dev/null
Packit Service a8c26c
then
Packit Service a8c26c
	set -f
Packit Service a8c26c
Packit Service a8c26c
	test_glob '<*>' *
Packit Service a8c26c
Packit Service a8c26c
	set +f
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
if	( set --noglob ) 2>/dev/null
Packit Service a8c26c
then
Packit Service a8c26c
	set --noglob
Packit Service a8c26c
Packit Service a8c26c
	test_glob '<*>' *
Packit Service a8c26c
Packit Service a8c26c
	set --glob
Packit Service a8c26c
fi
Packit Service a8c26c
Packit Service a8c26c
FIGNORE='@(.*|*)'
Packit Service a8c26c
test_glob '<*>' *
Packit Service a8c26c
Packit Service a8c26c
FIGNORE='@(.*|*c|*e|?)'
Packit Service a8c26c
test_glob '<a-b> <aXb> <abd> <bb> <bcd> <bdir> <ca> <cb> 
<man>' *
Packit Service a8c26c
Packit Service a8c26c
FIGNORE='@(.*|*b|*d|?)'
Packit Service a8c26c
test_glob '<Beware> <abc> <abe> <bdir> <ca> <de> <man>' *
Packit Service a8c26c
Packit Service a8c26c
FIGNORE=
Packit Service a8c26c
test_glob '<man/man1/sh.1>' */man*/sh.*
Packit Service a8c26c
Packit Service a8c26c
unset FIGNORE
Packit Service a8c26c
test_glob '<bb> <ca> <cb> 
<de>' ??
Packit Service a8c26c
test_glob '<man/man1/sh.1>' */man*/sh.*
Packit Service a8c26c
Packit Service a8c26c
GLOBIGNORE='.*:*'
Packit Service a8c26c
set -- *
Packit Service a8c26c
if	[[ $1 == '*' ]]
Packit Service a8c26c
then
Packit Service a8c26c
	GLOBIGNORE='.*:*c:*e:?'
Packit Service a8c26c
	test_glob '<>' *
Packit Service a8c26c
Packit Service a8c26c
	GLOBIGNORE='.*:*b:*d:?'
Packit Service a8c26c
	test_glob '<>' *
Packit Service a8c26c
Packit Service a8c26c
	unset GLOBIGNORE
Packit Service a8c26c
	test_glob '<>' *
Packit Service a8c26c
	test_glob '<man/man1/sh.1>' */man*/sh.*
Packit Service a8c26c
Packit Service a8c26c
	GLOBIGNORE=
Packit Service a8c26c
	test_glob '<man/man1/sh.1>' */man*/sh.*
Packit Service a8c26c
fi
Packit Service a8c26c
unset GLOBIGNORE
Packit Service a8c26c
Packit Service a8c26c
function test_sub
Packit Service a8c26c
{
Packit Service a8c26c
	x='${subject'$2'}'
Packit Service a8c26c
	eval g=$x
Packit Service a8c26c
	if	[[ "$g" != "$3" ]]
Packit Service a8c26c
	then	'err_exit' $1 subject="'$subject' $x failed, expected '$3', got '$g'"
Packit Service a8c26c
	fi
Packit Service a8c26c
}
Packit Service a8c26c
alias test_sub='test_sub $LINENO'
Packit Service a8c26c
Packit Service a8c26c
set --noglob --nobraceexpand
Packit Service a8c26c
Packit Service a8c26c
subject='A regular expressions test'
Packit Service a8c26c
Packit Service a8c26c
test_sub '/e/#'               'A r#gular expressions test'
Packit Service a8c26c
test_sub '//e/#'              'A r#gular #xpr#ssions t#st'
Packit Service a8c26c
test_sub '/[^e]/#'            '# regular expressions test'
Packit Service a8c26c
test_sub '//[^e]/#'           '###e######e###e########e##'
Packit Service a8c26c
test_sub '/+(e)/#'            'A r#gular expressions test'
Packit Service a8c26c
test_sub '//+(e)/#'           'A r#gular #xpr#ssions t#st'
Packit Service a8c26c
test_sub '/@-(e)/#'           'A r#gular expressions test'
Packit Service a8c26c
test_sub '//@-(e)/#'          'A r#gular #xpr#ssions t#st'
Packit Service a8c26c
test_sub '/?(e)/#'            '#A regular expressions test'
Packit Service a8c26c
test_sub '//?(e)/#'           '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#'
Packit Service a8c26c
test_sub '/*(e)/#'            '#A regular expressions test'
Packit Service a8c26c
test_sub '//*(e)/#'           '#A# #r#g#u#l#a#r# #x#p#r#s#s#i#o#n#s# #t#s#t#'
Packit Service a8c26c
test_sub '//@(e)/[\1]'        'A r[e]gular [e]xpr[e]ssions t[e]st'
Packit Service a8c26c
test_sub '//@-(e)/[\1]'       'A r[e]gular [e]xpr[e]ssions t[e]st'
Packit Service a8c26c
test_sub '//+(e)/[\1]'        'A r[e]gular [e]xpr[e]ssions t[e]st'
Packit Service a8c26c
test_sub '//+-(e)/[\1]'       'A r[e]gular [e]xpr[e]ssions t[e]st'
Packit Service a8c26c
test_sub '//@(+(e))/[\1]'     'A r[e]gular [e]xpr[e]ssions t[e]st'
Packit Service a8c26c
test_sub '//@(+-(e))/[\1]'    'A r[e]gular [e]xpr[e]ssions t[e]st'
Packit Service a8c26c
test_sub '//-(e)/#'           'A regular expressions test'
Packit Service a8c26c
test_sub '//--(e)/#'          'A regular expressions test'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_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[]'
Packit Service a8c26c
test_sub '/?-(e)/#'           '#A regular expressions test'
Packit Service a8c26c
test_sub '/@(?-(e))/[\1]'     '[]A regular expressions test'
Packit Service a8c26c
test_sub '/!(e)/#'            '#'
Packit Service a8c26c
test_sub '//!(e)/#'           '#'
Packit Service a8c26c
test_sub '/@(!(e))/[\1]'      '[A regular expressions test]'
Packit Service a8c26c
test_sub '//@(!(e))/[\1]'     '[A regular expressions test]'
Packit Service a8c26c
Packit Service a8c26c
subject='e'
Packit Service a8c26c
Packit Service a8c26c
test_sub '/!(e)/#'            '#e'
Packit Service a8c26c
test_sub '//!(e)/#'           '#e#'
Packit Service a8c26c
test_sub '/!(e)/[\1]'         '[]e'
Packit Service a8c26c
test_sub '//!(e)/[\1]'        '[]e[]'
Packit Service a8c26c
test_sub '/@(!(e))/[\1]'      '[]e'
Packit Service a8c26c
test_sub '//@(!(e))/[\1]'     '[]e[]'
Packit Service a8c26c
Packit Service a8c26c
subject='a'
Packit Service a8c26c
Packit Service a8c26c
test_sub '/@(!(a))/[\1]'      '[]a'
Packit Service a8c26c
test_sub '//@(!(a))/[\1]'     '[]a[]'
Packit Service a8c26c
Packit Service a8c26c
subject='aha'
Packit Service a8c26c
Packit Service a8c26c
test_sub '/@(!(a))/[\1]'      '[aha]'
Packit Service a8c26c
test_sub '//@(!(a))/[\1]'     '[aha]'
Packit Service a8c26c
test_sub '/@(!(aha))/[\1]'    '[ah]a'
Packit Service a8c26c
test_sub '//@(!(aha))/[\1]'   '[ah][a]'
Packit Service a8c26c
Packit Service a8c26c
exit $((Errors<125?Errors:125))