aboutsummaryrefslogtreecommitdiff
path: root/test/sam/test.sh
diff options
context:
space:
mode:
authorRandy Palamar <randy@rnpnr.xyz>2024-05-21 19:53:22 -0600
committerRandy Palamar <randy@rnpnr.xyz>2024-05-21 19:53:22 -0600
commitb7074021b7bfb0932b889b9560dd22df31cef818 (patch)
tree0295b18de8fb8ea5289cbda95675687ae06025ff /test/sam/test.sh
parentb7f8018a00be930e3f2b864949aec1f91291309c (diff)
parentefafa3c178268a4149fc3e432bc1174a013c16de (diff)
downloadvis-b7074021b7bfb0932b889b9560dd22df31cef818.tar.gz
vis-b7074021b7bfb0932b889b9560dd22df31cef818.tar.xz
Merge vis-tests into test directory
Going forward all tests should be submitted here directly.
Diffstat (limited to 'test/sam/test.sh')
-rwxr-xr-xtest/sam/test.sh96
1 files changed, 96 insertions, 0 deletions
diff --git a/test/sam/test.sh b/test/sam/test.sh
new file mode 100755
index 0000000..ec5d003
--- /dev/null
+++ b/test/sam/test.sh
@@ -0,0 +1,96 @@
+#!/bin/sh
+
+NL='
+'
+
+export LANG="en_US.UTF-8"
+
+export VIS_PATH=.
+[ -z "$VIS" ] && VIS="../../vis"
+[ -z "$SAM" ] && SAM="sam"
+[ -z "$PLAN9" ] && PLAN9="/usr/local/plan9/bin"
+
+for SAM in "$SAM" "$PLAN9/sam" /usr/lib/plan9/bin/sam 9; do
+ if type "$SAM" >/dev/null 2>&1; then
+ break
+ fi
+done
+
+type "$SAM" >/dev/null 2>&1 || {
+ echo "sam(1) not found, skipping tests"
+ exit 0
+}
+
+[ "$SAM" = "9" ] && SAM="9 sam"
+
+echo "$SAM"
+$VIS -v
+
+if ! $VIS -v | grep '+lua' >/dev/null 2>&1; then
+ echo "vis compiled without lua support, skipping tests"
+ exit 0
+fi
+
+TESTS=$1
+[ -z "$TESTS" ] && TESTS=$(find . -name '*.cmd' | sed 's/\.cmd$//g')
+
+TESTS_RUN=0
+TESTS_OK=0
+
+for t in $TESTS; do
+ IN="$t.in"
+ SAM_OUT="$t.sam.out"
+ SAM_ERR="$t.sam.err"
+ VIS_OUT="$t.vis.out"
+ VIS_ERR="$t.vis.err"
+ REF="$t.ref"
+ rm -f "$SAM_OUT" "$SAM_ERR" "$VIS_OUT" "$VIS_ERR"
+ printf "Running test %s with sam ... " "$t"
+
+ {
+ echo ',{'
+ cat "$t.cmd"
+ echo '}'
+ echo ,
+ } | $SAM -d "$IN" > "$SAM_OUT" 2>/dev/null
+
+ if [ $? -ne 0 ]; then
+ printf "ERROR\n"
+ elif [ -e "$REF" ]; then
+ if cmp -s "$REF" "$SAM_OUT"; then
+ printf "OK\n"
+ else
+ printf "FAIL\n"
+ diff -u "$REF" "$SAM_OUT" > "$SAM_ERR"
+ fi
+ elif [ -e "$SAM_OUT" ]; then
+ REF="$SAM_OUT"
+ printf "OK\n"
+ fi
+
+ if [ ! -e "$REF" ]; then
+ printf " No reference solution, skipping.\n"
+ continue
+ fi
+
+ TESTS_RUN=$((TESTS_RUN+1))
+
+ $VIS '+qall!' "$IN" </dev/null 2>/dev/null
+ RETURN_CODE=$?
+
+ printf "Running test %s with vis ... " "$t"
+ if [ $RETURN_CODE -ne 0 -o ! -e "$VIS_OUT" ]; then
+ printf "ERROR\n"
+ elif cmp -s "$REF" "$VIS_OUT"; then
+ printf "OK\n"
+ TESTS_OK=$((TESTS_OK+1))
+ else
+ printf "FAIL\n"
+ diff -u "$REF" "$VIS_OUT" > "$VIS_ERR"
+ fi
+done
+
+printf "Tests ok %d/%d\n" $TESTS_OK $TESTS_RUN
+
+# set exit status
+[ $TESTS_OK -eq $TESTS_RUN ]