shithub: kwa

Download patch

ref: 3206ebbc2fbd2d489d12a559b5d4e68fdfdc5ffc
parent: 6107b9c6c24e358901ad588b8e9053bd70cd8aa2
author: qwx <qwx@sciops.net>
date: Wed Jan 7 18:32:16 EST 2026

test: begin refactoring for inclusion

--- a/test/Compare.T1
+++ /dev/null
@@ -1,49 +1,0 @@
-#!/bin/rc
-rfork e
-if(~ $#oldawk 0)
-	oldawk=trueawk
-if(~ $#awk 0)
-	awk=kwa
-
-working=(\
-	T.-f-f \
-	T.chem \
-	T.csconcat \
-	T.delete \
-	T.exprconv \
-	T.fmt \
-	T.getline \
-	T.lilly \
-	T.main \
-	T.redir \
-	T.system \
-)
-
-broken=(\
-	T.argv \
-	T.arnold \
-	T.builtin \
-	T.close \
-	T.clv \
-	T.errmsg \
-	T.expr \
-	T.flags \
-	T.func \
-	T.int-expr \
-	T.latin1 \
-	T.misc \
-	T.nextfile \
-	T.overflow \
-	T.re \
-	T.recache \
-	T.split \
-	T.sub \
-	T.utf \
-	T.utfre \
-)
-
-for(i in $working)
-	./$i
-echo known broken
-for(i in $broken)
-	./$i
--- a/test/Compare.p
+++ /dev/null
@@ -1,17 +1,0 @@
-#!/bin/rc
-rfork e
-if(~ $#oldawk 0)
-	oldawk=trueawk
-if(~ $#awk 0)
-	awk=kwa
-
-for(i in p.*){
-	echo -n $i:
-	$oldawk -f $i test.countries test.countries >foo1.$i
-	$awk -f $i test.countries test.countries >foo2.$i
-	if(cmp -s foo1.$i foo2.$i)
-		echo
-	if not
-		echo BAD
-	diff -b foo1.$i foo2.$i | sed 's/^/	/;10q'
-}
--- a/test/Compare.t
+++ /dev/null
@@ -1,17 +1,0 @@
-#!/bin/rc
-rfork e
-if(~ $#oldawk 0)
-	oldawk=trueawk
-if(~ $#awk 0)
-	awk=kwa
-
-for(i in t.*){
-	echo -n $i:
-	$oldawk -f $i test.data >foo1.$i
-	$awk -f $i test.data >foo2.$i
-	if(cmp -s foo1.$i foo2.$i)
-		echo
-	if not
-		echo BAD
-	diff -b foo1.$i foo2.$i | sed 's/^/	/;10q'
-}
--- a/test/T.-f-f
+++ b/test/T.-f-f
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.-f-f: check multiple -f arguments
+echo T.-f-f: check multiple -f arguments >[1=2]
 
 echo 'begin
 end' >foo
@@ -6,13 +6,13 @@
 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'
+diff foo foo3 || echo 'BAD: T.-f-f: multiple -fs' >[1=2]
 
 sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
 
 echo '/a/' | $awk -f - foo.txt >foo1
 $awk '/a/' foo.txt >foo2
-diff foo1 foo2 || echo 'BAD: T.-f-f  -f -'
+diff foo1 foo2 || echo 'BAD: T.-f-f: -f -' >[1=2]
 
 cp foo.txt foo1
 echo '/./ {' >foo2
@@ -19,7 +19,7 @@
 echo 'print' >foo3
 echo '}' >foo4
 $awk -f foo2 -f foo3 -f foo4 foo.txt >foo5
-diff foo1 foo5 || echo 'BAD: T.-f-f 3 files'
+diff foo1 foo5 || echo 'BAD: T.-f-f: 3 files' >[1=2]
 
 echo '/./ {' >foo2
 echo 'print' >foo3
@@ -29,4 +29,4 @@
 
 ]' >foo4
 $awk -f foo2 -f foo3 -f foo4 foo.txt >foo5 >[2]foo6
-grep 'syntax error at .*foo4' foo6 >/dev/null >[2=1] || echo 'BAD: T.-f-f source file name'
+grep 'syntax error at .*foo4' foo6 >/dev/null >[2=1] || echo 'BAD: T.-f-f: source file name' >[1=2]
--- a/test/T.argv
+++ b/test/T.argv
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.argv: misc tests of argc and argv
+echo T.argv: misc tests of argc and argv >[1=2]
 
 echo >foo1
 echo >foo2
@@ -13,7 +13,7 @@
 	exit
 }' * >foo1
 echo * >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (echo1 *)'
+diff foo1 foo2 || echo 'BAD: T.argv: echo1 *' >[1=2]
 
 $awk '
 BEGIN {
@@ -26,7 +26,7 @@
 	exit
 }' * >foo1
 echo * >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (echo2 *)'
+diff foo1 foo2 || echo 'BAD: T.argv: echo2 *' >[1=2]
 
 $awk '
 BEGIN {
@@ -45,7 +45,7 @@
 def
 
 !
-diff foo1 foo2 || echo 'BAD: T.argv (argc *)'
+diff foo1 foo2 || echo 'BAD: T.argv: argc *' >[1=2]
 
 echo '1
 2
@@ -54,7 +54,7 @@
 foo2
 foo3' >foo1
 $awk '{print L $0}' 'L=foo' <foo0 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (L=foo <foo1)'
+diff foo1 foo2 || echo 'BAD: T.argv: L=foo <foo1' >[1=2]
 
 echo '1
 2
@@ -63,7 +63,7 @@
 foo2
 foo3' >foo1
 $awk '{print L $0}' 'L=foo' foo0 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (L=foo foo1)'
+diff foo1 foo2 || echo 'BAD: T.argv: L=foo foo1' >[1=2]
 
 echo '1
 2
@@ -72,7 +72,7 @@
 foo2
 foo3' >foo1
 cat foo0 | $awk '{print L $0}' 'L=foo' - >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (L=foo -)'
+diff foo1 foo2 || echo 'BAD: T.argv: L=foo -' >[1=2]
 
 echo '1
 2
@@ -84,7 +84,7 @@
 glop2
 glop3' >foo1
 $awk '{print L $0}' 'L=foo' foo0 'L=glop' foo0 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (L=foo L=glop)'
+diff foo1 foo2 || echo 'BAD: T.argv: L=foo L=glop' >[1=2]
 
 echo '1
 2
@@ -96,23 +96,16 @@
 222
 223' >foo1
 $awk '{print L $0}' 'L=11' foo0 'L=22' foo0 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (L=11 L=22)'
+diff foo1 foo2 || echo 'BAD: T.argv: L=11 L=22' >[1=2]
 
-echo >foo0
-echo 'name=value
-name=value' >foo1
-$awk 'BEGIN { print ARGV[1] } { print ARGV[1] }' 'name=value' foo0 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv assignment operand modified'
-
 echo 3.345 >foo1
 $awk 'BEGIN { print ARGV[1] + ARGV[2]}' 1 2.345 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (ARGV[1] + ARGV[2])'
+diff foo1 foo2 || echo 'BAD: T.argv: ARGV[1] + ARGV[2]' >[1=2]
 
 echo 3.345 >foo1
 x1=1 x2=2.345 $awk 'BEGIN { print ENVIRON["x1"] + ENVIRON["x2"]}' 1 2.345 >foo2
-diff foo1 foo2 || echo 'BAD: T.argv (ENVIRON[x1] + ENVIRON[x2])'
+diff foo1 foo2 || echo 'BAD: T.argv: ENVIRON[x1] + ENVIRON[x2]' >[1=2]
 
-
 echo 'foo1' >foo1
 echo 'foo2' >foo2
 echo 'foo3' >foo3
@@ -120,7 +113,7 @@
 	{ print }' foo1 foo2 foo3 >foo4
 echo 'foo1
 foo3' >foo5
-diff foo4 foo5 || echo 'BAD: T.argv zap ARGV[2]'
+diff foo4 foo5 || echo 'BAD: T.argv: zap ARGV[2]' >[1=2]
 
 echo hi > foo1 ; mv foo1 foo2
 $awk 'BEGIN { ARGV[1] = "foo2" ; print FILENAME }
@@ -127,7 +120,7 @@
              { print FILENAME }' foo1 >foo3
 echo '
 foo2' >foo4
-diff foo3 foo4 || echo 'BAD: T.argv startup FILENAME'
+diff foo3 foo4 || echo 'BAD: T.argv: startup FILENAME' >[1=2]
 	# assumes that startup FILENAME is ""
 
 
@@ -148,7 +141,7 @@
         for (i in ARGV)
                 printf("ARGV[%d] is %s\n", i, ARGV[i])
 }' >foo2
-diff foo1 foo2 || echo 'BAD: T.argv delete ARGV[2]'
+diff foo1 foo2 || echo 'BAD: T.argv: delete ARGV[2]' >[1=2]
 
 # deleting ARGV used to trigger a use-after-free crash when awk
 # iterates over it to read files.
@@ -169,4 +162,4 @@
 
 awkstatus=$status
 if(! ~ $awkstatus '' || ! diff /dev/null foo4)
-	echo 'BAD: T.argv delete ARGV'
+	echo 'BAD: T.argv: delete ARGV' >[1=2]
--- /dev/null
+++ b/test/T.argv.broken
@@ -1,0 +1,8 @@
+#!/bin/rc
+echo T.argv: misc tests of argc and argv >[1=2]
+
+echo >foo0
+echo 'name=value
+name=value' >foo1
+$awk 'BEGIN { print ARGV[1] } { print ARGV[1] }' 'name=value' foo0 >foo2
+diff foo1 foo2 || echo 'BAD: T.argv: assignment operand modified' >[1=2]
--- a/test/T.arnold
+++ b/test/T.arnold
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.arnold: test fixes by Arnold Robbins 8/18
+echo T.arnold: test fixes by Arnold Robbins 8/18 >[1=2]
 # for which many thanks
 
 rm -rf arnold-fixes
@@ -6,10 +6,15 @@
 tar xf arnold-fixes.tar
 cd arnold-fixes
 
-for(i in *.awk){
+files=(\
+	string-conv.awk\
+	system-status.awk\
+)
+
+for(i in $files){
 	name=`{basename $i .awk}
 	if(! ~ $name system-status){
 		$awk -f $name.awk >foo.$name
-		diff $name.ok foo.$name || echo 'BAD: T.arnold ('^$name^')'
+		diff $name.ok foo.$name || echo 'BAD: T.arnold: '^$name >[1=2]
 	}
 }
--- /dev/null
+++ b/test/T.arnold.broken
@@ -1,0 +1,23 @@
+#!/bin/rc
+echo T.arnold: test fixes by Arnold Robbins 8/18 >[1=2]
+# for which many thanks
+
+rm -rf arnold-fixes
+tar xf arnold-fixes.tar
+cd arnold-fixes
+
+files=(\
+	a-format.awk\
+	decr-NF.awk\
+	ofs-rebuild.awk\
+	space.awk\
+	unary-plus.awk\
+)
+
+for(i in $files){
+	name=`{basename $i .awk}
+	if(! ~ $name system-status){
+		$awk -f $name.awk >foo.$name
+		diff $name.ok foo.$name || echo 'BAD: T.arnold: '^$name >[1=2]
+	}
+}
--- a/test/T.builtin
+++ b/test/T.builtin
@@ -1,9 +1,9 @@
 #!/bin/rc
-echo T.builtin: test miscellaneous builtin functions
+echo T.builtin: test miscellaneous builtin functions >[1=2]
 
 $awk 'BEGIN { print index(123, substr(123, 2)) }' >foo1
 echo 2 >foo2
-diff foo1 foo2 || echo 'BAD: T.builtin (index/substr)'
+diff foo1 foo2 || echo 'BAD: T.builtin: index/substr' >[1=2]
 
 $awk 'BEGIN {
 	pi = 2 * atan2(1, 0)
@@ -11,7 +11,7 @@
 		pi, sin(pi), cos(pi/2), exp(log(pi)), log(exp(10)))
 }' >foo1
 echo '3.14159 0.000 0.000 3.14159 10.000' >foo2
-diff foo1 foo2 || echo 'BAD: T.builtin (sin/cos)'
+diff foo1 foo2 || echo 'BAD: T.builtin: sin/cos' >[1=2]
 
 $awk 'BEGIN {
 	s = srand(1)	# set a real random start
@@ -21,47 +21,46 @@
 	for (i = 1; i <= 10; i++)
 		print rand() >"foo2"
 }'
-diff foo1 foo2 || echo 'BAD: T.builtin (rand)'
+diff foo1 foo2 || echo 'BAD: T.builtin: rand' >[1=2]
 
 echo 'hello, WORLD!' |
 $awk '{ printf("%s|%s|%s\n", tolower($0), toupper($0), $0)}' >foo1
 echo 'hello, world!|HELLO, WORLD!|hello, WORLD!' >foo2
-diff foo1 foo2 || echo 'BAD: T.builtin (toupper/tolower)'
+diff foo1 foo2 || echo 'BAD: T.builtin: toupper/tolower' >[1=2]
 
-
 echo 'Dürst' |
 $awk '{ printf("%s|%s|%s\n", tolower($0), toupper($0), $0)}' >foo1
 echo 'dürst|DÜRST|Dürst' >foo2
-diff foo1 foo2 || echo 'BAD: T.builtin (toupper/tolower) for utf-8'
+diff foo1 foo2 || echo 'BAD: T.builtin: toupper/tolower for utf-8' >[1=2]
 
 $awk 'BEGIN { print 0.01 }' /dev/null >foo1
 echo '0.01' >foo2
-diff foo1 foo2 || echo 'BAD: T.builtin LC_NUMERIC radix (.) handling' 
+diff foo1 foo2 || echo 'BAD: T.builtin: LC_NUMERIC radix (.) handling' >[1=2]
 
 $awk 'BEGIN {
 	j = 1; sprintf("%d", 99, ++j)	# does j get incremented?
 	if (j != 2)
-		print "BAD: T.builtin (printf arg list not evaluated)"
-}'
+		print "BAD: T.builtin: printf arg list not evaluated"
+}' >[1=2]
 
 $awk 'BEGIN {
 	j = 1; substr("", 1, ++j)	# does j get incremented?
 	if (j != 2)
