Update test*.sh to support input file pattern

This is useful for testing fork(s) against subset of test samples
This commit is contained in:
Alexander Yastrebov 2024-01-10 17:01:33 +01:00 committed by Gunnar Morling
parent 4df425fb9b
commit af269e39fc
2 changed files with 40 additions and 11 deletions

27
test.sh
View File

@ -17,22 +17,35 @@
set -euo pipefail
if [ -z "$1" ]; then
echo "Usage: test.sh <fork name>"
DEFAULT_INPUT="src/test/resources/samples/*.txt"
FORK=${1:-""}
INPUT=${2:-$DEFAULT_INPUT}
if [ "$#" -eq 0 ] || [ "$#" -gt 2 ] || [ "$FORK" = "-h" ]; then
echo "Usage: ./test.sh <fork name> [input file pattern]"
echo
echo "For each test sample matching <input file pattern> (default '$DEFAULT_INPUT')"
echo "runs <fork name> implementation and diffs the result with the expected output."
echo "Note that optional <input file pattern> should be quoted if contains wild cards."
echo
echo "Examples:"
echo "./test.sh baseline"
echo "./test.sh baseline src/test/resources/samples/measurements-1.txt"
echo "./test.sh baseline 'src/test/resources/samples/measurements-*.txt'"
exit 1
fi
if [ -f "./prepare_$1.sh" ]; then
"./prepare_$1.sh"
if [ -f "./prepare_$FORK.sh" ]; then
"./prepare_$FORK.sh"
fi
for sample in $(ls src/test/resources/samples/*.txt); do
echo "Validating calculate_average_$1.sh -- $sample"
for sample in $(ls $INPUT); do
echo "Validating calculate_average_$FORK.sh -- $sample"
rm -f measurements.txt
ln -s $sample measurements.txt
diff <("./calculate_average_$1.sh") ${sample%.txt}.out
diff <("./calculate_average_$FORK.sh") ${sample%.txt}.out
done
rm measurements.txt

View File

@ -17,14 +17,30 @@
set -euo pipefail
INPUT=${1:-""}
if [ "$INPUT" = "-h" ] || [ "$#" -gt 1 ]; then
echo "Usage: ./test_all.sh [input file pattern]"
echo
echo "For each available fork run ./test.sh <fork name> [input file pattern]."
echo "Note that optional <input file pattern> should be quoted if contains wild cards."
echo
echo "Examples:"
echo "./test_all.sh"
echo "./test_all.sh 2>/dev/null"
echo "./test_all.sh src/test/resources/samples/measurements-1.txt"
echo "./test_all.sh 'src/test/resources/samples/measurements-*.txt'"
exit 1
fi
for impl in $(ls calculate_average_*.sh | sort); do
noext="${impl%%.sh}"
name=${noext##calculate_average_}
fork=${noext##calculate_average_}
if output=$(./test.sh "$name" 2>&1); then
echo "PASS $name"
if output=$(./test.sh "$fork" "$INPUT" 2>&1); then
echo "PASS $fork"
else
echo "FAIL $name"
echo "FAIL $fork"
echo "$output" 1>&2
fi
done