aboutsummaryrefslogtreecommitdiffstats
path: root/runtests.sh
diff options
context:
space:
mode:
Diffstat (limited to 'runtests.sh')
-rwxr-xr-xruntests.sh40
1 files changed, 40 insertions, 0 deletions
diff --git a/runtests.sh b/runtests.sh
new file mode 100755
index 0000000..ddff74f
--- /dev/null
+++ b/runtests.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+if [ -z "$FORTH_CMD" ] ; then
+ FORTH_CMD="./forth"
+fi
+
+n=0
+failed=0
+
+runtest () {
+ file="$1"
+
+ output="$(mktemp)"
+ expectedoutput="$(mktemp)"
+ sed '0,/^INPUT$/d;/^OUTPUT$/,$d' "$file" | "$FORTH_CMD" > "$output" &2> /dev/null
+ sed '0,/^OUTPUT$/d' "$file" > "$expectedoutput"
+
+ diff="$(diff -w -y "$output" "$expectedoutput")"
+
+ if [ "1" -eq "$?" ] ; then
+ echo "Test $n failed: $file" >&2
+ echo "Diff:" >&2
+ echo "$diff"
+ exitcode=1
+ failed="$(expr "$failed" + 1)"
+
+ fi
+}
+
+for f in ./tests/*; do
+ n="$(expr "$n" + 1)"
+ runtest "$f"
+done
+
+if [ "0" -eq "$failed" ]; then
+ echo "All $n tests passed" >&2
+ exit 0
+else
+ echo "$failed/$n tests failed" >&2
+fi