From 192907a2259c33aba502b95e5fb7e086fac59a72 Mon Sep 17 00:00:00 2001 From: Lane0218 Date: Thu, 12 Mar 2026 15:46:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(test):=20=E6=94=AF=E6=8C=81=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E8=84=9A=E6=9C=AC=E8=87=AA=E5=8A=A8=E6=AF=94=E5=AF=B9?= =?UTF-8?q?=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/verify_asm.sh | 31 ++++++++++++++++++++++++++++++- scripts/verify_ir.sh | 31 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/scripts/verify_asm.sh b/scripts/verify_asm.sh index 3bfeb23..a4b8ae2 100755 --- a/scripts/verify_asm.sh +++ b/scripts/verify_asm.sh @@ -10,6 +10,7 @@ fi input=$1 out_dir="test/test_result/asm" run_exec=false +input_dir=$(dirname "$input") shift while [[ $# -gt 0 ]]; do @@ -45,6 +46,8 @@ base=$(basename "$input") stem=${base%.sy} asm_file="$out_dir/$stem.s" exe="$out_dir/$stem" +stdin_file="$input_dir/$stem.in" +expected_file="$input_dir/$stem.out" "$compiler" --emit-asm "$input" > "$asm_file" echo "汇编已生成: $asm_file" @@ -58,10 +61,36 @@ if [[ "$run_exec" == true ]]; then exit 1 fi + stdout_file="$out_dir/$stem.stdout" + actual_file="$out_dir/$stem.actual.out" echo "运行 $exe ..." set +e - qemu-aarch64 -L /usr/aarch64-linux-gnu "$exe" + if [[ -f "$stdin_file" ]]; then + qemu-aarch64 -L /usr/aarch64-linux-gnu "$exe" < "$stdin_file" > "$stdout_file" + else + qemu-aarch64 -L /usr/aarch64-linux-gnu "$exe" > "$stdout_file" + fi status=$? set -e + cat "$stdout_file" echo "退出码: $status" + { + cat "$stdout_file" + if [[ -s "$stdout_file" ]] && (( $(tail -c 1 "$stdout_file" | wc -l) == 0 )); then + printf '\n' + fi + printf '%s\n' "$status" + } > "$actual_file" + + if [[ -f "$expected_file" ]]; then + if diff -u "$expected_file" "$actual_file"; then + echo "输出匹配: $expected_file" + else + echo "输出不匹配: $expected_file" >&2 + echo "实际输出已保存: $actual_file" >&2 + exit 1 + fi + else + echo "未找到预期输出文件,跳过比对: $expected_file" + fi fi diff --git a/scripts/verify_ir.sh b/scripts/verify_ir.sh index 2674e54..139ae5b 100755 --- a/scripts/verify_ir.sh +++ b/scripts/verify_ir.sh @@ -11,6 +11,7 @@ fi input=$1 out_dir="test/test_result/ir" run_exec=false +input_dir=$(dirname "$input") shift while [[ $# -gt 0 ]]; do @@ -40,6 +41,8 @@ mkdir -p "$out_dir" base=$(basename "$input") stem=${base%.sy} out_file="$out_dir/$stem.ll" +stdin_file="$input_dir/$stem.in" +expected_file="$input_dir/$stem.out" "$compiler" --emit-ir "$input" > "$out_file" echo "IR 已生成: $out_file" @@ -54,12 +57,38 @@ if [[ "$run_exec" == true ]]; then fi obj="$out_dir/$stem.o" exe="$out_dir/$stem" + stdout_file="$out_dir/$stem.stdout" + actual_file="$out_dir/$stem.actual.out" llc -filetype=obj "$out_file" -o "$obj" clang "$obj" -o "$exe" echo "运行 $exe ..." set +e - "$exe" + if [[ -f "$stdin_file" ]]; then + "$exe" < "$stdin_file" > "$stdout_file" + else + "$exe" > "$stdout_file" + fi status=$? set -e + cat "$stdout_file" echo "退出码: $status" + { + cat "$stdout_file" + if [[ -s "$stdout_file" ]] && (( $(tail -c 1 "$stdout_file" | wc -l) == 0 )); then + printf '\n' + fi + printf '%s\n' "$status" + } > "$actual_file" + + if [[ -f "$expected_file" ]]; then + if diff -u "$expected_file" "$actual_file"; then + echo "输出匹配: $expected_file" + else + echo "输出不匹配: $expected_file" >&2 + echo "实际输出已保存: $actual_file" >&2 + exit 1 + fi + else + echo "未找到预期输出文件,跳过比对: $expected_file" + fi fi