shithub: kwa

Download patch

ref: eddb8fc8dc562d4689c694c14363d104d5accb0e
parent: c0526c8928a2b554d9421bca2fc04ba044fe06af
author: qwx <qwx@sciops.net>
date: Thu Sep 25 06:08:14 EDT 2025

port more tests

most break our awk.

--- /dev/null
+++ b/test/Compare.T1
@@ -1,0 +1,7 @@
+#!/bin/rc
+rfork e
+oldawk=trueawk
+awk=kwa
+
+for(i in T.*)
+	./$i
--- /dev/null
+++ b/test/T.-f-f
@@ -1,0 +1,30 @@
+#!/bin/rc
+echo T.-f-f: check multiple -f arguments
+
+echo 'begin
+end' >foo
+echo 'BEGIN { print "begin" }' >foo1
+echo 'END { print "end" }' >foo2
+echo xxx | $awk -f foo1 -f foo2 >foo3
+diff foo foo3 || echo 'BAD: T.-f-f multiple -fs'
+
+echo '/a/' | $awk -f - /lib/theo >foo1
+$awk '/a/' /lib/theo >foo2
+diff foo1 foo2 || echo 'BAD: T.-f-f  -f -'
+
+cp /lib/theo foo1
+echo '/./ {' >foo2
+echo 'print' >foo3
+echo '}' >foo4
+$awk -f foo2 -f foo3 -f foo4 /lib/theo >foo5
+diff foo1 foo5 || echo 'BAD: T.-f-f 3 files'
+
+echo '/./ {' >foo2
+echo 'print' >foo3
+echo '
+
+
+
+]' >foo4
+$awk -f foo2 -f foo3 -f foo4 /lib/theo >foo5 >[2]foo6
+grep 'syntax error.*at foo4:' foo6 >/dev/null >[2=1] || echo 'BAD: T.-f-f source file name'
--- /dev/null
+++ b/test/T.arnold
@@ -1,0 +1,15 @@
+#!/bin/rc
+echo T.arnold: test fixes by Arnold Robbins 8/18
+# for which many thanks
+
+rm -rf arnold-fixes
+tar xf arnold-fixes.tar
+cd arnold-fixes
+
+for(i in *.awk){
+	name=`{basename $i .awk}
+	if(! ~ $name system-status){
+		$awk -f $name.awk >foo.$name
+		diff $name.ok foo.$name || echo 'BAD: T.arnold ('^$name^')'
+	}
+}
--- /dev/null
+++ b/test/T.csconcat
@@ -1,0 +1,28 @@
+#!/bin/rc
+echo T.csconcat: test constant string concatenation
+
+$awk '
+BEGIN {
+	$0 = "aaa"
+	print "abcdef" " " $0
+}
+BEGIN { print "hello" "world"; print helloworld }
+BEGIN {
+ 	print " " "hello"
+ 	print "hello" " "
+ 	print "hello" " " "world"
+ 	print "hello" (" " "world")
+}
+' > foo1
+
+cat << 'EOF' > foo2
+abcdef aaa
+helloworld
+
+ hello
+hello 
+hello world
+hello world
+EOF
+
+diff foo1 foo2 || echo 'BAD: T.csconcat (1)'
--- /dev/null
+++ b/test/T.expr
@@ -1,0 +1,232 @@
+#!/bin/rc
+echo T.expr: tests of miscellaneous expressions
+
+$awk '
+BEGIN {
+	FS = "\t"
+	awk = ENVIRON["awk"]
+}
+NF == 0 || $1 ~ /^#/ {
+	next
+}
+$1 ~ /try/ {	# new test
+	nt++
+	sub(/try /, "")
+	prog = $0
+	printf("%3d  %s\n", nt, prog)
+	prog = sprintf("%s -F\"\\t\" ''%s''", awk, prog)
+	# print "prog is", prog
+	nt2 = 0
+	while (getline > 0) {
+		if (NF == 0)	# blank line terminates a sequence
+			break
+		input = $1
+		for (i = 2; i < NF; i++)	# input data
+			input = input "\t" $i
+		test = sprintf("echo ''%s'' | %s >foo1; ",
+			input, prog)
+		if ($NF == "\"\"")
+			output = ">foo2;"
+		else
+			output = sprintf("echo ''%s'' >foo2; ", $NF)
+		gsub(/\\t/, "\t", output)
+		gsub(/\\n/, "\n", output)
+		run = sprintf("cmp foo1 foo2 || echo test %d.%d failed",
+			nt, ++nt2)
+		# print  "input is", input
+		# print  "test is", test
+		# print  "output is", output
+		# print  "run is", run
+		system(test output run)
+	}
+	tt += nt2
+}
+END { print tt, "tests" }
+' <<'!!!!'
+# General format:
+# try program as rest of line
+# $1	$2	$3	output1  (\t for tab, \n for newline,
+# $1	$2	$3	output2  ("" for null)
+# ... terminated by blank line
+
+# try another program...
+
+try { print ($1 == 1) ? "yes" : "no" }
+1	yes
+1.0	yes
+1E0	yes
+0.1E1	yes
+10E-1	yes
+01	yes
+10	no
+10E-2	no
+
+try $1 > 0
+1	1
+2	2
+0	""
+-1	""
+1e0	1e0
+0e1	""
+-2e64	""
+3.1e4	3.1e4
+
+try { print NF }
+	0
+x	1
+x	y	2
+	y	2
+x		2
+
+try { print NF, $NF }
+	0 
+x	1 x
+x	y	2 y
+x	yy	zzz	3 zzz
+
+# this horror prints $($2+1)
+try { i=1; print ($++$++i) }
+1	1
+1	2	3	3
+abc	abc
+
+# concatenate $1 and ++$2; print new $1 and concatenated value
+try { x = $1++++$2; print $1, x }
+1	3	2 14
+
+# do we get the precedence of ! right?
+try $1 !$2
+0	0	0\t0
+0	1	0\t1
+1	0	1\t0
+1	1	1\t1
+
+# another ava special
+try { print ($1~/abc/ !$2) }
+0	0	01
+0	1	00
+abc	0	11
+xabcd	1	10
+
+try { print !$1 + $2 }
+1	3	3
+0	3	4
+-1	3	3
+
+# aside:  !$1 = $2 is now a syntax error
+
+# the definition of "number" changes with isnumber.
+# 2e100 is ok according to strtod.
+# try 1 
+
+try { print ($1 == $2) }
+0	0	1
+0	1	0
+0	00	1
+0	""	0
++0	-0	1
+1	1.0	1
+1	1e0	1
+2e10	2.00e10	1
+2e10	2e+10	1
+2e-10	2e-10	1
+2e10	2e-10	0
+2e10	20e9	1
+2e100	2.000e100	1
+2e1000	2.0e1000	0
+
+# this one (3 & 4) may "fail" if a negative 0 is printed as -0,
+# but i think this might be a type-coercion problem.
+
+try { print $1, +$1, -$1, - -$1 }
+1	1 1 -1 1
+-1	-1 -1 1 -1
+0	0 0 0 0
+x	x 0 0 0
+
+try { printf("a%*sb\n", $1, $2) }
+1	x	axb
+2	x	a xb
+3	x	a  xb
+
+try { printf("a%-*sb\n", $1, $2) }
+1	x	axb
+2	x	ax b
+3	x	ax  b
+
+try { printf("a%*.*sb\n", $1, $2, "hello") }
+1	1	ahb
+2	1	a hb
+3	1	a  hb
+
+try { printf("a%-*.*sb\n", $1, $2, "hello") }
+1	1	ahb
+2	1	ah b
+3	1	ah  b
+
+try { printf("%d %ld %lld %zd %jd %hd %hhd\n", $1, $1, $1, $1, $1, $1, $1) }
+1	1 1 1 1 1 1 1
+10	10 10 10 10 10 10 10
+10000	10000 10000 10000 10000 10000 10000 10000
+
+try { printf("%x %lx %llx %zx %jx %hx %hhx\n", $1, $1, $1, $1, $1, $1, $1) }
+1	1 1 1 1 1 1 1
+10	a a a a a a a
+10000	2710 2710 2710 2710 2710 2710 2710
+
+try { if ($1 ~ $2) print 1; else print 0 }
+a	\141	1
+a	\142	0
+a	\x61	1
+a	\x061	0
+a	\x62	0
+0	\060	1
+0	\60	1
+0	\0060	0
+Z	\x5a	1
+Z	\x5A	1
+
+try { print $1 ~ $2 }
+a	\141	1
+a	\142	0
+a	\x61	1
+a	\x061	0
+a	\x62	0
+0	\060	1
+0	\60	1
+0	\0060	0
+Z	\x5a	1
+Z	\x5A	1
+
+try { print $1 || $2 }
+		0
+1		1
+0	0	0
+1	0	1
+0	1	1
+1	1	1
+a	b	1
+
+try { print $1 && $2 }
+		0
+1		0
+0	0	0
+1	0	0
+0	1	0
+1	1	1
+a	b	1
+
+try { $1 = $2; $1 = $1; print $1 }
+abc	def	def
+abc	def	ghi	def
+
+# $f++ => ($f)++
+try { f = 1; $f++; print f, $f }
+11	22	33	1 12
+
+# $f[1]++ => ($f[1])++
+try { f[1]=1; f[2]=2; print $f[1], $f[1]++, $f[2], f[1], f[2] }
+111	222	333	111 111 222 2 2
+
+
+!!!!
--- /dev/null
+++ b/test/T.nextfile
@@ -1,0 +1,70 @@
+#!/bin/rc
+echo T.nextfile: tests of nextfile command
+
+# 1st lines of some files
+rm -f foo0
+for(i in T.*)
+	sed 1q $i >>foo0
+
+$awk '
+{ print $0; nextfile }	# print first line, quit
+' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 1'
+
+$awk '	# same test but in a for loop
+{ print $0; 
+  for (i = 1; i < 10; i++)
+	if (i == 1)
+		nextfile
+  print "nextfile for error"
+}	# print first line, quit
+' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 1f'
+
+$awk '	# same test but in a while loop
+{ print $0; 
+  i = 1
+  while (i < 10)
+	if (i++ == 1)
+		nextfile
+  print "nextfile while error"
+}	# print first line, quit
+' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 1w'
+
+$awk '	# same test but in a do loop
+{ print $0; 
+  i = 1
+  do {
+	if (i++ == 1)
+		nextfile	# print first line, quit
+  } while (i < 10)
+  print "nextfile do error"
+}
+' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 1d'
+
+# 100 lines of some files
+rm -f foo0
+for(i in T.*)
+	sed 100q $i >>foo0
+
+$awk '
+{ print }
+FNR == 100 { nextfile }	# print first line, quit
+' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 2'
+
+>foo0	# empty
+$awk ' { nextfile; print $0 }' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 3'
+
+# skip weird args
+rm -f foo0
+for(i in T.*)
+	sed 1q $i >>foo0
+
+$awk '
+{ print $0; nextfile }	# print first line, quit
+' T.* >foo1
+diff foo0 foo1 || echo 'BAD: T.nextfile 4'
--- /dev/null
+++ b/test/T.re
@@ -1,0 +1,340 @@
+#!/bin/rc
+echo T.re: tests of regular expression code
+
+awk '
+BEGIN {
+	FS = "\t"
+	awk = ENVIRON["awk"]
+}
+NF == 0 {
+	next
+}
+$1 != "" {	# new test
+	re = $1
+}
+$2 != "" {	# either ~ or !~
+	op = $2
+	if (op == "~")
+		neg = "!"
+	else if (op == "!~")
+		neg = ""
+}
+$3 != "" {	# new test string
+	str = $3
+}
+$3 == "\"\"" {	# explicit empty line
+	$3 = ""
+}
+NF > 2 {	# generate a test
+	input = $3
+	test = sprintf("echo ''%s'' | %s ''%s/%s/ {print \"%d fails %s %s %s\"}''",
+		input, awk, neg, re, NR, re, op, input)
+	# printf(" %3d   %s %s %s:\n", NR, re, op, input)
+	# print "test is |" test "|"
+	system(test)
+	nt++
+}
+END { print "	" nt, "tests" }
+' <<'!!!!'
+	~	a
+		aa
+		aaa
+		""
+a	~	a
+		ba
+		bab
+	!~	""
+		x
+		xxxxx
+=	~	=
+		b=
+		b=b
+	!~	""
+		x
+		xxxxx
+.	~	x
+		xxx
+	!~	""			
+.a	~	xa
+		xxa
+		xax
+	!~	a
+		ax
+		""
+$	~	x
+		""
+.$	~	x
+		xx
+	!~	""
+a$	~	a
+		ba
+		bbba
+	!~	ab
+		x
+		""
+^	~	x
+		""
+		^
+^a$	~	a
+	!~	xa
+		ax
+		xax
+		""
+^a.$	~	ax
+		aa
+	!~	xa
+		aaa
+		axy
+		""
+^$	~	""
+	!~	x
+		^
+^.a	~	xa
+		xaa
+	!~	a
+		""
+^.*a	~	a
+		xa
+		xxxxxxa
+	!~	""
+^.+a	~	xa
+		xxxxxxa
+	!~	""
+		a
+		ax
+a*	~	""
+		a
+		aaaa
+		xa
+		xxxx
+aa*	~	a
+		aaa
+		xa
+	!~	xxxx
+		""
+\$	~	x$
+		$
+		$x
+		x$x
+	!~	""
+		x
+\.	~	.
+	!~	x
+		""
+xr+y	~	xry
+		xrry
+		xrrrrrry
+	!~	ry
+		xy
+		xr
+xr?y	~	xy
+		xry
+	!~	xrry
+a?b?c?	~	""
+		x
+^a?b?x	~	x
+		ax
+		bx
+		abx
+		xa
+	!~	""
+		ab
+		aba			
+[0-9]	~	1
+		567
+		x0y
+	!~	abc
+		""
+[^0-9]	!~	1
+		567
+		""
+	~	abc
+		x0y
+[0-25-69]	~	0
+		1
+		2
+		5
+		6
+		9
+	!~	3
+		4
+		7
+		8
+[[:lower:]]	~	a
+		b
+		z
+	!~	A
+		Z
+		1
+		:
+		[
+		]
+[[:upper:]]	~	A
+		B
+		Z
+	!~	a
+		z
+		1
+		:
+		[
+		]
+[[:digit:]]	~	0
+		1
+		9
+	!~	d
+		:
+		[
+		]
+x[0-9]+y	~	x0y
+		x23y
+		x12345y
+	!~	0y
+		xy
+x[0-9]?y	~	xy
+		x1y
+	!~	x23y
+x[[]y	~	x[y
+	!~	xy
+		x[[]y
+		x]y
+x[[-]y	~	x[y
+		x-y
+	!~	xy
+		x[[]y
+		x]y
+x[[-a]y	~	x[y
+		xay
+		x]y
+	!~	xy
+		x[[]y
+		x-y
+x[]-a]y	~	x]y
+		xay
+	!~	xy
+		x[y
+		x-y
+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
+x[][]y	~	x[y
+		x]y
+	!~	xy
+		x][y
+		x[]y
+x[z-a]y	~	xy
+	!~	x
+		y
+		xay
+		xzy
+		x-y
+[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
+\f	!~	x
+\b	!~	x
+\r	!~	x
+\n	!~	x
+...)	~	abc)
+!!!!
--- /dev/null
+++ b/test/T.redir
@@ -1,0 +1,37 @@
+#!/bin/rc
+echo T.redir: test redirections
+
+$awk '{ print >"foo" }' /lib/theo
+diff foo /lib/theo || echo 'BAD: T.redir (print >"foo")'
+
+rm -f foo
+$awk '{ print >>"foo" }' /lib/theo
+diff foo /lib/theo || echo 'BAD: T.redir (print >>"foo")'
+
+rm -f foo
+$awk 'NR%2 == 1 { print >>"foo" }
+      NR%2 == 0 { print >"foo" }' /lib/theo
+diff foo /lib/theo || echo 'BAD: T.redir (print > and >>"foo")'
+
+rm -f foo
+$awk '{ print | "cat >foo" }' /lib/theo
+diff foo /lib/theo || echo 'BAD: T.redir (print | "cat >foo")'
+
+# tests flush of stdout before opening pipe
+echo '   head
+1
+2' >foo1
+$awk 'BEGIN { print "   head"
+	for (i = 1; i < 3; i++)
+		print i | "sort" }' >foo2
+diff foo1 foo2 || echo 'BAD: T.redir (buffering)'
+
+rm -f foo[12]
+$awk '{ print >"/fd/2" }' /lib/theo >foo1 >[2]foo2
+diff foo2 /lib/theo || echo 'BAD: T.redir (print >"/fd/2")'
+diff foo1 /dev/null  || echo 'BAD: T.redir (print >"/fd/2")'
+
+rm -f foo[12]
+$awk '{ print >"/fd/1" }' /lib/theo >foo1 >[2]foo2
+diff foo1 /lib/theo || echo 'BAD: T.redir (print >"/fd/1")'
+diff foo2 /dev/null  || echo 'BAD: T.redir (print >"/fd/2")'
--- /dev/null
+++ b/test/T.sub
@@ -1,0 +1,315 @@
+#!/bin/rc
+echo 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	ax
+a$	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	xy
+a	&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&y
+a+	x&	paq	pxaq	pxaq
+	x\&	paq	px&q	px&q
+	x&y	paq	pxayq	pxayq
+	x\&y	paq	px&yq	px&yq
+aa*	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	zxzxz
+xr+y	q	xy	xy	xy
+		xry	q	q
+		xrry	q	q
+		xryWxry	qWxry	qWq
+xr?y	q	AxyB	AqB	AqB
+		AxryB	AqB	AqB
+		Axrry	Axrry	Axrry
+a?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
+!!!!
binary files /dev/null b/test/arnold-fixes.tar differ
--