-		print "BAD: T.builtin (substr arg list not evaluated)"
-}'
+		print "BAD: T.builtin: substr arg list not evaluated"
+}' >[1=2]
 
 $awk 'BEGIN {
 	j = 1; sub(/1/, ++j, z)	# does j get incremented?
 	if (j != 2)
-		print "BAD: T.builtin (sub() arg list not evaluated)"
-}'
+		print "BAD: T.builtin: sub() arg list not evaluated"
+}' >[1=2]
 
 $awk 'BEGIN {
 	j = 1; length("zzzz", ++j, ++j)	# does j get incremented?
 	if (j != 3)
-		print "BAD: T.builtin (excess length args not evaluated)"
+		print "BAD: T.builtin: excess length args not evaluated"
 }' >[2]foo
-grep 'too many arg' foo >/dev/null || echo 'T.bad: too many args not caught'
+grep 'too many arg' foo >/dev/null || echo 'BAD: T.builtin: too many args not caught' >[1=2]
 
 echo 'a
 a b
@@ -70,19 +69,4 @@
 2
 3' >foo1
 $awk '{ n = split($0, x); print length(x) }' <foo0 >foo2
-diff foo1 foo2 || echo 'BAD: T.builtin length array'
-
-# Test for backslash handling
-cat <<'EOF' >foo0
-BEGIN {
-    print "A\
-B";
-    print "CD"
-}
-EOF
-$awk -f foo0 /dev/null >foo1
-cat <<'EOF' >foo2
-AB
-CD
-EOF
-diff foo1 foo2 || echo 'BAD: T.builtin continuation handling (backslash)' 
+diff foo1 foo2 || echo 'BAD: T.builtin: length array' >[1=2]
--- /dev/null
+++ b/test/T.builtin.broken
@@ -1,0 +1,17 @@
+#!/bin/rc
+echo T.builtin: test miscellaneous builtin functions >[1=2]
+
+# Test for backslash handling
+cat <<'EOF' >foo0
+BEGIN {
+    print "A\
+B";
+    print "CD"
+}
+EOF
+$awk -f foo0 /dev/null >foo1
+cat <<'EOF' >foo2
+AB
+CD
+EOF
+diff foo1 foo2 || echo 'BAD: T.builtin: continuation handling (backslash)' >[1=2]
--- a/test/T.chem
+++ b/test/T.chem
@@ -1,8 +1,8 @@
 #!/bin/rc
