#!/usr/bin/env bash # Checks every task is a real test: verify.sh must fail on the untouched repo # and pass once solution.sh has been applied. A task whose verifier passes # before the agent does anything measures nothing. set -uo pipefail cd "$(dirname "$0")/.." tasks_dir=evals/tasks fails=0 for dir in "$tasks_dir"/*/; do name=$(basename "$dir") task_abs=$(cd "$dir" && pwd) work=$(mktemp -d "/tmp/selftest-$name-XXXX") export WORK_DIR="$work" TASK_DIR="$task_abs" AGENT_ANSWER_FILE="$work/.agent-answer.txt" if ! out=$(cd "$work" && bash "$task_abs/setup.sh" 2>&1); then printf '%-26s SETUP FAILED\n%s\n' "$name" "$out"; fails=$((fails+1)); rm -rf "$work"; continue fi before_out=$(cd "$work" && bash "$task_abs/verify.sh" 2>&1); before=$? (cd "$work" && bash "$task_abs/solution.sh" >/dev/null 2>&1) after_out=$(cd "$work" && bash "$task_abs/verify.sh" 2>&1); after=$? case "$before:$after" in 0:*) printf '%-26s BAD: verifier passes before any work\n' "$name"; fails=$((fails+1));; *:0) printf '%-26s ok (fails unsolved, passes solved)\n' "$name";; *:*) printf '%-26s BAD: verifier still fails after the reference solution\n%s\n' "$name" "$after_out"; fails=$((fails+1));; esac rm -rf "$work" done if [ "$fails" -ne 0 ]; then echo; echo "$fails task(s) are not measuring anything"; exit 1; fi echo; echo "all tasks verified"