aboutsummaryrefslogtreecommitdiff
path: root/tests/drivers
diff options
context:
space:
mode:
authorGravatar zinc <zinc@downsta.ir> 2026-10-14 10:34:44 +0000
committerGravatar zinc <zinc@downsta.ir> 2026-10-14 10:34:44 +0000
commit1d3c45e270341c820de221acb6f21f193e78a8c0 (patch)
tree48aeaad7ba13ad2705ea985a531f3a70a45e2d3d /tests/drivers
parenttodo: record the vision, priorities and settled feature decisions; add the it... (diff)
parentx86-64 jit: zyi target, ZYNOO3, bench and test timeouts, docs; drop a stray file (diff)
Merge the x86-64 jit, phase 1; todo: tick it, add phase 2
Diffstat (limited to 'tests/drivers')
-rw-r--r--tests/drivers/jit_x64_test.sh34
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/drivers/jit_x64_test.sh b/tests/drivers/jit_x64_test.sh
new file mode 100644
index 0000000..ce0438f
--- /dev/null
+++ b/tests/drivers/jit_x64_test.sh
@@ -0,0 +1,34 @@
+#!/bin/bash
+# runs every program in tests/programs, examples and examples/learn on two cores
+# and compares stdout and the exit status. usage:
+# bash tests/drivers/jit_x64_test.sh <reference core> <jit core> [name-filter]
+# the reference is normally the interpreter (built with -DZYINTERP) and the second
+# core the x86-64 jit. each program is the core's stdin, with nothing after it, and
+# runs with a timeout (JIT_TEST_TIMEOUT seconds, 120 by default). a program that
+# differs is listed with the first lines of the difference; the exit status of
+# this script is the number of programs that differ.
+ref=${1:?usage: jit_x64_test.sh <reference core> <jit core> [filter]}
+jit=${2:?usage: jit_x64_test.sh <reference core> <jit core> [filter]}
+filter=${3:-}
+limit=${JIT_TEST_TIMEOUT:-120}
+root=$(cd "$(dirname "$0")/../.." && pwd)
+cd "$root" || exit 2
+tmp=$(mktemp -d)
+trap 'rm -rf "$tmp"' EXIT
+pass=0 fail=0 total=0
+for f in tests/programs/*.zc examples/*.zc examples/learn/*.zc; do
+ [ -n "$filter" ] && [[ "$f" != *$filter* ]] && continue
+ total=$((total + 1))
+ timeout "$limit" "$ref" < "$f" > "$tmp/ref.out" 2> "$tmp/ref.err"; rr=$?
+ timeout "$limit" "$jit" < "$f" > "$tmp/jit.out" 2> "$tmp/jit.err"; rj=$?
+ if [ "$rr" = "$rj" ] && cmp -s "$tmp/ref.out" "$tmp/jit.out"; then
+ pass=$((pass + 1))
+ else
+ fail=$((fail + 1))
+ echo "DIFF $f (status $rr vs $rj)"
+ diff "$tmp/ref.out" "$tmp/jit.out" | head -6
+ head -3 "$tmp/jit.err"
+ fi
+done
+echo "$pass of $total programs agree, $fail differ"
+exit "$fail"