|
@@ -170,7 +170,7 @@ build_session() {
|
|
|
[ -f "gen_ssa/$prog.ssa" ] || { echo "no image"; return 1; }
|
|
[ -f "gen_ssa/$prog.ssa" ] || { echo "no image"; return 1; }
|
|
|
qbe -o "gen_ssa/$prog.s" "gen_ssa/$prog.ssa" 2> "gen_ssa/$prog.qbeerr" \
|
|
qbe -o "gen_ssa/$prog.s" "gen_ssa/$prog.ssa" 2> "gen_ssa/$prog.qbeerr" \
|
|
|
|| { echo "qbe"; cat "gen_ssa/$prog.qbeerr"; return 1; }
|
|
|| { echo "qbe"; cat "gen_ssa/$prog.qbeerr"; return 1; }
|
|
|
- cc "gen_ssa/$prog.s" "$SHIM" -o "gen_ssa/$prog" 2> "gen_ssa/$prog.ccerr" \
|
|
|
|
|
|
|
+ cc "gen_ssa/$prog.s" "$SHIM" -o "gen_ssa/$prog" -lm 2> "gen_ssa/$prog.ccerr" \
|
|
|
|| { echo "cc"; cat "gen_ssa/$prog.ccerr"; return 1; }
|
|
|| { echo "cc"; cat "gen_ssa/$prog.ccerr"; return 1; }
|
|
|
return 0
|
|
return 0
|
|
|
}
|
|
}
|
|
@@ -209,6 +209,25 @@ expect_run_files DTypesProg 36 d_types.def d_types.mod d_types_prog.mod
|
|
|
expect_run_files DOpaqueProg 55 d_opaque.def d_opaque.mod d_opaque_prog.mod
|
|
expect_run_files DOpaqueProg 55 d_opaque.def d_opaque.mod d_opaque_prog.mod
|
|
|
expect_run_files_out Hello 0 "Hello, Modula-2!" ../stdlib/sysio.def ../stdlib/sysio.mod hello.mod
|
|
expect_run_files_out Hello 0 "Hello, Modula-2!" ../stdlib/sysio.def ../stdlib/sysio.mod hello.mod
|
|
|
expect_run_files_out StringsProg 0 "Hello World" ../stdlib/sysio.def ../stdlib/sysio.mod ../stdlib/strings.def ../stdlib/strings.mod strings_prog.mod
|
|
expect_run_files_out StringsProg 0 "Hello World" ../stdlib/sysio.def ../stdlib/sysio.mod ../stdlib/strings.def ../stdlib/strings.mod strings_prog.mod
|
|
|
|
|
+expect_run_files MathProg 12 ../stdlib/sysio.def ../stdlib/sysio.mod ../stdlib/math.def ../stdlib/math.mod math_prog.mod
|
|
|
|
|
+
|
|
|
|
|
+expect_run_files_in() {
|
|
|
|
|
+ # $1 prog, $2 exit code, $3 expected first line, $4 stdin, then files
|
|
|
|
|
+ prog="$1"; want="$2"; wantline="$3"; input="$4"; shift 4
|
|
|
|
|
+ if ! build_session "$prog" "$@"; then
|
|
|
|
|
+ fail=$((fail+1)); echo "FAIL(session-in): $prog build failed"; return
|
|
|
|
|
+ fi
|
|
|
|
|
+ out=$(printf '%s\n' "$input" | timeout 10 "gen_ssa/$prog" 2>/dev/null); got=$?
|
|
|
|
|
+ first=$(printf '%s\n' "$out" | head -n 1)
|
|
|
|
|
+ if [ "$got" = "$want" ] && [ "$first" = "$wantline" ]; then
|
|
|
|
|
+ pass=$((pass+1)); echo "PASS(session-in): $prog -> $got [$first]"
|
|
|
|
|
+ else
|
|
|
|
|
+ fail=$((fail+1)); echo "FAIL(session-in): $prog rc=$got line=[$first] want=[$wantline]"
|
|
|
|
|
+ fi
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+expect_run_files_in ReadProg 0 "42" "20 22" ../stdlib/sysio.def ../stdlib/sysio.mod read_prog.mod
|
|
|
|
|
+expect_run_files_in WholeIOProg 0 "42" "6 7" ../stdlib/sysio.def ../stdlib/sysio.mod ../stdlib/wholeio.def ../stdlib/wholeio.mod wholeio_prog.mod
|
|
|
|
|
|
|
|
expect_fail_files() {
|
|
expect_fail_files() {
|
|
|
# $1 = listing basename, $2 = message (may be empty), then files
|
|
# $1 = listing basename, $2 = message (may be empty), then files
|