diff options
-rw-r--r-- | regress/usr.bin/sed/Makefile | 7 | ||||
-rwxr-xr-x | regress/usr.bin/sed/substitute.sh | 74 |
2 files changed, 79 insertions, 2 deletions
diff --git a/regress/usr.bin/sed/Makefile b/regress/usr.bin/sed/Makefile index 2b73e5e06ad..826ef2c1a51 100644 --- a/regress/usr.bin/sed/Makefile +++ b/regress/usr.bin/sed/Makefile @@ -1,14 +1,17 @@ -# $OpenBSD: Makefile,v 1.2 2008/10/13 13:27:33 millert Exp $ +# $OpenBSD: Makefile,v 1.3 2011/06/23 11:53:57 schwarze Exp $ # $NetBSD: Makefile,v 1.1 2005/04/04 16:48:45 peter Exp $ SED= /usr/bin/sed -REGRESS_TARGETS= sedtest hanoi math sierpinski +REGRESS_TARGETS= sedtest substitute hanoi math sierpinski sedtest: sh ${.CURDIR}/$@.sh ${SED} $@.out diff ${.CURDIR}/$@.expected $@.out +substitute: + sh ${.CURDIR}/$@.sh + hanoi: ${SED} -f ${.CURDIR}/$@.sed ${.CURDIR}/$@.in > $@.out diff ${.CURDIR}/$@.expected $@.out diff --git a/regress/usr.bin/sed/substitute.sh b/regress/usr.bin/sed/substitute.sh new file mode 100755 index 00000000000..ea0714cc37c --- /dev/null +++ b/regress/usr.bin/sed/substitute.sh @@ -0,0 +1,74 @@ +#!/bin/sh + +# error counter +err=0 + +# test function; arguments are: +# input string +# regular expression to replace +# wanted output for /g (global substitution) +# wanted output for /1 (substitution of first match) and so on +t() { + # global substitution + in=$1 + expr=$2 + want=$3 + shift 3 + out=`echo "$in" | sed -E "s/$expr/x/g"` + [ "X$out" = "X$want" ] || echo "$in/$expr/g/$want/$out ($((++err)))" + + # substitution with specific index + num=1 + while [ $# -gt 0 ]; do + want=$1 + shift + out=`echo "$in" | sed -E "s/$expr/x/$num"` + [ "X$out" = "X$want" ] || \ + echo "$in/$expr/$num/$want/$out ($((++err)))" + num=$((num+1)) + done + + # substitution with excessive index + out=`echo "$in" | sed -E "s/$expr/x/$num"` + [ "X$out" = "X$in" ] || echo "$in/$expr/$num/=/$out ($((++err)))" +} + +t '' ^ x x +t '' '()' x x +t '' '$' x x +t '' '^|$' x x +t a ^ xa xa +t a '()' xax xa ax +t a '$' ax ax +t a '^|a' x x +t a '^|$' xax xa ax +t a '^|a|$' x x +t a 'a|$' x x +t ab ^ xab xab +t ab '()' xaxbx xab axb abx +t ab '$' abx abx +t ab '^|a' xb xb +t ab '^|b' xax xab ax +t ab '^|$' xabx xab abx +t ab '^|a|$' xbx xb abx +t ab '^|b|$' xax xab ax +t ab '^|a|b|$' xx xb ax +t ab '^|ab|$' x x +t ab 'a|()' xbx xb abx +t ab 'a|$' xbx xb abx +t ab 'ab|$' x x +t ab 'b|()' xax xab ax +t ab 'b|$' ax ax +t abc '^|b' xaxc xabc axc +t abc '^|b|$' xaxcx xabc axc abcx +t abc '^|bc|$' xax xabc ax +t abc 'ab|()' xcx xc abcx +t abc 'ab|$' xcx xc abcx +t abc 'b|()' xaxcx xabc axc abcx +t abc 'bc|()' xax xabc ax +t abc 'b|$' axcx axc abcx +t aa a xx xa ax +t aa 'a|()' xx xa ax +t aa 'a*' x x + +exit $err |