code: regress

Download patch

ref: a458242e8256b735e5bc38085fb3db35d7fa720d
parent: ef4281a5027fe3aeff75fb4017a4078e395cdab2
author: Ori Bernstein <ori@eigenstate.org>
date: Sat Feb 6 19:26:11 EST 2021

add test tests.

--- a/cmd/mkfile
+++ b/cmd/mkfile
@@ -3,5 +3,6 @@
 TEST=\
 	cpp\
 	date\
+	test\
 
 <../regress
--- /dev/null
+++ b/cmd/test.rc
@@ -1,0 +1,136 @@
+#!/bin/rc
+
+rfork e
+
+ERROR=0
+FAILED=0
+
+fn t{
+	# $1 -> exit code
+	# $2 -> $test expression
+
+	expect=$1
+	shift
+
+	echo -n $expect^': test' $*
+
+	# check for syntax errors
+	syntax=`{test $* >[2=1]}
+	if(~ $"syntax ''){
+		switch($expect){
+		case 0
+			if(test $*) echo '	OK'
+			if not failed
+		case 1
+			if(test $*) failed
+			if not echo '	OK'
+		}
+	}
+	if not
+		error
+}
+
+fn error{
+	echo
+	echo '	'^$"syntax
+	ERROR=`{echo $ERROR 1 + p | dc}
+}
+
+fn failed{
+	echo '	failed'
+	FAILED=`{echo $FAILED 1 + p | dc}
+}
+
+
+t 0 b '=' b
+t 1 b '!=' b
+t 0 '(' b '=' b ')'
+t 1 ! '(' b '=' b ')'
+t 1 ! -f /bin/rc
+
+t 0 -h '=' -h
+t 0 -o '=' -o
+#t 1 -f '=' h
+t 1 -h '=' f
+t 1 -o '=' f
+t 1 f '=' -o
+
+t 0 '(' -h '=' -h ')'
+t 1 '(' a '=' -h ')'
+#t 1 '(' -f '=' h ')'
+t 0 -h '=' -h -o a
+t 0 '(' -h '=' -h ')' -o 1
+t 0 -h '=' -h -o -h '=' -h
+t 0 '(' -h '=' -h ')' -o '(' -h '=' -h ')'
+t 0 roedelheim '=' roedelheim
+t 1 potsdam '=' berlin-dahlem
+
+t 0 -d /
+t 0 -d / -a a '!=' b
+t 1 -z -z
+t 0 -n -n
+
+t 0 0
+t 0 '(' 0 ')'
+t 0 '-E'
+t 0 -X -a -X
+t 0 -XXX
+t 0 '(' -E ')'
+t 0 true -o X
+t 0 true -o -X
+t 0 '(' '(' '(' a '=' a ')' -o 1 ')' -a 1 ')'
+#t 1 -h /
+t 0 -r /
+t 1 -w /dev/zero
+t 0 -w /dev/null
+t 1 -x /dev/null
+t 0 -x /bin/rc
+#t 0 -c /dev/null
+#t 0 -b /dev/fd0a -o -b /dev/rfd0a -o true
+t 0 -f /adm/users
+t 0 -s /adm/users
+
+t 1 ! '(' 700 -le 1000 -a -n 1 -a 20 '=' 20 ')'
+t 0 100 -eq 100
+t 0 100 -lt 200
+t 1 1000 -lt 200
+t 0 1000 -gt 200
+t 0 1000 -ge 200
+t 0 1000 -ge 1000
+
+t 1 2 -ne 2
+t 0 0 -eq 0
+t 1 -5 -eq 5
+t 0 '(' 0 -eq 0 ')'
+t 1 1 -eq 0 -o a '=' a -a 1 -eq 0 -o a '=' aa
+#t 0 '" +123 " -eq 123'
+#t 1 '"-123  " -gt " -1"'
+t 0 123 -gt -123
+t 0 -0 -eq +0
+t 1 +0 -gt 0
+t 0 0 -eq 0
+t 0 0000 -eq -0
+t 0 -1 -gt -2
+t 1 1 -gt 2
+t 1 4294967296 -eq 0
+t 0 12345678901234567890 -eq +12345678901234567890
+
+t 1 '' -o ''
+t 1 '' -a ''
+t 1 a -a ''
+t 0 a -a ! ''
+t 1 ''
+t 0 ! ''
+
+t 0 1 -eq 1
+t 1 ! 1 -eq 1
+t 0 ! ! 1 -eq 1
+t 1 ! ! ! 1 -eq 1
+t 1 ! '(' XXX -o XXX ')'
+t 0 ! '(' ! '(' XXX -o XXX ')' ')'
+
+echo
+echo 'Syntax errors:' $ERROR 'Failed:' $FAILED
+if(! ~ $ERROR 0 || ! ~ $FAILED 0)
+	exit 'failures'
+exit ''