[backend] debugging array
This commit is contained in:
@ -1,14 +1,15 @@
|
||||
#!/bin/bash
|
||||
|
||||
# runit.sh - 用于编译和测试 SysY 程序的脚本
|
||||
# 此脚本位于 mysysy/test_script/
|
||||
# 此脚本应该位于 mysysy/test_script/
|
||||
|
||||
# 定义相对于脚本位置的目录
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)"
|
||||
TESTDATA_DIR="${SCRIPT_DIR}/../testdata"
|
||||
BUILD_BIN_DIR="${SCRIPT_DIR}/../build/bin"
|
||||
LIB_DIR="${SCRIPT_DIR}/../lib"
|
||||
TMP_DIR="/home/ladev987/paraComp/debug/share_folder"
|
||||
# TMP_DIR="${SCRIPT_DIR}/tmp"
|
||||
TMP_DIR="/home/ladev987/paraComp/debug/share_folder/tmp"
|
||||
|
||||
# 定义编译器和模拟器
|
||||
SYSYC="${BUILD_BIN_DIR}/sysyc"
|
||||
@ -27,6 +28,7 @@ show_help() {
|
||||
echo " -e, --executable 编译为可执行文件,运行可执行文件,并比较输出(如果存在 .in/.out 文件)。"
|
||||
echo " 如果 .out 文件的最后一行是整数,则将其视为期望的返回值进行比较,其余内容视为期望的标准输出。"
|
||||
echo " 如果 .out 文件的最后一行不是整数,则将整个 .out 文件视为期望的标准输出进行比较。"
|
||||
echo " 输出比较时会忽略行尾多余的换行符。"
|
||||
echo " 如果不存在 .in/.out 文件,则打印返回码。"
|
||||
echo " -c, --clean 清理 'tmp' 目录下的所有生成文件。"
|
||||
echo " -h, --help 显示此帮助信息并退出。"
|
||||
@ -120,7 +122,7 @@ find "${TESTDATA_DIR}" -name "*.sy" | while read sy_file; do
|
||||
echo " 生成的可执行文件: ${executable_file}"
|
||||
|
||||
# 步骤 3, 4, 5: 执行编译后的文件并比较/报告结果
|
||||
echo " 正在执行: ${QEMU_RISCV64} \"${executable_file}\""
|
||||
echo " 正在执行: ${QEMU_RISCV664} \"${executable_file}\""
|
||||
|
||||
# 检查是否存在 .out 文件
|
||||
if [ -f "${output_reference_file}" ]; then
|
||||
@ -162,17 +164,14 @@ find "${TESTDATA_DIR}" -name "*.sy" | while read sy_file; do
|
||||
echo -e "\e[31m 返回码测试失败: ${sy_file} 的返回码不匹配。期望: ${EXPECTED_RETURN_CODE}, 实际: ${ACTUAL_RETURN_CODE}\e[0m"
|
||||
fi
|
||||
|
||||
# 比较实际标准输出与期望标准输出
|
||||
# 注意:实际输出文件可能包含一个额外的换行符,如果程序没有putch(10)
|
||||
# 确保比较时,如果期望输出为空,且实际输出也为空或仅包含空白字符,则视为匹配
|
||||
# 这里我们假设 output_actual_file 已经包含程序的所有标准输出
|
||||
diff -q "${output_actual_file}" "${EXPECTED_STDOUT_FILE}" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "\e[32m 标准输出测试成功: 输出与 ${sy_file} 的参考输出匹配\e[0m"
|
||||
# 比较实际标准输出与期望标准输出,忽略文件末尾的换行符差异
|
||||
# 使用 sed 命令去除文件末尾的所有换行符,再通过 diff 进行比较
|
||||
if diff -q <(sed ':a;N;$!ba;s/\n*$//' "${output_actual_file}") <(sed ':a;N;$!ba;s/\n*$//' "${EXPECTED_STDOUT_FILE}") >/dev/null 2>&1; then
|
||||
echo -e "\e[32m 标准输出测试成功: 输出与 ${sy_file} 的参考输出匹配 (忽略行尾换行符差异)\e[0m"
|
||||
else
|
||||
echo -e "\e[31m 标准输出测试失败: ${sy_file} 的输出不匹配\e[0m"
|
||||
echo " 差异:"
|
||||
diff "${output_actual_file}" "${EXPECTED_STDOUT_FILE}"
|
||||
echo " 差异 (可能包含行尾换行符差异):"
|
||||
diff "${output_actual_file}" "${EXPECTED_STDOUT_FILE}" # 显示原始差异以便调试
|
||||
fi
|
||||
|
||||
else
|
||||
@ -192,14 +191,13 @@ find "${TESTDATA_DIR}" -name "*.sy" | while read sy_file; do
|
||||
echo -e "\e[33m警告: 可执行文件 ${sy_file} 以非零状态 ${EXEC_STATUS} 退出 (纯输出比较模式)。请检查程序逻辑或其是否应返回此状态。\e[0m"
|
||||
fi
|
||||
|
||||
# 比较实际输出与参考输出
|
||||
diff -q "${output_actual_file}" "${output_reference_file}" >/dev/null 2>&1
|
||||
if [ $? -eq 0 ]; then
|
||||
echo -e "\e[32m 成功: 输出与 ${sy_file} 的参考输出匹配\e[0m"
|
||||
# 比较实际输出与参考输出,忽略文件末尾的换行符差异
|
||||
if diff -q <(sed ':a;N;$!ba;s/\n*$//' "${output_actual_file}") <(sed ':a;N;$!ba;s/\n*$//' "${output_reference_file}") >/dev/null 2>&1; then
|
||||
echo -e "\e[32m 成功: 输出与 ${sy_file} 的参考输出匹配 (忽略行尾换行符差异)\e[0m"
|
||||
else
|
||||
echo -e "\e[31m 失败: ${sy_file} 的输出不匹配\e[0m"
|
||||
echo " 差异:"
|
||||
diff "${output_actual_file}" "${output_reference_file}"
|
||||
echo " 差异 (可能包含行尾换行符差异):"
|
||||
diff "${output_actual_file}" "${output_reference_file}" # 显示原始差异以便调试
|
||||
fi
|
||||
fi
|
||||
elif [ -f "${input_file}" ]; then
|
||||
|
||||
Reference in New Issue
Block a user