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