test_all.sh: configure fork test timeout

Example output:
```
$ ./test_all.sh 2>/dev/null
PASS abfrmblr
PASS AbstractKamen
PASS ags313
PASS alesj
PASS algirdasrascius
PASS anandmattikopp
PASS arjenvaneerde
FAIL armandino
TIME artpar
PASS artsiomkorzun
PASS asun
PASS baseline
PASS berry120
PASS bjhara
PASS charlibot
PASS coolmineman
PASS couragelee
PASS criccomini
PASS davecom
PASS davery22
PASS ddimtirov
PASS deemkeen
PASS ebarlas
PASS entangled90
FAIL fatroom
PASS felix19350
PASS filiphr
PASS flippingbits
PASS fragmede
PASS gabrielreid
PASS gamlerhart
PASS gnmathur
PASS hchiorean
FAIL hundredwatt
PASS imrafaelmerino
PASS isolgpus
PASS itaske
PASS iziamos
PASS japplis
PASS jgrateron
PASS jotschi
PASS kevinmcmurtrie
PASS kgeri
PASS khmarbaise
PASS kuduwa-keshavram
PASS kumarsaurav123
FAIL lawrey
PASS maeda6uiui
PASS MeanderingProgrammer
PASS merykitty
FAIL moysesb
PASS mudit-saxena
PASS obourgain
PASS padreati
PASS palmr
PASS pedestrianlove
PASS phd3
PASS raipc
PASS rby
PASS richardstartin
FAIL roman-r-m
PASS royvanrijn
PASS rprabhu
PASS santanu
PASS seijikun
PASS semotpan
PASS spullara
PASS thomaswue
PASS truelive
FAIL twobiers
PASS Ujjwalbharti
PASS yavuztas
PASS yehwankim23
FAIL yemreinci
PASS zerninv
```
This commit is contained in:
Alexander Yastrebov 2024-01-11 13:40:21 +01:00 committed by Gunnar Morling
parent 3144c9c595
commit 6761d784a2

View File

@ -33,14 +33,47 @@ if [ "$INPUT" = "-h" ] || [ "$#" -gt 1 ]; then
exit 1
fi
if [ -t 1 ]; then
GREEN='\033[0;32m'
RED='\033[0;31m'
RESET='\033[0m'
else
GREEN=""
RED=""
RESET=""
fi
WITH_TIMEOUT=""
if [ -x "$(command -v timeout)" ]; then
WITH_TIMEOUT="timeout -s KILL 5s"
elif [ -x "$(command -v gtimeout)" ]; then # MacOS from `brew install coreutils`
WITH_TIMEOUT="gtimeout -s KILL 5s"
else
echo "$0: timeout command not available, tests may run indefinitely long." 1>&2
fi
for impl in $(ls calculate_average_*.sh | sort); do
noext="${impl%%.sh}"
fork=${noext##calculate_average_}
if output=$(./test.sh "$fork" "$INPUT" 2>&1); then
echo "PASS $fork"
# ./test.sh calls ./prepare_$fork.sh e.g. to build native image
# which may take some time.
# Here we run it upfront, assuming that prepare result is cached
# to avoid timeout due to long preparation.
if [ -f "./prepare_$fork.sh" ]; then
if ! output=$("./prepare_$fork.sh" 2>&1); then
echo "$output" 1>&2
echo "FAIL $fork"
continue
fi
fi
if output=$($WITH_TIMEOUT ./test.sh "$fork" "$INPUT" 2>&1); then
echo -e "${GREEN}PASS${RESET} $fork"
elif [ $? -eq 137 ]; then
echo -e "${RED}TIME${RESET} $fork"
else
echo "FAIL $fork"
echo "$output" 1>&2
echo -e "${RED}FAIL${RESET} $fork"
fi
done