-echo T.chem:  test chem.awk
+echo T.chem: test chem.awk >[1=2]
 
 for(i in lsd1.p penicil.p res.p){
 	$awk -f chem.awk $i >foo1
 	$oldawk -f chem.awk $i >foo2
-	diff foo1 foo2 || echo 'BAD: T.chem on '^$i
+	diff foo1 foo2 || echo 'BAD: T.chem: '^$i >[1=2]
 }
--- a/test/T.close
+++ b/test/T.close
@@ -1,37 +1,13 @@
 #!/bin/rc
-echo T.close: test close built-in
+echo T.close: test close built-in >[1=2]
 
 sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
 
 rm -f foo
 $awk '{ print >>"foo"; close("foo") }' foo.txt
-diff foo.txt foo || echo 'BAD: T.close (1)'
+diff foo.txt foo || echo 'BAD: T.close: 1' >[1=2]
 
 ls -l >foo
 tail -1 foo >foo1
 $awk '{ print >"foo2"; close("foo2") }' foo
-diff foo1 foo2 || echo 'BAD: T.close (2)'
-
-echo 0 >foo1
-$awk '	# non-accessible file
-  BEGIN { getline <"foo.txt"; print close("foo.txt"); }
-' >foo2
-diff foo1 foo2 || echo 'BAD: T.close (3)'
-
-echo -1 >foo1
-$awk '	# file not opened
-  BEGIN { print close("glotch"); }
-' >foo2
-diff foo1 foo2 || echo 'BAD: T.close (4)'
-
-echo 0 >foo1
-$awk '	# normal close
-  BEGIN { print "hello" > "foo"; print close("foo"); }
-' >foo2
-diff foo1 foo2 || echo 'BAD: T.close (5)'
-
-echo 0 >foo1
-$awk '	# normal close
-  BEGIN { print "hello" | "cat >foo"; print close("cat >foo"); }
-' >foo2
-diff foo1 foo2 || echo 'BAD: T.close (6)'
+diff foo1 foo2 || echo 'BAD: T.close: 2' >[1=2]
--- /dev/null
+++ b/test/T.close.broken
@@ -1,0 +1,28 @@
+#!/bin/rc
+echo T.close: test close built-in >[1=2]
+
+sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
+
+echo 0 >foo1
+$awk '	# non-accessible file
+  BEGIN { getline <"foo.txt"; print close("foo.txt"); }
+' >foo2
+diff foo1 foo2 || echo 'BAD: T.close: 3' >[1=2]
+
+echo -1 >foo1
+$awk '	# file not opened
+  BEGIN { print close("glotch"); }
+' >foo2
+diff foo1 foo2 || echo 'BAD: T.close: 4' >[1=2]
+
+echo 0 >foo1
+$awk '	# normal close
+  BEGIN { print "hello" > "foo"; print close("foo"); }
+' >foo2
+diff foo1 foo2 || echo 'BAD: T.close: 5' >[1=2]
+
+echo 0 >foo1
+$awk '	# normal close
+  BEGIN { print "hello" | "cat >foo"; print close("cat >foo"); }
+' >foo2
+diff foo1 foo2 || echo 'BAD: T.close: 6' >[1=2]
--- a/test/T.clv
+++ b/test/T.clv
@@ -1,8 +1,6 @@
 #!/bin/rc
-echo T.clv: check command-line variables
+echo T.clv: check command-line variables >[1=2]
 
-rm -f core
-
 # stdin only, no cmdline asgn
 echo 'hello
 goodbye' | $awk '
@@ -10,7 +8,7 @@
 ' >foo1
 echo '0
 0 hello' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (stdin only)'
+diff foo1 foo2 || echo 'BAD: T.clv: stdin only' >[1=2]
 
 # cmdline asgn then stdin
 echo 'hello
@@ -19,7 +17,7 @@
 ' 'x=1' >foo1
 echo '0
 1 hello' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=1 only)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=1 only' >[1=2]
 
 # several cmdline asgn, then stdin
 echo 'hello
@@ -28,7 +26,7 @@
 ' 'x=1' 'x=2' 'x=3' >foo1
 echo '0
 3 hello' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=3 only' >[1=2]
 
 # several cmdline asgn, then file
 echo 'hello
@@ -38,17 +36,17 @@
 ' 'x=1' 'x=2' 'x=3' foo >foo1
 echo '0
 3 hello' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=3 only)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=3 only' >[1=2]
 
 # cmdline asgn then file
 echo 4 >foo1
 $awk 'BEGIN { getline; print x}' 'x=4' /dev/null >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=4 /dev/null)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=4 /dev/null' >[1=2]
 
 #cmdline asgn then file but no read of it
 echo 0 >foo1
 $awk 'BEGIN { x=0; getline <"/dev/null"; print x}' 'x=5' /dev/null >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=5 /dev/null)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=5 /dev/null' >[1=2]
 
 #cmdline asgn then file then read
 echo 'xxx
