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.
63 lines
1.0 KiB
63 lines
1.0 KiB
#!/usr/bin/bash |
|
|
|
set -euo pipefail |
|
|
|
cd "$(dirname "${BASH_SOURCE[0]}")" |
|
|
|
run_solution() { |
|
if [ -d "$solution" ]; then |
|
runfile=$solution/run.sh |
|
[ -f "$runfile" ] || { echo "Error: $runfile not found" >&2; exit 1; } |
|
"$runfile" "$input" |
|
else |
|
case "$(basename "$solution")" in |
|
*.hs) |
|
runhaskell -icommon "$solution" < "$input" |
|
;; |
|
*.py) |
|
python "$solution" < "$input" |
|
;; |
|
*) |
|
echo "Error: Unknown solution type: $solution" >&2 |
|
exit 1 |
|
;; |
|
esac |
|
fi |
|
} |
|
|
|
shopt -s dotglob nullglob |
|
|
|
for day in day*; do |
|
input=data/$day.input |
|
expected=data/$day.expected |
|
for solution in "$day"/*; do |
|
echo -n "$solution... " |
|
|
|
case "${solution##*/}" in |
|
example*|.*) |
|
echo SKIP |
|
continue |
|
esac |
|
|
|
solution_output=$(mktemp) |
|
trap "rm -f '$solution_output'" EXIT |
|
run_solution "$solution" > "$solution_output" |
|
|
|
if ! diff -u "$expected" "$solution_output"; then |
|
echo FAIL |
|
rv=$? |
|
case "$rv" in |
|
1) |
|
exit 2 |
|
;; |
|
*) |
|
exit 1 |
|
;; |
|
esac |
|
else |
|
echo ok |
|
fi |
|
|
|
rm "$solution_output" |
|
done |
|
done
|
|
|