From 3b3318613a87625d2589c7fcd205d5c6cf4ccd2b Mon Sep 17 00:00:00 2001 From: mxr <> Date: Thu, 19 Mar 2026 10:20:35 +0800 Subject: [PATCH] =?UTF-8?q?test(test):=20=E6=B7=BB=E5=8A=A0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E8=84=9A=E6=9C=ACrun.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- run.sh | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100755 run.sh diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..cbd493f --- /dev/null +++ b/run.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +# 测试脚本 +# 用法: ./run_tests.sh [--verbose] [<单个测试文件>] + +COMPILER="./build/bin/compiler" +TEST_DIR="test/test_case" +RESULT_FILE="result.txt" +VERBOSE=0 + +# 解析参数 +if [[ "$1" == "--verbose" ]]; then + VERBOSE=1 + shift +fi + +# 检查编译器是否存在 +if [ ! -f "$COMPILER" ]; then + echo "错误: 编译器未找到于 $COMPILER" + echo "请先完成项目构建 (cmake 和 make)" + exit 1 +fi + +# 如果指定了单个文件,检查文件是否存在 +if [ -n "$1" ] && [ ! -f "$1" ]; then + echo "错误: 文件 $1 不存在" + exit 1 +fi + +# 清空(或创建)结果文件 +> "$RESULT_FILE" + +# 计数器 +total=0 +passed=0 +failed=0 + +echo "开始测试 SysY 解析..." +echo "输出将保存到 $RESULT_FILE" +echo "------------------------" + +# 确定测试文件列表 +if [ -n "$1" ]; then + # 使用提供的单个文件 + TEST_FILES=("$1") +else + # 收集所有 .sy 文件 + mapfile -t TEST_FILES < <(find "$TEST_DIR" -type f -name "*.sy" | sort) +fi + +for file in "${TEST_FILES[@]}"; do + ((total++)) + if [ $VERBOSE -eq 1 ]; then + echo "测试文件: $file" + else + echo -n "测试 $file ... " + fi + + echo "========== $file ==========" >> "$RESULT_FILE" + + if [ $VERBOSE -eq 1 ]; then + "$COMPILER" --emit-parse-tree "$file" 2>&1 | tee -a "$RESULT_FILE" + result=${PIPESTATUS[0]} + else + "$COMPILER" --emit-parse-tree "$file" >> "$RESULT_FILE" 2>&1 + result=$? + fi + + echo "" >> "$RESULT_FILE" + + if [ $result -eq 0 ]; then + if [ $VERBOSE -eq 0 ]; then + echo "通过" + fi + ((passed++)) + else + if [ $VERBOSE -eq 0 ]; then + echo "失败" + else + echo ">>> 解析失败: $file" + fi + ((failed++)) + fi +done + +echo "------------------------" +echo "总计: $total" +echo "通过: $passed" +echo "失败: $failed" +echo "详细输出已保存至 $RESULT_FILE" + +if [ $failed -gt 0 ]; then + exit 1 +else + exit 0 +fi