@@ -58,7 +56,7 @@
 end' >foo1
 $awk 'BEGIN { x=0; getline; print x}
       END { print x }' 'x=6' foo 'x=end' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=6 /dev/null)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=6 /dev/null' >[1=2]
 
 #cmdline asgn then file then read
 echo '0
@@ -65,7 +63,7 @@
 end' >foo1
 $awk 'BEGIN { x=0; getline <"/dev/null"; print x}
       END { print x }' 'x=7' /dev/null 'x=end' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=7 /dev/null)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=7 /dev/null' >[1=2]
 
 #cmdline asgn then file then read; _ in commandname
 echo '0
@@ -72,68 +70,43 @@
 end' >foo1
 $awk 'BEGIN { _=0; getline <"/dev/null"; print _}
       END { print _ }' '_=7A' /dev/null '_=end' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (_=7A /dev/null)'
+diff foo1 foo2 || echo 'BAD: T.clv: _=7A /dev/null' >[1=2]
 
 # illegal varname in commandname
 $awk '{ print }' '99_=foo' /dev/null >foo >[2]foo2
-grep 'can''t open.*foo' foo2 >/dev/null >[2=1] || echo 'BAD: T.clv (7B: illegal varname)'
+grep 'can''t open.*foo' foo2 >/dev/null >[2=1] || echo 'BAD: T.clv: 7B: illegal varname' >[1=2]
 
 # these test the new -v option:  awk ... -v a=1 -v b=2 'prog' does before BEGIN
 
 echo 123 >foo1
 $awk -v 'x=123' 'BEGIN { print x }' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=11)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=11' >[1=2]
 
-echo 123 >foo1
-$awk '-vx=123' 'BEGIN { print x }' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=11a)'
-
 echo 123 abc 10.99 >foo1
 $awk -v 'x=123' -v 'y=abc' -v 'z1=10.99' 'BEGIN { print x, y, z1 }' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=12)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=12' >[1=2]
 
 echo 123 abc 10.99 >foo1
-$awk '-vx=123' '-vy=abc' '-vz1=10.99' 'BEGIN { print x, y, z1 }' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
-
-echo 123 abc 10.99 >foo1
 $awk -v 'x=123' -v 'y=abc' -v 'z1=10.99' -- 'BEGIN { print x, y, z1 }' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=12a)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=12b' >[1=2]
 
 echo 'BEGIN { print x, y, z1 }' >foo0
 echo 123 abc 10.99 >foo1
 $awk -v 'x=123' -v 'y=abc' -f foo0 -v 'z1=10.99' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=13)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=13' >[1=2]
 
 echo 'BEGIN { print x, y, z1 }' >foo0
 echo 123 abc 10.99 >foo1
-$awk '-vx=123' '-vy=abc' -f foo0 '-vz1=10.99' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=13a)'
-
-echo 'BEGIN { print x, y, z1 }' >foo0
-echo 123 abc 10.99 >foo1
 $awk -f foo0 -v 'x=123' -v 'y=abc' -v 'z1=10.99' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=14)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=14' >[1=2]
 
-echo 'BEGIN { print x, y, z1 }' >foo0
-echo 123 abc 10.99 >foo1
-$awk -f foo0 '-vx=123' '-vy=abc' '-vz1=10.99' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=14a)'
-
 echo 'BEGIN { print x, y, z1 }
 END { print x }' >foo0
 echo '123 abc 10.99
 4567' >foo1
 $awk -f foo0 -v 'x=123' -v 'y=abc' -v 'z1=10.99' /dev/null 'x=4567' /dev/null >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=15)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=15' >[1=2]
 
-echo 'BEGIN { print x, y, z1 }
-END { print x }' >foo0
-echo '123 abc 10.99
-4567' >foo1
-$awk -f foo0 '-vx=123' '-vy=abc' '-vz1=10.99' /dev/null 'x=4567' /dev/null >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=15a)'
-
 sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
 
 echo 'BEGIN { print x, y, z1 }
@@ -141,35 +114,21 @@
 echo '123 abc 10.99
 4567' >foo1
 $awk -v 'x=123' -v 'y=abc' -v 'z1=10.99' -f foo0 'x=4567' foo.txt >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=16)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=16' >[1=2]
 
-echo 'BEGIN { print x, y, z1 }
-NR==1 { print x }' >foo0
-echo '123 abc 10.99
-4567' >foo1
-$awk '-vx=123' '-vy=abc' '-vz1=10.99' -f foo0 'x=4567' foo.txt >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=16a)'
-
 # special chars in commandline assigned value;
 # have to use local echo to avoid quoting problems.
 
 echo 'a\\b\z' >foo1
 echo 'hello' | $awk '{print x}' 'x=\141\\\\\142\\z' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=17)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=17' >[1=2]
 
 echo 'a
 z' >foo1
 echo 'hello' | $awk '{print x}' 'x=a\nz' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=18)'
+diff foo1 foo2 || echo 'BAD: T.clv: x=18' >[1=2]
 
 # a bit circular here...
 $awk 'BEGIN { printf("a%c%c%cz\n", "\b", "\r", "\f") }' >foo1 
 echo 'hello' | $awk '{print x}' 'x=a\b\r\fz' >foo2
-diff foo1 foo2 || echo 'BAD: T.clv (x=19)'
-
-$awk -vx 'BEGIN {print x}' >foo >[2=1]
-grep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20)'
-
-$awk -v x 'BEGIN {print x}' >foo >[2=1]
-grep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv (x=20a)'
-
+diff foo1 foo2 || echo 'BAD: T.clv: x=19' >[1=2]
--- /dev/null
+++ b/test/T.clv.broken
@@ -1,0 +1,42 @@
+#!/bin/rc
+echo T.clv: check command-line variables >[1=2]
+
+echo 123 >foo1
+$awk '-vx=123' 'BEGIN { print x }' >foo2
+diff foo1 foo2 || echo 'BAD: T.clv: x=11a' >[1=2]
+
+echo 123 abc 10.99 >foo1
+$awk '-vx=123' '-vy=abc' '-vz1=10.99' 'BEGIN { print x, y, z1 }' >foo2
+diff foo1 foo2 || echo 'BAD: T.clv: x=12a' >[1=2]
+
+echo 'BEGIN { print x, y, z1 }' >foo0
+echo 123 abc 10.99 >foo1
+$awk '-vx=123' '-vy=abc' -f foo0 '-vz1=10.99' >foo2
+diff foo1 foo2 || echo 'BAD: T.clv: x=13a' >[1=2]
+
+echo 'BEGIN { print x, y, z1 }' >foo0
+echo 123 abc 10.99 >foo1
+$awk -f foo0 '-vx=123' '-vy=abc' '-vz1=10.99' >foo2
+diff foo1 foo2 || echo 'BAD: T.clv: x=14a' >[1=2]
+
+echo 'BEGIN { print x, y, z1 }
+END { print x }' >foo0
+echo '123 abc 10.99
+4567' >foo1
+$awk -f foo0 '-vx=123' '-vy=abc' '-vz1=10.99' /dev/null 'x=4567' /dev/null >foo2
+diff foo1 foo2 || echo 'BAD: T.clv: x=15a' >[1=2]
+
+sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
+
+echo 'BEGIN { print x, y, z1 }
+NR==1 { print x }' >foo0
+echo '123 abc 10.99
+4567' >foo1
+$awk '-vx=123' '-vy=abc' '-vz1=10.99' -f foo0 'x=4567' foo.txt >foo2
+diff foo1 foo2 || echo 'BAD: T.clv: x=16a' >[1=2]
+
+$awk -vx 'BEGIN {print x}' >foo >[2=1]
+grep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv: x=20' >[1=2]
+
+$awk -v x 'BEGIN {print x}' >foo >[2=1]
+grep 'invalid -v option argument: x' foo >/dev/null || echo 'BAD: T.clv: x=20a' >[1=2]
--- a/test/T.csconcat
+++ b/test/T.csconcat
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.csconcat: test constant string concatenation
+echo T.csconcat: test constant string concatenation >[1=2]
 
 $awk '
 BEGIN {
@@ -25,4 +25,4 @@
 hello world
 EOF
 
-diff foo1 foo2 || echo 'BAD: T.csconcat (1)'
+diff foo1 foo2 || echo 'BAD: T.csconcat: 1' >[1=2]
--- a/test/T.delete
+++ b/test/T.delete
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.delete: misc tests of array deletion
+echo T.delete: misc tests of array deletion >[1=2]
 
 echo '1 2 3 4
 1 2 3
@@ -17,4 +17,4 @@
 	n2 = 0; for (i in x) n2++
 	print n, n1, n2
 }' foo0 >foo1
