|
|
|
|
@ -115,31 +115,38 @@ for test_file in "${test_files[@]}"; do
|
|
|
|
|
rm -f "$tmp_out"
|
|
|
|
|
|
|
|
|
|
if [ -f "$expected_file" ]; then
|
|
|
|
|
expected=$(cat "$expected_file" | tr -d '\n')
|
|
|
|
|
expected_output=$(sed '$d' "$expected_file" | tr -d '\n')
|
|
|
|
|
expected_exit_code=$(tail -1 "$expected_file")
|
|
|
|
|
# 先比较输出
|
|
|
|
|
output_match=true
|
|
|
|
|
if [ "$program_output" != "$expected_output" ]; then
|
|
|
|
|
output_match=false
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 再比较退出码
|
|
|
|
|
exit_match=true
|
|
|
|
|
if [ $exit_code -ne "$expected_exit_code" ] 2>/dev/null; then
|
|
|
|
|
exit_match=false
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if [[ "$expected" =~ ^[0-9]+$ ]] && [ "$expected" -ge 0 ] && [ "$expected" -le 255 ] && [ -z "$program_output" ]; then
|
|
|
|
|
# 期望退出码(且没有输出)
|
|
|
|
|
if [ $exit_code -eq "$expected" ] 2>/dev/null; then
|
|
|
|
|
echo -e " ${GREEN}✓${NC} $relative_path (退出码: $exit_code)"
|
|
|
|
|
((pass_run++))
|
|
|
|
|
else
|
|
|
|
|
echo -e " ${RED}✗${NC} $relative_path (退出码: 期望 $expected, 实际 $exit_code)"
|
|
|
|
|
((fail_run++))
|
|
|
|
|
fi
|
|
|
|
|
if [ "$output_match" = true ] && [ "$exit_match" = true ]; then
|
|
|
|
|
echo -e " ${GREEN}✓${NC} $relative_path"
|
|
|
|
|
((pass_run++))
|
|
|
|
|
else
|
|
|
|
|
# 期望输出内容
|
|
|
|
|
if [ "$program_output" = "$expected" ]; then
|
|
|
|
|
echo -e " ${GREEN}✓${NC} $relative_path (输出匹配)"
|
|
|
|
|
((pass_run++))
|
|
|
|
|
else
|
|
|
|
|
echo -e " ${RED}✗${NC} $relative_path (输出不匹配: 期望 '$expected', 实际 '$program_output')"
|
|
|
|
|
((fail_run++))
|
|
|
|
|
fi
|
|
|
|
|
echo -ne " ${RED}✗${NC} $relative_path"
|
|
|
|
|
[ "$output_match" = false ] && echo -n " (输出不匹配: 期望 '$expected_output', 实际 '$program_output')"
|
|
|
|
|
[ "$exit_match" = false ] && echo -n " (退出码不匹配: 期望 $expected_exit_code, 实际 $exit_code)"
|
|
|
|
|
echo
|
|
|
|
|
((fail_run++))
|
|
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
# 没有期望文件
|
|
|
|
|
echo -e " ${GREEN}✓${NC} $relative_path (退出码: $exit_code, 输出: '$program_output')"
|
|
|
|
|
((pass_run++))
|
|
|
|
|
if [ $exit_code -eq 0 ]; then
|
|
|
|
|
echo -e " ${GREEN}✓${NC} $relative_path (退出码: $exit_code, 输出: '$program_output')"
|
|
|
|
|
((pass_run++))
|
|
|
|
|
else
|
|
|
|
|
echo -e " ${RED}✗${NC} $relative_path (退出码: $exit_code, 输出: '$program_output')"
|
|
|
|
|
((fail_run++))
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|