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