-diff foo1 foo2 || echo 'BAD: T.delete (1)'
+diff foo1 foo2 || echo 'BAD: T.delete: 1' >[1=2]
--- a/test/T.errmsg
+++ b/test/T.errmsg
@@ -1,15 +1,17 @@
 #!/bin/rc
-echo T.errmsg:  check some error messages
+echo T.errmsg:  check some error messages >[1=2]
 
 ls >foo.glop
-awk=$awk awk  '
-{	pat = $0
+awk '
+BEGIN{
+	awk = ENVIRON["awk"]
+}{
+	pat = $0
 	prog = ""
 	while (getline x > 0 && x != "")
 		prog = prog "\n" x
-	print sprintf("\n%s ''%s'' <foo.glop >/dev/null >[2]foo",
-		ENVIRON["awk"], prog)
-	print sprintf("grep ''%s'' foo >/dev/null || echo ''BAD: %s'' failed", pat, pat)
+	print "\n"awk" ''"prog"'' <foo.glop >/dev/null >[2]foo"
+	print "grep ''"pat"'' foo >/dev/null || echo ''BAD: T.errmsg: "pat"'' >[1=2]"
 }
 ' >foo.rc <<'!!!!'
 parsing error
@@ -18,9 +20,6 @@
 illegal break, continue, next or nextfile from BEGIN
 BEGIN { nextfile }
 
-illegal break, continue, next or nextfile from END
-END { nextfile }
-
 nextfile is illegal inside a function
 function foo() { nextfile }
 
@@ -27,12 +26,6 @@
 duplicate argument
 function f(i,j,i) { return i }
 
-nonterminated character class
-/[[/
-
-nonterminated character class
-/[]/
-
 No closing ] for class
 /[\
 
@@ -39,9 +32,6 @@
 No closing ] for class
 BEGIN { s = "[x"; if (1 ~ s) print "foo"}
 
-syntax error in regular expression
-BEGIN { if ("x" ~ /$^/) print "ugh" }
-
 no matching parenthesis
 /((.)/
 
@@ -76,10 +66,6 @@
 BEGIN { f(f) }
 function f() { print "x" }
 
-can''t use function f as argument in f
-BEGIN { f(f) }
-function f() { print "x" }
-
 x is an array, not a function
 { split($0, x) }; function x() {}
 
@@ -179,9 +165,6 @@
 
 calling undefined function foo
 BEGIN { foo() }
-
-this should print a BAD message
-BEGIN { print }
 !!!!
 
 rc ./foo.rc
@@ -189,19 +172,16 @@
 echo xxx >foo0
 $awk '{print x}' 'x=a
 b' foo0 >foo1 >[2]foo2
-grep 'newline in string' foo2 >/dev/null || echo 'BAD: T.errmsg newline in string'
+grep 'newline in string' foo2 >/dev/null || echo 'BAD: T.errmsg: newline in string' >[1=2]
 
 $awk -safe 'BEGIN{"date" | getline}' >foo >[2]foo2
-grep 'cmd | getline is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg cmd|getline unsafe'
+grep 'cmd | getline is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg: cmd|getline unsafe' >[1=2]
 
 $awk -safe 'BEGIN{print >"foo"}' >foo >[2]foo2
-grep 'print > is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print > unsafe'
+grep 'print > is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg: print > unsafe' >[1=2]
 
 $awk -safe 'BEGIN{print >> "foo"}' >foo >[2]foo2
-grep 'print >> is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print >> unsafe'
+grep 'print >> is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg: print >> unsafe' >[1=2]
 
 $awk -safe 'BEGIN{print | "foo"}' >foo >[2]foo2
-grep 'print | is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg print | unsafe'
-
-$awk -safe 'BEGIN {system("date")}' >foo >[2]foo2
-grep 'system is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg system unsafe'
+grep 'print | is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg: print | unsafe' >[1=2]
--- /dev/null
+++ b/test/T.errmsg.broken
@@ -1,0 +1,39 @@
+#!/bin/rc
+echo T.errmsg:  check some error messages >[1=2]
+
+ls >foo.glop
+awk '
+{
+	awk = ENVIRON["awk"]
+	pat = $0
+	prog = ""
+	while (getline x > 0 && x != "")
+		prog = prog "\n" x
+	print "\n"awk" ''"prog"'' <foo.glop >/dev/null >[2]foo"
+	print "grep ''"pat"'' foo >/dev/null || echo ''BAD: T.errmsg: "pat"'' >[1=2]"
+}
+' >foo.rc <<'!!!!'
+illegal break, continue, next or nextfile from END
+END { nextfile }
+
+nonterminated character class
+/[[/
+
+nonterminated character class
+/[]/
+
+syntax error in regular expression
+BEGIN { if ("x" ~ /$^/) print "ugh" }
+
+can''t use function f as argument in f
+BEGIN { f(f) }
+function f() { print "x" }
+
+this should print a BAD message
+BEGIN { print }
+!!!!
+
+rc ./foo.rc
+
+$awk -safe 'BEGIN {system("date")}' >foo >[2]foo2
+grep 'system is unsafe' foo2 >/dev/null || echo 'BAD: T.errmsg: system unsafe' >[1=2]
--- a/test/T.exprconv
+++ b/test/T.exprconv
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.exprconv:  check conversion of expr to number
+echo T.exprconv:  check conversion of expr to number >[1=2]
 
 $awk '
 BEGIN {	x = (1 > 0); print x
@@ -17,4 +17,4 @@
 0
 1
 1' >foo2
-cmp foo1 foo2 || echo 'BAD: T.exprconv (1 > 0, etc.)'
+cmp foo1 foo2 || echo 'BAD: T.exprconv: 1 > 0, etc.' >[1=2]
--- a/test/T.fmt
+++ b/test/T.fmt
@@ -1,23 +1,6 @@
 #!/bin/rc
-echo T.fmt: OFMT and CONVFMT tests
+echo T.fmt: OFMT and CONVFMT tests >[1=2]
 
-echo '0.333333
-0.3 0.142857 
-0.33 0.14 0.333333 
-0.33 0.14 0.3333333333  0.1428571429  0.333333 ' >foo1
-$awk '
-BEGIN{
-	print 1/3
-	OFMT="%.1g"
-	print 1/3, 1/7" "
-	OFMT="%.2g"
-	x=1/3" "
-	print 1/3, 1/7, x
-	CONVFMT="%.10f"
-	print 1/3, 1/7, 1/3" ", 1/7" ", x
-}' >foo2
-diff foo1 foo2 || echo >[1=2] 'BAD: T.ofmt: bad conversions'
-
 echo '  1' >foo1
 $awk 'BEGIN{ split("2 12", x, "2"); print x[1], x[2] }' >foo2
-diff foo1 foo2 || echo >[1=2] 'BAD: T.ofmt: undue conversion'
+diff foo1 foo2 || echo >[1=2] 'BAD: T.ofmt: undue conversion' >[1=2]
--- /dev/null
+++ b/test/T.fmt.broken
@@ -1,0 +1,19 @@
+#!/bin/rc
+echo T.fmt: OFMT and CONVFMT tests >[1=2]
+
+echo '0.333333
+0.3 0.142857 
+0.33 0.14 0.333333 
+0.33 0.14 0.3333333333  0.1428571429  0.333333 ' >foo1
+$awk '
+BEGIN{
+	print 1/3
+	OFMT="%.1g"
+	print 1/3, 1/7" "
+	OFMT="%.2g"
+	x=1/3" "
+	print 1/3, 1/7, x
+	CONVFMT="%.10f"
+	print 1/3, 1/7, 1/3" ", 1/7" ", x
+}' >foo2
+diff foo1 foo2 || echo >[1=2] 'BAD: T.ofmt: bad conversions' >[1=2]
--- a/test/T.getline
+++ b/test/T.getline
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.getline: test getline function
+echo T.getline: test getline function >[1=2]
 
 who >foo1
 cat foo1 | $awk '
@@ -9,7 +9,7 @@
 	exit
 }
 ' >foo
-cmp -s foo1 foo || echo 'BAD: T.getline (bare getline)'
+cmp -s foo1 foo || echo 'BAD: T.getline: bare getline' >[1=2]
 
 who >foo1
 cat foo1 | $awk '
@@ -19,7 +19,7 @@
 	exit
 }
 ' >foo
-cmp -s foo1 foo || echo 'BAD: T.getline (getline xxx)'
+cmp -s foo1 foo || echo 'BAD: T.getline: getline xxx' >[1=2]
 
 sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
 
@@ -30,7 +30,7 @@
 	exit
 }
 ' >foo
-cmp -s foo.txt foo || echo 'BAD: T.getline (getline <file)'
+cmp -s foo.txt foo || echo 'BAD: T.getline: getline <file' >[1=2]
 
 cat foo.txt | $awk '
 BEGIN {
@@ -39,7 +39,7 @@
 	exit
 }
 ' >foo
-cmp -s foo.txt foo || echo 'BAD: T.getline (getline <"-")'
+cmp -s foo.txt foo || echo 'BAD: T.getline: getline <"-"' >[1=2]
 
 $awk '
 BEGIN {
@@ -48,7 +48,7 @@
 	exit
 }
 ' foo.txt >foo
-cmp -s foo.txt foo || echo 'BAD: T.getline (getline <arg)'
+cmp -s foo.txt foo || echo 'BAD: T.getline: getline <arg' >[1=2]
 
 $awk '
 BEGIN {
@@ -57,7 +57,7 @@
 	exit
 }
 ' foo.txt >foo
-cmp -s foo.txt foo || echo 'BAD: T.getline (getline x <arg)'
+cmp -s foo.txt foo || echo 'BAD: T.getline: getline x <arg' >[1=2]
 
 $awk '
 BEGIN {
@@ -66,7 +66,7 @@
 	exit
 }
 ' foo.txt >foo
-cmp -s foo.txt foo || echo 'BAD: T.getline (cat arg | getline)'
+cmp -s foo.txt foo || echo 'BAD: T.getline: cat arg | getline' >[1=2]
 
 $awk '
 BEGIN {
@@ -75,11 +75,11 @@
 	exit
 }
 ' foo.txt >foo
-cmp -s foo.txt foo || echo 'BAD: T.getline (cat arg | getline x)'
+cmp -s foo.txt foo || echo 'BAD: T.getline: cat arg | getline x' >[1=2]
 
 $awk ' BEGIN { print getline <"/glop/glop/glop" } ' >foo
 echo '-1' >foo1
-cmp -s foo foo1 || echo 'BAD: T.getline (non-existent file)'
+cmp -s foo foo1 || echo 'BAD: T.getline: non-existent file' >[1=2]
 
 echo 'false false equal' >foo1
 $awk 'BEGIN {
@@ -91,9 +91,9 @@
 	if ($0==$1) printf "equal\n"
 	else printf "not equal\n"
 }' >foo2
-cmp -s foo1 foo2 || echo >[1=2] 'BAD: T.getline bad $0 type in cmd|getline'
+cmp -s foo1 foo2 || echo >[1=2] 'BAD: T.getline bad $0 type in cmd|getline' >[1=2]
 
 echo 'L1
 L2' | $awk 'BEGIN { $0="old stuff"; $1="new"; getline x; print}' >foo1
 echo 'new stuff' >foo2
-cmp -s foo1 foo2 || echo >[1=2] 'BAD: T.getline bad update $0'
+cmp -s foo1 foo2 || echo >[1=2] 'BAD: T.getline bad update $0' >[1=2]
--- a/test/T.lilly
+++ b/test/T.lilly
@@ -1,8 +1,8 @@
 #!/bin/rc
-echo T.lilly: miscellaneous RE tests from Bruce Lilly
+echo T.lilly: miscellaneous RE tests from Bruce Lilly >[1=2]
 
 rm -f foo
-$oldawk '
+awk '
 BEGIN { awk = ENVIRON["oldawk"] }
 /./ {
 	print $0 >"foo"
@@ -12,7 +12,7 @@
 }' <lilly.progs >foo1 >[2=1]
 
 rm -f foo
-$awk '
+awk '
 BEGIN { awk = ENVIRON["awk"] }
 /./ {
 	print $0 >"foo"
@@ -25,4 +25,4 @@
 
 sed -e 's#'^$oldawk^':##' -e 's/Syntax/syntax/' -e '/warning:/d' foo1 >foo.glop1
 sed 's#'^$awk^':##' foo2 >foo.glop2
-diff foo.glop1 foo.glop2 >foo.lilly.diff || echo 'BAD: check foo.lilly.diff'
+diff foo.glop1 foo.glop2 >foo.lilly.diff || echo 'BAD: check foo.lilly.diff' >[1=2]
--- a/test/T.main
+++ b/test/T.main
@@ -1,27 +1,25 @@
 #!/bin/rc
-echo T.main: misc tests of arguments in main
+echo T.main: misc tests of arguments in main >[1=2]
 
-rm -f core
-
 # test -d option
-echo hello | $awk -d '{print}' >foo1 || echo 'BAD: T.main awk -d (wanted to) drop core'
+echo hello | $awk -d '{print}' >foo1 || echo 'BAD: T.main: awk -d (wanted to) drop core' >[1=2]
 
 echo 'a::b::c' >foo
 $awk -F:: '{print NF}' foo >foo1
 echo '3' >foo2
-diff foo1 foo2 || echo 'BAD: awk -F::'
+diff foo1 foo2 || echo 'BAD: T.main: awk -F::' >[1=2]
 
 echo 'a::b::c' >foo
 $awk -F :: '{print NF}' foo >foo1
 echo '3' >foo2
-diff foo1 foo2 || echo 'BAD: awk -F ::'
+diff foo1 foo2 || echo 'BAD: T.main: awk -F ::' >[1=2]
 
 echo 'a	b	c' >foo
 $awk -F t '{print NF}' foo >foo1
 echo '3' >foo2
-diff foo1 foo2 || echo 'BAD: awk -F (tab)'
+diff foo1 foo2 || echo 'BAD: T.main: awk -F (tab)' >[1=2]
 
 echo 'atabbtabc' >foo
 $awk -F tab '{print NF}' foo >foo1
 echo '3' >foo2
-diff foo1 foo2 || echo 'BAD: awk -F tab'
+diff foo1 foo2 || echo 'BAD: T.main: awk -F tab' >[1=2]
--- a/test/T.recache
+++ b/test/T.recache
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.recache: test re cache in b.c
+echo T.recache: test re cache in b.c >[1=2]
 	# thanks to ross ridge for this horror
 
 echo b >foo1
@@ -29,4 +29,4 @@
         print x
 }
 ' >foo2
-diff foo1 foo2 || echo 'BAD: T.recache'
+diff foo1 foo2 || echo 'BAD: T.recache' >[1=2]
--- a/test/T.redir
+++ b/test/T.redir
@@ -1,23 +1,23 @@
 #!/bin/rc
-echo T.redir: test redirections
+echo T.redir: test redirections >[1=2]
 
 sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
 
 $awk '{ print >"foo" }' foo.txt
-diff foo foo.txt || echo 'BAD: T.redir (print >"foo")'
+diff foo foo.txt || echo 'BAD: T.redir: print >"foo"' >[1=2]
 
 rm -f foo
 $awk '{ print >>"foo" }' foo.txt
-diff foo foo.txt || echo 'BAD: T.redir (print >>"foo")'
+diff foo foo.txt || echo 'BAD: T.redir: print >>"foo"' >[1=2]
 
 rm -f foo
 $awk 'NR%2 == 1 { print >>"foo" }
       NR%2 == 0 { print >"foo" }' foo.txt
-diff foo foo.txt || echo 'BAD: T.redir (print > and >>"foo")'
+diff foo foo.txt || echo 'BAD: T.redir: print > and >>"foo"' >[1=2]
 
 rm -f foo
 $awk '{ print | "cat >foo" }' foo.txt
-diff foo foo.txt || echo 'BAD: T.redir (print | "cat >foo")'
+diff foo foo.txt || echo 'BAD: T.redir: print | "cat >foo"' >[1=2]
 
 # tests flush of stdout before opening pipe
 echo '   head
@@ -26,12 +26,12 @@
 $awk 'BEGIN { print "   head"
 	for (i = 1; i < 3; i++)
 		print i | "sort" }' >foo2
-diff foo1 foo2 || echo 'BAD: T.redir (buffering)'
+diff foo1 foo2 || echo 'BAD: T.redir: buffering' >[1=2]
 
 $awk '{ print >"/fd/2" }' foo.txt >foo1 >[2]foo2
-diff foo2 foo.txt || echo 'BAD: T.redir (print >"/fd/2")'
-diff foo1 /dev/null  || echo 'BAD: T.redir (print >"/fd/2")'
+diff foo2 foo.txt || echo 'BAD: T.redir: print >"/fd/2"'
+diff foo1 /dev/null  || echo 'BAD: T.redir: print >"/fd/2"' >[1=2]
 
 $awk '{ print >"/fd/1" }' foo.txt >foo1 >[2]foo2
-diff foo1 foo.txt || echo 'BAD: T.redir (print >"/fd/1")'
-diff foo2 /dev/null  || echo 'BAD: T.redir (print >"/fd/2")'
+diff foo1 foo.txt || echo 'BAD: T.redir: print >"/fd/1"'
+diff foo2 /dev/null  || echo 'BAD: T.redir: print >"/fd/2"' >[1=2]
--- a/test/T.split
+++ b/test/T.split
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.split: misc tests of field splitting and split command
+echo T.split: misc tests of field splitting and split command >[1=2]
 
 TEMP0=foo0
 TEMP1=foo1
@@ -6,23 +6,6 @@
 TEMP2=foo2
 
 $awk 'BEGIN {
-	# Assign string to $0, then change FS.
-	FS = ":"
-	$0="a:bc:def"
-	FS = "-"
-	print FS, $1, NF
-
-	# Assign number to $0, then change FS.
-	FS = "2"
-	$0=1212121
-	FS="3"
-	print FS, $1, NF
-}' > $TEMP1
-echo '- a 3
-3 1 4' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.1'
-
-$awk 'BEGIN {
 	# FS changes after getline.
 	FS = ":"
 	"echo a:bc:def" | getline
