Home | History | Annotate | Line # | Download | only in TEST
sed.test revision 1.2
      1  1.1  cgd #!/bin/sh -
      2  1.1  cgd #
      3  1.1  cgd # Copyright (c) 1992 Diomidis Spinellis.
      4  1.1  cgd # Copyright (c) 1992, 1993
      5  1.1  cgd #	The Regents of the University of California.  All rights reserved.
      6  1.1  cgd #
      7  1.1  cgd # Redistribution and use in source and binary forms, with or without
      8  1.1  cgd # modification, are permitted provided that the following conditions
      9  1.1  cgd # are met:
     10  1.1  cgd # 1. Redistributions of source code must retain the above copyright
     11  1.1  cgd #    notice, this list of conditions and the following disclaimer.
     12  1.1  cgd # 2. Redistributions in binary form must reproduce the above copyright
     13  1.1  cgd #    notice, this list of conditions and the following disclaimer in the
     14  1.1  cgd #    documentation and/or other materials provided with the distribution.
     15  1.1  cgd # 3. All advertising materials mentioning features or use of this software
     16  1.1  cgd #    must display the following acknowledgement:
     17  1.1  cgd #	This product includes software developed by the University of
     18  1.1  cgd #	California, Berkeley and its contributors.
     19  1.1  cgd # 4. Neither the name of the University nor the names of its contributors
     20  1.1  cgd #    may be used to endorse or promote products derived from this software
     21  1.1  cgd #    without specific prior written permission.
     22  1.1  cgd #
     23  1.1  cgd # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     24  1.1  cgd # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25  1.1  cgd # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  1.1  cgd # ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     27  1.1  cgd # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  1.1  cgd # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29  1.1  cgd # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30  1.1  cgd # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31  1.1  cgd # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32  1.1  cgd # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33  1.1  cgd # SUCH DAMAGE.
     34  1.1  cgd #
     35  1.2  cgd #	from: @(#)sed.test	8.1 (Berkeley) 6/6/93
     36  1.2  cgd #	$Id: sed.test,v 1.2 1994/02/03 23:45:04 cgd Exp $
     37  1.1  cgd #
     38  1.1  cgd 
     39  1.1  cgd # sed Regression Tests
     40  1.1  cgd #
     41  1.1  cgd # The following files are created:
     42  1.1  cgd # lines[1-4], script1, script2
     43  1.1  cgd # Two directories *.out contain the test results
     44  1.1  cgd 
     45  1.1  cgd main()
     46  1.1  cgd {
     47  1.1  cgd 	BASE=/usr/old/bin/sed
     48  1.1  cgd 	BASELOG=sed.out
     49  1.1  cgd 	TEST=../obj/sed
     50  1.1  cgd 	TESTLOG=nsed.out
     51  1.1  cgd 	DICT=/usr/share/dict/words
     52  1.1  cgd 
     53  1.1  cgd 	test_error | more
     54  1.1  cgd 
     55  1.1  cgd 	awk 'END { for (i = 1; i < 15; i++) print "l1_" i}' </dev/null >lines1
     56  1.1  cgd 	awk 'END { for (i = 1; i < 10; i++) print "l2_" i}' </dev/null >lines2
     57  1.1  cgd 
     58  1.1  cgd 	exec 4>&1 5>&2
     59  1.1  cgd 
     60  1.1  cgd 	# Set these flags to get messages about known problems
     61  1.1  cgd 	BSD=1
     62  1.1  cgd 	GNU=0
     63  1.1  cgd 	SUN=0
     64  1.1  cgd 	tests $BASE $BASELOG
     65  1.1  cgd 
     66  1.1  cgd 	BSD=0
     67  1.1  cgd 	GNU=0
     68  1.1  cgd 	SUN=0
     69  1.1  cgd 	tests $TEST $TESTLOG
     70  1.1  cgd 	exec 1>&4 2>&5
     71  1.1  cgd 	diff -c $BASELOG $TESTLOG | more
     72  1.1  cgd }
     73  1.1  cgd 
     74  1.1  cgd tests()
     75  1.1  cgd {
     76  1.1  cgd 	SED=$1
     77  1.1  cgd 	DIR=$2
     78  1.1  cgd 	rm -rf $DIR
     79  1.1  cgd 	mkdir $DIR
     80  1.1  cgd 	MARK=100
     81  1.1  cgd 
     82  1.1  cgd 	test_args
     83  1.1  cgd 	test_addr
     84  1.1  cgd 	echo Testing commands
     85  1.1  cgd 	test_group
     86  1.1  cgd 	test_acid
     87  1.1  cgd 	test_branch
     88  1.1  cgd 	test_pattern
     89  1.1  cgd 	test_print
     90  1.1  cgd 	test_subst
     91  1.1  cgd }
     92  1.1  cgd 
     93  1.1  cgd mark()
     94  1.1  cgd {
     95  1.1  cgd 	MARK=`expr $MARK + 1`
     96  1.1  cgd 	exec 1>&4 2>&5
     97  1.1  cgd 	exec >"$DIR/${MARK}_$1"
     98  1.1  cgd 	echo "Test $1:$MARK"
     99  1.1  cgd 	# Uncomment this line to match tests with sed error messages
    100  1.1  cgd 	echo "Test $1:$MARK" >&5
    101  1.1  cgd }
    102  1.1  cgd 
    103  1.1  cgd test_args()
    104  1.1  cgd {
    105  1.1  cgd 	mark '1.1'
    106  1.1  cgd 	echo Testing argument parsing
    107  1.1  cgd 	echo First type
    108  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    109  1.1  cgd 		echo SunOS sed prints only with -n
    110  1.1  cgd 	else
    111  1.1  cgd 		$SED 's/^/e1_/p' lines1
    112  1.1  cgd 	fi
    113  1.1  cgd 	mark '1.2' ; $SED -n 's/^/e1_/p' lines1
    114  1.1  cgd 	mark '1.3'
    115  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    116  1.1  cgd 		echo SunOS sed prints only with -n
    117  1.1  cgd 	else
    118  1.1  cgd 		$SED 's/^/e1_/p' <lines1
    119  1.1  cgd 	fi
    120  1.1  cgd 	mark '1.4' ; $SED -n 's/^/e1_/p' <lines1
    121  1.1  cgd 	echo Second type
    122  1.1  cgd 	mark '1.4.1'
    123  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    124  1.1  cgd 		echo SunOS sed fails this
    125  1.1  cgd 	fi
    126  1.1  cgd 	$SED -e '' <lines1
    127  1.1  cgd 	echo 's/^/s1_/p' >script1
    128  1.1  cgd 	echo 's/^/s2_/p' >script2
    129  1.1  cgd 	mark '1.5'
    130  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    131  1.1  cgd 		echo SunOS sed prints only with -n
    132  1.1  cgd 	else
    133  1.1  cgd 		$SED -f script1 lines1
    134  1.1  cgd 	fi
    135  1.1  cgd 	mark '1.6'
    136  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    137  1.1  cgd 		echo SunOS sed prints only with -n
    138  1.1  cgd 	else
    139  1.1  cgd 		$SED -f script1 <lines1
    140  1.1  cgd 	fi
    141  1.1  cgd 	mark '1.7'
    142  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    143  1.1  cgd 		echo SunOS sed prints only with -n
    144  1.1  cgd 	else
    145  1.1  cgd 		$SED -e 's/^/e1_/p' lines1
    146  1.1  cgd 	fi
    147  1.1  cgd 	mark '1.8'
    148  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    149  1.1  cgd 		echo SunOS sed prints only with -n
    150  1.1  cgd 	else
    151  1.1  cgd 		$SED -e 's/^/e1_/p' <lines1
    152  1.1  cgd 	fi
    153  1.1  cgd 	mark '1.9' ; $SED -n -f script1 lines1
    154  1.1  cgd 	mark '1.10' ; $SED -n -f script1 <lines1
    155  1.1  cgd 	mark '1.11' ; $SED -n -e 's/^/e1_/p' lines1
    156  1.1  cgd 	mark '1.12'
    157  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    158  1.1  cgd 		echo SunOS sed prints only with -n
    159  1.1  cgd 	else
    160  1.1  cgd 		$SED -n -e 's/^/e1_/p' <lines1
    161  1.1  cgd 	fi
    162  1.1  cgd 	mark '1.13'
    163  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    164  1.1  cgd 		echo SunOS sed prints only with -n
    165  1.1  cgd 	else
    166  1.1  cgd 		$SED -e 's/^/e1_/p' -e 's/^/e2_/p' lines1
    167  1.1  cgd 	fi
    168  1.1  cgd 	mark '1.14'
    169  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    170  1.1  cgd 		echo SunOS sed prints only with -n
    171  1.1  cgd 	else
    172  1.1  cgd 		$SED -f script1 -f script2 lines1
    173  1.1  cgd 	fi
    174  1.1  cgd 	mark '1.15'
    175  1.1  cgd 	if [ $GNU -eq 1 -o $SUN -eq 1 ] ; then
    176  1.1  cgd 		echo GNU and SunOS sed fail this following older POSIX draft
    177  1.1  cgd 	else
    178  1.1  cgd 		$SED -e 's/^/e1_/p' -f script1 lines1
    179  1.1  cgd 	fi
    180  1.1  cgd 	mark '1.16'
    181  1.1  cgd 	if [ $SUN -eq 1 ] ; then
    182  1.1  cgd 		echo SunOS sed prints only with -n
    183  1.1  cgd 	else
    184  1.1  cgd 		$SED -e 's/^/e1_/p' lines1 lines1
    185  1.1  cgd 	fi
    186  1.1  cgd 	# POSIX D11.2:11251
    187  1.1  cgd 	mark '1.17' ; $SED p <lines1 lines1
    188  1.1  cgd cat >script1 <<EOF
    189  1.1  cgd #n
    190  1.1  cgd # A comment
    191  1.1  cgd 
    192  1.1  cgd p
    193  1.1  cgd EOF
    194  1.1  cgd 	mark '1.18' ; $SED -f script1 <lines1 lines1
    195  1.1  cgd }
    196  1.1  cgd 
    197  1.1  cgd test_addr()
    198  1.1  cgd {
    199  1.1  cgd 	echo Testing address ranges
    200  1.1  cgd 	mark '2.1' ; $SED -n -e '4p' lines1
    201  1.1  cgd 	mark '2.2' ; $SED -n -e '20p' lines1 lines2
    202  1.1  cgd 	mark '2.3' ; $SED -n -e '$p' lines1
    203  1.1  cgd 	mark '2.4' ; $SED -n -e '$p' lines1 lines2
    204  1.1  cgd 	mark '2.5' ; $SED -n -e '$a\
    205  1.1  cgd hello' /dev/null
    206  1.1  cgd 	mark '2.6' ; $SED -n -e '$p' lines1 /dev/null lines2
    207  1.1  cgd 	# Should not print anything
    208  1.1  cgd 	mark '2.7' ; $SED -n -e '20p' lines1
    209  1.1  cgd 	mark '2.8' ; $SED -n -e '0p' lines1
    210  1.1  cgd 	mark '2.9' ; $SED -n '/l1_7/p' lines1
    211  1.1  cgd 	mark '2.10' ; $SED -n ' /l1_7/ p' lines1
    212  1.1  cgd 	mark '2.11'
    213  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    214  1.1  cgd 		echo BSD sed fails this test
    215  1.1  cgd 	fi
    216  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    217  1.1  cgd 		echo GNU sed fails this
    218  1.1  cgd 	fi
    219  1.1  cgd 	$SED -n '\_l1\_7_p' lines1
    220  1.1  cgd 	mark '2.12' ; $SED -n '1,4p' lines1
    221  1.1  cgd 	mark '2.13' ; $SED -n '1,$p' lines1 lines2
    222  1.1  cgd 	mark '2.14' ; $SED -n '1,/l2_9/p' lines1 lines2
    223  1.1  cgd 	mark '2.15' ; $SED -n '/4/,$p' lines1 lines2
    224  1.1  cgd 	mark '2.16' ; $SED -n '/4/,20p' lines1 lines2
    225  1.1  cgd 	mark '2.17' ; $SED -n '/4/,/10/p' lines1 lines2
    226  1.1  cgd 	mark '2.18' ; $SED -n '/l2_3/,/l1_8/p' lines1 lines2
    227  1.1  cgd 	mark '2.19'
    228  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    229  1.1  cgd 		echo GNU sed fails this
    230  1.1  cgd 	fi
    231  1.1  cgd 	$SED -n '12,3p' lines1 lines2
    232  1.1  cgd 	mark '2.20'
    233  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    234  1.1  cgd 		echo GNU sed fails this
    235  1.1  cgd 	fi
    236  1.1  cgd 	$SED -n '/l1_7/,3p' lines1 lines2
    237  1.1  cgd }
    238  1.1  cgd 
    239  1.1  cgd test_group()
    240  1.1  cgd {
    241  1.1  cgd 	echo Brace and other grouping
    242  1.1  cgd 	mark '3.1' ; $SED -e '
    243  1.1  cgd 4,12 {
    244  1.1  cgd 	s/^/^/
    245  1.1  cgd 	s/$/$/
    246  1.1  cgd 	s/_/T/
    247  1.1  cgd }' lines1
    248  1.1  cgd 	mark '3.2' ; $SED -e '
    249  1.1  cgd 4,12 {
    250  1.1  cgd 	s/^/^/
    251  1.1  cgd 	/6/,/10/ {
    252  1.1  cgd 		s/$/$/
    253  1.1  cgd 		/8/ s/_/T/
    254  1.1  cgd 	}
    255  1.1  cgd }' lines1
    256  1.1  cgd 	mark '3.3' ; $SED -e '
    257  1.1  cgd 4,12 !{
    258  1.1  cgd 	s/^/^/
    259  1.1  cgd 	/6/,/10/ !{
    260  1.1  cgd 		s/$/$/
    261  1.1  cgd 		/8/ !s/_/T/
    262  1.1  cgd 	}
    263  1.1  cgd }' lines1
    264  1.1  cgd 	mark '3.4' ; $SED -e '4,12!s/^/^/' lines1
    265  1.1  cgd }
    266  1.1  cgd 
    267  1.1  cgd test_acid()
    268  1.1  cgd {
    269  1.1  cgd 	echo Testing a c d and i commands
    270  1.1  cgd 	mark '4.1' ; $SED -n -e '
    271  1.1  cgd s/^/before_i/p
    272  1.1  cgd 20i\
    273  1.1  cgd inserted
    274  1.1  cgd s/^/after_i/p
    275  1.1  cgd ' lines1 lines2
    276  1.1  cgd 	mark '4.2' ; $SED -n -e '
    277  1.1  cgd 5,12s/^/5-12/
    278  1.1  cgd s/^/before_a/p
    279  1.1  cgd /5-12/a\
    280  1.1  cgd appended
    281  1.1  cgd s/^/after_a/p
    282  1.1  cgd ' lines1 lines2
    283  1.1  cgd 	mark '4.3'
    284  1.1  cgd 	if [ $GNU -eq 1 ] ; then
    285  1.1  cgd 		echo GNU sed fails this
    286  1.1  cgd 	fi
    287  1.1  cgd 	$SED -n -e '
    288  1.1  cgd s/^/^/p
    289  1.1  cgd /l1_/a\
    290  1.1  cgd appended
    291  1.1  cgd 8,10N
    292  1.1  cgd s/$/$/p
    293  1.1  cgd ' lines1 lines2
    294  1.1  cgd 	mark '4.4' ; $SED -n -e '
    295  1.1  cgd c\
    296  1.1  cgd hello
    297  1.1  cgd ' lines1
    298  1.1  cgd 	mark '4.5' ; $SED -n -e '
    299  1.1  cgd 8c\
    300  1.1  cgd hello
    301  1.1  cgd ' lines1
    302  1.1  cgd 	mark '4.6' ; $SED -n -e '
    303  1.1  cgd 3,14c\
    304  1.1  cgd hello
    305  1.1  cgd ' lines1
    306  1.1  cgd # SunOS and GNU sed behave differently.   We follow POSIX
    307  1.1  cgd #	mark '4.7' ; $SED -n -e '
    308  1.1  cgd #8,3c\
    309  1.1  cgd #hello
    310  1.1  cgd #' lines1
    311  1.1  cgd 	mark '4.8' ; $SED d <lines1
    312  1.1  cgd }
    313  1.1  cgd 
    314  1.1  cgd test_branch()
    315  1.1  cgd {
    316  1.1  cgd 	echo Testing labels and branching
    317  1.1  cgd 	mark '5.1' ; $SED -n -e '
    318  1.1  cgd b label4
    319  1.1  cgd :label3
    320  1.1  cgd s/^/label3_/p
    321  1.1  cgd b end
    322  1.1  cgd :label4
    323  1.1  cgd 2,12b label1
    324  1.1  cgd b label2
    325  1.1  cgd :label1
    326  1.1  cgd s/^/label1_/p
    327  1.1  cgd b
    328  1.1  cgd :label2
    329  1.1  cgd s/^/label2_/p
    330  1.1  cgd b label3
    331  1.1  cgd :end
    332  1.1  cgd ' lines1
    333  1.1  cgd 	mark '5.2'
    334  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    335  1.1  cgd 		echo BSD sed fails this test
    336  1.1  cgd 	fi
    337  1.1  cgd 	$SED -n -e '
    338  1.1  cgd s/l1_/l2_/
    339  1.1  cgd t ok
    340  1.1  cgd b
    341  1.1  cgd :ok
    342  1.1  cgd s/^/tested /p
    343  1.1  cgd ' lines1 lines2
    344  1.1  cgd # SunOS sed behaves differently here.  Clarification needed.
    345  1.1  cgd #	mark '5.3' ; $SED -n -e '
    346  1.1  cgd #5,8b inside
    347  1.1  cgd #1,5 {
    348  1.1  cgd #	s/^/^/p
    349  1.1  cgd #	:inside
    350  1.1  cgd #	s/$/$/p
    351  1.1  cgd #}
    352  1.1  cgd #' lines1
    353  1.1  cgd # Check that t clears the substitution done flag
    354  1.1  cgd 	mark '5.4' ; $SED -n -e '
    355  1.1  cgd 1,8s/^/^/
    356  1.1  cgd t l1
    357  1.1  cgd :l1
    358  1.1  cgd t l2
    359  1.1  cgd s/$/$/p
    360  1.1  cgd b
    361  1.1  cgd :l2
    362  1.1  cgd s/^/ERROR/
    363  1.1  cgd ' lines1
    364  1.1  cgd # Check that reading a line clears the substitution done flag
    365  1.1  cgd 	mark '5.5'
    366  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    367  1.1  cgd 		echo BSD sed fails this test
    368  1.1  cgd 	fi
    369  1.1  cgd 	$SED -n -e '
    370  1.1  cgd t l2
    371  1.1  cgd 1,8s/^/^/p
    372  1.1  cgd 2,7N
    373  1.1  cgd b
    374  1.1  cgd :l2
    375  1.1  cgd s/^/ERROR/p
    376  1.1  cgd ' lines1
    377  1.1  cgd 	mark '5.6' ; $SED 5q lines1
    378  1.1  cgd 	mark '5.7' ; $SED -e '
    379  1.1  cgd 5i\
    380  1.1  cgd hello
    381  1.1  cgd 5q' lines1
    382  1.1  cgd # Branch across block boundary
    383  1.1  cgd 	mark '5.8' ; $SED -e '
    384  1.1  cgd {
    385  1.1  cgd :b
    386  1.1  cgd }
    387  1.1  cgd s/l/m/
    388  1.1  cgd tb' lines1
    389  1.1  cgd }
    390  1.1  cgd 
    391  1.1  cgd test_pattern()
    392  1.1  cgd {
    393  1.1  cgd echo Pattern space commands
    394  1.1  cgd # Check that the pattern space is deleted
    395  1.1  cgd 	mark '6.1' ; $SED -n -e '
    396  1.1  cgd c\
    397  1.1  cgd changed
    398  1.1  cgd p
    399  1.1  cgd ' lines1
    400  1.1  cgd 	mark '6.2' ; $SED -n -e '
    401  1.1  cgd 4d
    402  1.1  cgd p
    403  1.1  cgd ' lines1
    404  1.1  cgd # SunOS sed refused to print here
    405  1.1  cgd #	mark '6.3' ; $SED -e '
    406  1.1  cgd #N
    407  1.1  cgd #N
    408  1.1  cgd #N
    409  1.1  cgd #D
    410  1.1  cgd #P
    411  1.1  cgd #4p
    412  1.1  cgd #' lines1
    413  1.1  cgd 	mark '6.4' ; $SED -e '
    414  1.1  cgd 2h
    415  1.1  cgd 3H
    416  1.1  cgd 4g
    417  1.1  cgd 5G
    418  1.1  cgd 6x
    419  1.1  cgd 6p
    420  1.1  cgd 6x
    421  1.1  cgd 6p
    422  1.1  cgd ' lines1
    423  1.1  cgd 	mark '6.5' ; $SED -e '4n' lines1
    424  1.1  cgd 	mark '6.6' ; $SED -n -e '4n' lines1
    425  1.1  cgd }
    426  1.1  cgd 
    427  1.1  cgd test_print()
    428  1.1  cgd {
    429  1.1  cgd 	echo Testing print and file routines
    430  1.1  cgd 	awk 'END {for (i = 1; i < 256; i++) printf("%c", i);print "\n"}' \
    431  1.1  cgd 		</dev/null >lines3
    432  1.1  cgd 	# GNU and SunOS sed behave differently here
    433  1.1  cgd 	mark '7.1'
    434  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    435  1.1  cgd 		echo 'BSD sed drops core on this one; TEST SKIPPED'
    436  1.1  cgd 	else
    437  1.1  cgd 		$SED -n l lines3
    438  1.1  cgd 	fi
    439  1.1  cgd 	mark '7.2' ; $SED -e '/l2_/=' lines1 lines2
    440  1.1  cgd 	rm -f lines4
    441  1.1  cgd 	mark '7.3' ; $SED -e '3,12w lines4' lines1
    442  1.1  cgd 	echo w results
    443  1.1  cgd 	cat lines4
    444  1.1  cgd 	mark '7.4' ; $SED -e '4r lines2' lines1
    445  1.1  cgd 	mark '7.5' ; $SED -e '5r /dev/dds' lines1
    446  1.1  cgd 	mark '7.6' ; $SED -e '6r /dev/null' lines1
    447  1.1  cgd 	mark '7.7'
    448  1.1  cgd 	if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
    449  1.1  cgd 		echo BSD, GNU and SunOS cannot pass this one
    450  1.1  cgd 	else
    451  1.1  cgd 		sed '200q' $DICT | sed 's$.*$s/^/&/w tmpdir/&$' >script1
    452  1.1  cgd 		rm -rf tmpdir
    453  1.1  cgd 		mkdir tmpdir
    454  1.1  cgd 		$SED -f script1 lines1
    455  1.1  cgd 		cat tmpdir/*
    456  1.1  cgd 		rm -rf tmpdir
    457  1.1  cgd 	fi
    458  1.1  cgd 	mark '7.8'
    459  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    460  1.1  cgd 		echo BSD sed cannot pass 7.7
    461  1.1  cgd 	else
    462  1.1  cgd 		echo line1 > lines3
    463  1.1  cgd 		echo "" >> lines3
    464  1.1  cgd 		$SED -n -e '$p' lines3 /dev/null
    465  1.1  cgd 	fi
    466  1.1  cgd 		
    467  1.1  cgd }
    468  1.1  cgd 
    469  1.1  cgd test_subst()
    470  1.1  cgd {
    471  1.1  cgd 	echo Testing substitution commands
    472  1.1  cgd 	mark '8.1' ; $SED -e 's/./X/g' lines1
    473  1.1  cgd 	mark '8.2' ; $SED -e 's,.,X,g' lines1
    474  1.1  cgd # GNU and SunOS sed thinks we are escaping . as wildcard, not as separator
    475  1.1  cgd #	mark '8.3' ; $SED -e 's.\..X.g' lines1
    476  1.1  cgd # POSIX does not say that this should work
    477  1.1  cgd #	mark '8.4' ; $SED -e 's/[/]/Q/' lines1
    478  1.1  cgd 	mark '8.4' ; $SED -e 's/[\/]/Q/' lines1
    479  1.1  cgd 	mark '8.5' ; $SED -e 's_\__X_' lines1
    480  1.1  cgd 	mark '8.6' ; $SED -e 's/./(&)/g' lines1
    481  1.1  cgd 	mark '8.7' ; $SED -e 's/./(\&)/g' lines1
    482  1.1  cgd 	mark '8.8' ; $SED -e 's/\(.\)\(.\)\(.\)/x\3x\2x\1/g' lines1
    483  1.1  cgd 	mark '8.9' ; $SED -e 's/_/u0\
    484  1.1  cgd u1\
    485  1.1  cgd u2/g' lines1
    486  1.1  cgd 	mark '8.10'
    487  1.1  cgd 	if [ $BSD -eq 1 -o $GNU -eq 1 ] ; then
    488  1.1  cgd 		echo 'BSD/GNU sed do not understand digit flags on s commands'
    489  1.1  cgd 	fi
    490  1.1  cgd 	$SED -e 's/./X/4' lines1
    491  1.1  cgd 	rm -f lines4
    492  1.1  cgd 	mark '8.11' ; $SED -e 's/1/X/w lines4' lines1
    493  1.1  cgd 	echo s wfile results
    494  1.1  cgd 	cat lines4
    495  1.1  cgd 	mark '8.12' ; $SED -e 's/[123]/X/g' lines1
    496  1.1  cgd 	mark '8.13' ; $SED -e 'y/0123456789/9876543210/' lines1
    497  1.1  cgd 	mark '8.14' ; 
    498  1.1  cgd 	if [ $BSD -eq 1 -o $GNU -eq 1 -o $SUN -eq 1 ] ; then
    499  1.1  cgd 		echo BSD/GNU/SUN sed fail this test
    500  1.1  cgd 	else
    501  1.1  cgd 		$SED -e 'y10\123456789198765432\101' lines1
    502  1.1  cgd 	fi
    503  1.1  cgd 	mark '8.15' ; $SED -e '1N;2y/\n/X/' lines1
    504  1.1  cgd 	mark '8.16'
    505  1.1  cgd 	if [ $BSD -eq 1 ] ; then
    506  1.1  cgd 		echo 'BSD sed does not handle branch defined REs'
    507  1.1  cgd 	else
    508  1.1  cgd 		echo 'eeefff' | $SED -e 'p' -e 's/e/X/p' -e ':x' \
    509  1.1  cgd 		    -e 's//Y/p' -e '/f/bx'
    510  1.1  cgd 	fi
    511  1.1  cgd }
    512  1.1  cgd 
    513  1.1  cgd test_error()
    514  1.1  cgd {
    515  1.1  cgd 	exec 0>&3 4>&1 5>&2
    516  1.1  cgd 	exec 0</dev/null
    517  1.1  cgd 	exec 2>&1
    518  1.1  cgd 	set -x
    519  1.1  cgd 	$TEST -x && exit 1
    520  1.1  cgd 	$TEST -f && exit 1
    521  1.1  cgd 	$TEST -e && exit 1
    522  1.1  cgd 	$TEST -f /dev/dds && exit 1
    523  1.1  cgd 	$TEST p /dev/dds && exit 1
    524  1.1  cgd 	$TEST -f /bin/sh && exit 1
    525  1.1  cgd 	$TEST '{' && exit 1
    526  1.1  cgd 	$TEST '{' && exit 1
    527  1.1  cgd 	$TEST '/hello/' && exit 1
    528  1.1  cgd 	$TEST '1,/hello/' && exit 1
    529  1.1  cgd 	$TEST -e '-5p' && exit 1
    530  1.1  cgd 	$TEST '/jj' && exit 1
    531  1.1  cgd 	$TEST 'a hello' && exit 1
    532  1.1  cgd 	$TEST 'a \ hello' && exit 1
    533  1.1  cgd 	$TEST 'b foo' && exit 1
    534  1.1  cgd 	$TEST 'd hello' && exit 1
    535  1.1  cgd 	$TEST 's/aa' && exit 1
    536  1.1  cgd 	$TEST 's/aa/' && exit 1
    537  1.1  cgd 	$TEST 's/a/b' && exit 1
    538  1.1  cgd 	$TEST 's/a/b/c/d' && exit 1
    539  1.1  cgd 	$TEST 's/a/b/ 1 2' && exit 1
    540  1.1  cgd 	$TEST 's/a/b/ 1 g' && exit 1
    541  1.1  cgd 	$TEST 's/a/b/w' && exit 1
    542  1.1  cgd 	$TEST 'y/aa' && exit 1
    543  1.1  cgd 	$TEST 'y/aa/b/' && exit 1
    544  1.1  cgd 	$TEST 'y/aa/' && exit 1
    545  1.1  cgd 	$TEST 'y/a/b' && exit 1
    546  1.1  cgd 	$TEST 'y/a/b/c/d' && exit 1
    547  1.1  cgd 	$TEST '!' && exit 1
    548  1.1  cgd 	$TEST supercalifrangolisticexprialidociussupercalifrangolisticexcius
    549  1.1  cgd 	set +x
    550  1.1  cgd 	exec 0>&3 1>&4 2>&5
    551  1.1  cgd }
    552  1.1  cgd 
    553  1.1  cgd main
    554