|
|
|
|
@ -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
|