@@ -30,7 +13,7 @@
 	print FS, $1, NF
 }' > $TEMP1
 echo '- a 3' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.2'
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: 0.2' >[1=2]
 
 echo '
 a
@@ -47,56 +30,12 @@
 2
 3
 4' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.3'
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: 0.3' >[1=2]
 
 # getline var shouldn't impact fields.
 
 sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
 
-echo 'f b a' > $TEMP0
-$awk '{
-	FS = ":"
-	getline a < "foo.txt"
-	print $1
-}' $TEMP0 > $TEMP1
-echo 'f' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.4'
-
-echo 'a b c d
-foo
-e f g h i
-bar' > $TEMP0
-$awk '{
-	FS=":"
-	getline v
-	print $2, NF
-	FS=" "
-}' $TEMP0 > $TEMP1
-echo 'b 4
-f 5' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split 0.5'
-
-echo 'a.b.c=d.e.f
-g.h.i=j.k.l
-m.n.o=p.q.r' > $TEMP0
-echo 'b
-h
-n' > $TEMP1
-$awk 'BEGIN { FS="=" } { FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split (record assignment 1)'
-
-echo 'a.b.c=d.e.f
-g.h.i=j.k.l
-m.n.o=p.q.r' > $TEMP0
-echo 'd.e.f
-b
-j.k.l
-h
-p.q.r
-n' > $TEMP1
-$awk 'BEGIN { FS="=" } { print $2; FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split (record assignment 2)'
-
 echo 'abc
 de
 f
