315 lines · 4.5 KB · Text
RawDownload
#!/bin/rcecho T.sub: tests of sub and gsub code # input lines are of form#	pattern  replacement  input-string  sub-output  gsub-output awk 'BEGIN {	FS = "\t"	awk = ENVIRON["awk"]}NF == 0		{ next }$1 ~ /^#/	{ next } $1 != "" {	# new pattern	pat = $1}$2 != "" {	# new replacement	repl = $2}$3 != "" {	# new input string	str = $3}$4 != "" {	# new sub output	subout = $4}$5 != "" {	# new gsub output	gsubout = $5}NF < 5 {	# weird input line	printf("weird test spec `%s` ignored\n", $0) | "cat >[1=2]"	next}{		# "" => explicitly empty	# printf(" %3d:   %s %s %s %s %s:\n", NR, pat, repl, str, subout, gsubout)	if (pat == "\"\"") pat = ""	if (repl == "\"\"") repl = ""	if (str == "\"\"") str = ""	if (subout == "\"\"") subout = ""	if (gsubout == "\"\"") gsubout = ""}{		# generate a test	nt++	gsub(/\\/, "&&", repl)	# in case of \ enclosed	test = sprintf("echo ''%s'' | %s ''\n", str, awk) \	  sprintf("{ temp = $0; sub(/%s/, \"%s\", temp)\n", pat, repl) \	  sprintf("  if (temp != \"%s\") print \" sub %d fails:\", temp, \"should be %s in %s\"\n",		subout, nt, subout, (pat " " repl " " str " " subout)) \	  sprintf("  gsub(/%s/, \"%s\")\n", pat, repl) \	  sprintf("  if ($0 != \"%s\") print \"gsub %d fails:\", $0, \"should be %s in %s\"\n}",		gsubout, nt, gsubout, (pat " " repl " " str " " gsubout)) \	  " ''"	# if (nt >= 55) print "test is: " test	system(test)}#END { print nt, "tests" } ' <<'!!!!'a	x	aaa	xaa	xxx		axa	xxa	xxx		bbb	bbb	bbb		""	""	""a	xy	aaa	xyaa	xyxyxy		axa	xyxa	xyxxy		bbb	bbb	bbb		""	""	"".	x	aaa	xaa	xxx		axa	xxa	xxx		bbb	xbb	xxx		""	""	"".a	x	a	a	a		ax	ax	ax		aa	x	x		aaab	xab	xab		aaaa	xaa	xx		""	""	""$	x	a	ax	ax		""	x	x.$	x	""	""	""		a	x	x		ab	ax	axa$	x	""	""	""		a	x	x		b	b	b		ab	ab	ab^	x	""	x	x		a	xa	xa^a$	xx	a	xx	xx		""	""	""		b	b	b		aa	aa	aa^a.$	xy	a	a	a		""	""	""		ab	xy	xy		ba	ba	ba^$	x	""	x	x		a	a	a^.a	x	aa	x	x		ba	x	x		ab	ab	ab		a	a	a	^.*a	xy	""	""	""		a	xy	xy		b	b	b		ba	xy	xy^.+a	xy	""	""	""		a	a	a		bb	bb	bb		ba	xy	xya	&x&y	a	axay	axay		aa	axaya	axayaxay a*	x	""	x	x		z	xz	xzx		az	xz	xzx		aza	xza	xzx	b	xxx	bxxx	bxbxbxb	x&	paq	xpaq	xpxaqx	x\&	paq	x&paq	x&px&qx&	x&y	paq	xypaq	xypxayqxy	x\&y	paq	x&ypaq	x&ypx&yqx&ya+	x&	paq	pxaq	pxaq	x\&	paq	px&q	px&q	x&y	paq	pxayq	pxayq	x\&y	paq	px&yq	px&yqaa*	x	a	x	x		aa	x	x		wawa	wxwa	wxwx\$	x	""	""	""		a	a	a		a$	ax	ax		$$$	x$$	xxx		z$z$z	zxz$z	zxzxz\.	x	""	""	""		a	a	a		a.	ax	ax		...	x..	xxx		z.z.z	zxz.z	zxzxzxr+y	q	xy	xy	xy		xry	q	q		xrry	q	q		xryWxry	qWxry	qWqxr?y	q	AxyB	AqB	AqB		AxryB	AqB	AqB		Axrry	Axrry	Axrrya?b?c?	x	""	x	x		a	x	x		b	x	x		c	x	x		ac	x	x		acc	xc	xx^a?b?q	x	""	""	""		q	x	x		a	a	a		aq	x	x		bq	x	x		abq	x	x		qab	xab	xab		abqabq	xabq	xabq[0-9]	xyz	0	xyz	xyz		00	xyz0	xyzxyz		000	xyz00	xyzxyzxyz		0a	xyza	xyza		a0	axyz	axyz		0a0	xyza0	xyzaxyz		xx	xx	xx		""	""	""^[0-9]	xyz	0	xyz	xyz		00	xyz0	xyz0		000	xyz00	xyz00		0a	xyza	xyza		a0	a0	a0		xx	xx	xx		""	""	""[0-9]$	xyz	0	xyz	xyz		00	0xyz	0xyz		000	00xyz	00xyz		0a	0a	0a		a0	axyz	axyz		xx	xx	xx		""	""	""[0-9]*	xyz	0	xyz	xyz		000	xyz	xyz		0a	xyza	xyzaxyz		a0	xyza0	xyzaxyz		0a0	xyza0	xyzaxyz		pq	xyzpq	xyzpxyzqxyz		""	xyz	xyz ""	<&>	abc	<>abc	<>a<>b<>c<>	fixed 2/07, we think""	<\&>	abc	<&>abc	<&>a<&>b<&>c<&>""	<&&>	abc	<>abc	<>a<>b<>c<>""	<&>	""	<>	<> d?abc	<&>	abc	<abc>	<abc>d?	<&>	abc	<>abc	<>a<>b<>c<> x[0-9]+y	Q	xy	xy	xy	no change		x0y	Q	Q		x12y	Q	Q		x1y2	Q2	Q2		x1yax23y	Qax23y	QaQ # x[0-9]?y	~	xy# 		x1y# 	!~	x23y# x[[]y	~	x[y# 	!~	xy# 		x[[]y# 		x]y# x[^[]y	~	xay# 	!~	x[y# x[-]y	~	x-y# 	!~	xy# 		x+y# x[^-]y	~	x+y# 	!~	x-y# 		xy# [0\-9]	~	0# 		-# 		9# 	!~	1# 		""# [-1]	~	-# 		1# 	!~	0# [0-]	~	0# 		-# 	!~	1# [^-0]	~	x# 		^# 	!~	-# 		0# 		""# [^0-]	~	x# 		^# 	!~	-# 		0# 		""# x|y	~	x# 		y# 		xy# 	!~	a# 		""# ^abc|xyz$	~	abc# 		abcd# 		axyz# 		xyz# 	!~	xabc# 		xyza# ^(abc|xyz)$	~	abc# 		xyz# 	!~	abcxyz# 		abcx# 		cxyz# ^x\|y$	~	x|y# 	!~	xy# ^x\\y$	~	x\y# 	!~	xy# 		x\\y# 		xay# \141\142	~	ab# 		xab# 		abx# 	!~	a# 		b# 		ax# 		axb# x\056y	~	x.y# 	!~	x.# 		.x# 		xxx# 		xby  because \056 is not the metacharacter .# 		xcy  ditto# [\60-\62\65-6\71]	~	0# 		1# 		2# 		5# 		6# 		9# 	!~	3# 		4# 		7# 		8# [\60-2\65-6\71]	~	0# 		1# 		2# 		5# 		6# 		9# 	!~	3# 		4# 		7# 		8# [\x30-\x32\x35-6\71]	~	0# 		1# 		2# 		5# 		6# 		9# 	!~	3# 		4# 		7# 		8# [\x30-2\x35-6\x39]	~	0# 		1# 		2# 		5# 		6# 		9# 	!~	3# 		4# 		7# 		8!!!!