diff --git a/test_all.sh b/test_all.sh new file mode 100644 index 0000000..36c5d4d --- /dev/null +++ b/test_all.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +# 批量测试脚本 +# 遍历 test/test_case 目录下所有的 .sy 文件,并验证解析是否成功 + +if [ ! -f "./build/bin/compiler" ]; then + echo "Compiler executable not found at ./build/bin/compiler. Please build the project first." + exit 1 +fi + +FAIL_COUNT=0 +PASS_COUNT=0 +FAILED_FILES=() + +echo "开始批量测试解析..." +echo "=========================================" + +# 查找所有 .sy 文件并进行测试 +while IFS= read -r file; do + # 运行解析器,将正常输出重定向到 /dev/null,保留错误输出用于判断 + ./build/bin/compiler --emit-parse-tree "$file" > /dev/null 2>&1 + + if [ $? -ne 0 ]; then + echo "❌ 解析失败: $file" + FAIL_COUNT=$((FAIL_COUNT+1)) + FAILED_FILES+=("$file") + else + echo "✅ 解析成功: $file" + PASS_COUNT=$((PASS_COUNT+1)) + fi +done < <(find test/test_case -type f -name "*.sy" | sort) + +echo "=========================================" +echo "测试完成!" +echo "成功: $PASS_COUNT" +echo "失败: $FAIL_COUNT" + +if [ $FAIL_COUNT -ne 0 ]; then + echo "失败的文件列表:" + for f in "${FAILED_FILES[@]}"; do + echo " - $f" + done + exit 1 +else + echo "🎉 所有测试用例均解析成功!" + exit 0 +fi