@@ -116,25 +55,12 @@
 	print s
 }' $TEMP0 > $TEMP1
 
-diff $TEMP0 $TEMP1 || echo 'BAD: T.split 1'
+diff $TEMP0 $TEMP1 || echo 'BAD: T.split: 1' >[1=2]
 
 # assumes same test.temp.0!  bad design
 
 
 $awk '
-{	n = split($0, x, //)
-	m = length($0)
-	if (m != n) print "error 1", NR
-	s = ""
-	for (i = 1; i <= m; i++)
-		s = s x[i]
-	if (s != $0) print "error 2", NR
-	print s
-}' $TEMP0 > $TEMP1
-
-diff $TEMP0 $TEMP1 || echo 'BAD: T.split //'
-
-$awk '
 BEGIN { FS = "" }
 {	n = split($0, x)	# will be split with FS
 	m = length($0)
@@ -146,7 +72,7 @@
 	print s
 }' $TEMP0 > $TEMP2
 
-diff $TEMP0 $TEMP2 || echo 'BAD: T.split 2'
+diff $TEMP0 $TEMP2 || echo 'BAD: T.split: 2' >[1=2]
 
 # assumes same test.temp.0!
 
@@ -162,7 +88,7 @@
 	print s
 }' $TEMP0 > $TEMP2
 
