You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
2.6 KiB

#!/usr/bin/env bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
VERIFY_SCRIPT="$REPO_ROOT/scripts/verify_ir.sh"
DEFAULT_CASE_DIR="$REPO_ROOT/test/test_case/functional"
RUN_ROOT="$REPO_ROOT/output/logs/lab2_single"
RUN_NAME="single_$(date +%Y%m%d_%H%M%S)"
RUN_DIR="$RUN_ROOT/$RUN_NAME"
CASE_LOG="$RUN_DIR/case.log"
if [[ $# -lt 1 || $# -gt 2 ]]; then
echo "usage: $0 <case.sy|case_name|index> [--run]" >&2
echo "default search dir: $DEFAULT_CASE_DIR" >&2
exit 1
fi
resolve_case_file() {
local input="$1"
if [[ -f "$input" ]]; then
printf '%s\n' "$input"
return 0
fi
if [[ -f "$DEFAULT_CASE_DIR/$input" ]]; then
printf '%s\n' "$DEFAULT_CASE_DIR/$input"
return 0
fi
if [[ -f "$DEFAULT_CASE_DIR/$input.sy" ]]; then
printf '%s\n' "$DEFAULT_CASE_DIR/$input.sy"
return 0
fi
if [[ "$input" =~ ^[0-9]+$ ]]; then
local p2 p3 matched
p2="$(printf '%02d' "$input")"
p3="$(printf '%03d' "$input")"
matched="$(find "$DEFAULT_CASE_DIR" -maxdepth 1 -type f \
\( -name "${input}_*.sy" -o -name "${p2}_*.sy" -o -name "${p3}_*.sy" -o -name "${input}.sy" -o -name "${p2}.sy" -o -name "${p3}.sy" \) \
| sort | head -n 1)"
if [[ -n "$matched" ]]; then
printf '%s\n' "$matched"
return 0
fi
fi
return 1
}
SY_INPUT="$1"
if ! SY_FILE="$(resolve_case_file "$SY_INPUT")"; then
echo "cannot resolve case: $SY_INPUT" >&2
echo "tried path directly and default dir: $DEFAULT_CASE_DIR" >&2
exit 1
fi
RUN_EXEC=false
if [[ $# -eq 2 ]]; then
if [[ "$2" != "--run" ]]; then
echo "unknown option: $2" >&2
echo "usage: $0 <case.sy|case_name|index> [--run]" >&2
exit 1
fi
RUN_EXEC=true
fi
if [[ ! -f "$SY_FILE" ]]; then
echo "input file not found: $SY_FILE" >&2
exit 1
fi
if [[ ! -f "$VERIFY_SCRIPT" ]]; then
echo "verify script not found: $VERIFY_SCRIPT" >&2
exit 1
fi
COMPILER=""
for candidate in "$REPO_ROOT/build_lab2/bin/compiler" "$REPO_ROOT/build/bin/compiler"; do
if [[ -x "$candidate" ]]; then
COMPILER="$candidate"
break
fi
done
if [[ -z "$COMPILER" ]]; then
echo "compiler not found. expected one of:" >&2
echo " $REPO_ROOT/build_lab2/bin/compiler" >&2
echo " $REPO_ROOT/build/bin/compiler" >&2
echo "please build first, then rerun this script." >&2
exit 1
fi
mkdir -p "$RUN_DIR"
echo "Using compiler: $COMPILER"
echo "Case: $SY_FILE"
echo "Run directory: $RUN_DIR"
if [[ "$RUN_EXEC" == true ]]; then
"$VERIFY_SCRIPT" "$SY_FILE" "$RUN_DIR" --run > "$CASE_LOG" 2>&1
else
"$VERIFY_SCRIPT" "$SY_FILE" "$RUN_DIR" > "$CASE_LOG" 2>&1
fi
echo "PASS"
echo "log: $CASE_LOG"