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