-diff $TEMP0 $TEMP2 || echo 'BAD: T.split 3'
+diff $TEMP0 $TEMP2 || echo 'BAD: T.split: 3' >[1=2]
 
 
 $awk '
@@ -176,7 +102,7 @@
 echo '2
 2
 2' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split 4'
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: 4' >[1=2]
 
 rm -f $TEMP1 $TEMP2 $TEMP3
 
@@ -191,7 +117,7 @@
 1
 2
 3' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split null 3rd arg'
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: null 3rd arg' >[1=2]
 
 rm -f $TEMP1 $TEMP2 $TEMP3
 $awk 'BEGIN {
@@ -200,7 +126,7 @@
 }' > $TEMP1
 
 echo '2 a b' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split(a[1],a)'
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: a[1],a' >[1=2]
 
 $awk 'BEGIN {
   a = "cat\n\n\ndog"
@@ -208,4 +134,4 @@
   print b[1], b[2]
 }' > $TEMP1
 echo 'cat dog' > $TEMP2
-diff $TEMP1 $TEMP2 || echo 'BAD: T.split(a, b, "[\r\n]+")'
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: a, b, "[\r\n]+"' >[1=2]
--- /dev/null
+++ b/test/T.split.broken
@@ -1,0 +1,92 @@
+#!/bin/rc
+echo T.split: misc tests of field splitting and split command >[1=2]
+
+TEMP0=foo0
+TEMP1=foo1
+TEMP2=foo2
+
+$awk 'BEGIN {
+	# Assign string to $0, then change FS.
+	FS = ":"
+	$0="a:bc:def"
+	FS = "-"
+	print FS, $1, NF
+
+	# Assign number to $0, then change FS.
+	FS = "2"
+	$0=1212121
+	FS="3"
+	print FS, $1, NF
+}' > $TEMP1
+echo '- a 3
+3 1 4' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: 0.1' >[1=2]
+
+# getline var shouldn't impact fields.
+
+sed 1000q /lib/ucd/UnicodeData.txt >foo.txt
+
+echo 'f b a' > $TEMP0
+$awk '{
+	FS = ":"
+	getline a < "foo.txt"
+	print $1
+}' $TEMP0 > $TEMP1
+echo 'f' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: 0.4' >[1=2]
+
+echo 'a b c d
+foo
+e f g h i
+bar' > $TEMP0
+$awk '{
+	FS=":"
+	getline v
+	print $2, NF
+	FS=" "
+}' $TEMP0 > $TEMP1
+echo 'b 4
+f 5' > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: 0.5' >[1=2]
+
+echo 'a.b.c=d.e.f
+g.h.i=j.k.l
+m.n.o=p.q.r' > $TEMP0
+echo 'b
+h
+n' > $TEMP1
+$awk 'BEGIN { FS="=" } { FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: record assignment 1' >[1=2]
+
+echo 'a.b.c=d.e.f
+g.h.i=j.k.l
+m.n.o=p.q.r' > $TEMP0
+echo 'd.e.f
+b
+j.k.l
+h
+p.q.r
+n' > $TEMP1
+$awk 'BEGIN { FS="=" } { print $2; FS="."; $0=$1; print $2; FS="="; }' $TEMP0 > $TEMP2
+diff $TEMP1 $TEMP2 || echo 'BAD: T.split: record assignment 2' >[1=2]
+
+echo 'abc
+de
+f
+
+     ' > $TEMP0
+who | sed 10q  >> $TEMP0
+sed 10q foo.txt >> $TEMP0
+
+$awk '
+{	n = split($0, x, //)
+	m = length($0)
+	if (m != n) print "error 1", NR
+	s = ""
+	for (i = 1; i <= m; i++)
+		s = s x[i]
+	if (s != $0) print "error 2", NR
+	print s
+}' $TEMP0 > $TEMP1
+
+diff $TEMP0 $TEMP1 || echo 'BAD: T.split: //' >[1=2]
--- a/test/T.system
+++ b/test/T.system
@@ -1,5 +1,5 @@
 #!/bin/rc
-echo T.system: test system built-in
+echo T.system: test system built-in >[1=2]
 
 rm -f foo
 $awk 'BEGIN {
@@ -11,4 +11,4 @@
 echo $status | sed 's/^.*: //' >>foo
 echo '1
 2' >foo1
-diff foo foo1 || echo 'BAD: T.system (1)'
+diff foo foo1 || echo 'BAD: T.system: 1' >[1=2]
--- /dev/null
+++ b/test/kwa.rc
@@ -1,0 +1,59 @@
+#!/bin/rc
+rfork e
+if(~ $#oldawk 0)
+	oldawk=awk
+if(~ $#awk 0)
+	awk=kwa
+
+fn check{
+	if(! cmp -s $1 $2){
+		echo BAD: $3 >[2=1]
+		diff -b $1 $2 | sed 's/^/	/;10q'
+	}
+	if not
+		rm $1 $2
+	status=()
+}
+
+echo 'p.*: book tests' >[1=2]
+for(i in p.*){
+	$oldawk -f $i test.countries test.countries >foo1.$i >[2=1]
+	$awk -f $i test.countries test.countries >foo2.$i >[2=1]
+	check foo?.$i $i
+}
+
+broken=(\
+	t.gsub4 \
+	t.ofmt \
+)
+echo 't.*: general-purpose tests' >[1=2]
+for(i in t.*){
+	if(! ~ $i $broken){
+		$oldawk -f $i test.data >foo1.$i >[2=1]
+		$awk -f $i test.data >foo2.$i >[2=1]
+		check foo?.$i $i
+	}
+	if not
+		status=()
+}
+
+broken=(\
+	T.expr \
+	T.flags \
+	T.func \
+	T.int-expr \
+	T.latin1 \
+	T.misc \
+	T.nextfile \
+	T.overflow \
+	T.re \
+	T.sub \
+	T.utf \
+	T.utfre \
+)
+for(i in T.*){
+	if(! ~ $i $broken *.broken)
+		./$i
+	if not
+		status=()
+}
--- /dev/null
+++ b/test/mkfile
@@ -1,0 +1,8 @@
+</$objtype/mkfile
+
+TEST=kwa
+
+</sys/src/cmd/mktest
+
+clean:V:
+	rm -rf $CLEANFILES arnold-fixes foo*
--