Last active
March 1, 2023 17:26
-
-
Save raxelo/fc05f867e237a91a73363f144bc478bc to your computer and use it in GitHub Desktop.
Bash script para realizar y comprobar los tests de las tareas de laboratorio. Prog 2, Fing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
TEST_DIR="./test" | |
RUNNABLE="./principal" | |
if [ "$1" == "--valgrind" ] | |
then | |
RUNNABLE="timeout --preserve-status 4 valgrind --error-exitcode=52 -q --leak-check=full $RUNNABLE" | |
fi | |
if ! [ -d "$TEST_DIR" ] | |
then | |
echo "❌ No pudo encontrarse el directorio './test'. Terminando script." | |
exit | |
fi | |
if ! [[ -f "./principal" ]] | |
then | |
echo "❌ No pudo encontrarse el ejecutable './principal'. Terminando script." | |
exit | |
fi | |
if ! [[ -x "./principal" ]] | |
then | |
echo "❌ './principal' no es un archivo ejecutable. Terminando script." | |
exit | |
fi | |
correctAmount=0 | |
incorrectAmount=0 | |
for TEST_INPUT_NAME in ./test/*.in; do | |
TEST_NAME="$(echo "$TEST_INPUT_NAME" | cut -d"/" -f3 | cut -d "." -f1)" # for example: "mapping" | |
TEST_OUTPUT_FILE="${TEST_DIR}/${TEST_NAME}.sal" # for example: "./test/mapping.sal" | |
TEST_EXPECTED_OUTPUT_FILE="${TEST_DIR}/${TEST_NAME}.out" # for example: "./test/mapping.out" | |
$RUNNABLE < "$TEST_INPUT_NAME" > "$TEST_OUTPUT_FILE" | |
exitcode="$?" | |
if [ "$exitcode" -eq 52 ] | |
then | |
echo "❌ $TEST_NAME MAL!" | |
echo "❌ Posible error con el manejo de memoria encontrado mientras ejecutamos el test \"$TEST_INPUT_NAME\"! (leer output de valgrind)" | |
exit | |
elif [ "$exitcode" -ne 0 ] | |
then | |
echo "❌ $TEST_NAME MAL!" | |
echo "❌ El programa terminó con el exit code $exitcode mientras ejecutaba el test \"$TEST_INPUT_NAME\"" | |
exit | |
fi | |
output="."$(echo "$fileName" | cut -d "." -f2)".out" | |
diff=$(diff -y --suppress-common-lines "$TEST_EXPECTED_OUTPUT_FILE" "$TEST_OUTPUT_FILE") | |
if [ -z "$diff" ] | |
then | |
echo "✅ $TEST_NAME OK!" | |
((correctAmount+=1)) | |
fi | |
if [ -n "$diff" ] | |
then | |
echo -e "\n" | |
echo "❌ $TEST_NAME MAL!" | |
((incorrectAmount+=1)) | |
echo "Mostrando salida esperada (izquierda) y salida obtenida (derecha):" | |
echo "$diff" | |
echo "" | |
fi | |
done | |
echo "" | |
if [ "$1" == "--valgrind" ] | |
then | |
echo "❗ Test de memoria con valgrind realizado." | |
else | |
echo "❗ Para realizar el test de memoria con valgrind, ejecuta el script de la siguiente manera:" | |
echo "❗ './tester.sh --valgrind'" | |
fi | |
echo "" | |
echo "Tests aprobados: $correctAmount" | |
echo "Tests reprobados: $incorrectAmount" | |
echo "" | |
echo "Autor: github.com/raxelo ✨" |
Estoy de acuerdo con lo que decís, me parece que el debate aporta y está perfecto, lo veo como algo muy bueno 😃
Yo pienso que ambos enfoques son válidos, aunque mi enfoque favorito es desacoplar las responsabilidades y así darle mayor libertad al usuario (compilen manualmente, con make o cmake el resultado es el mismo).
Gracias tu feedback ✌
✨ Ahora permite realizar pruebas con valgrind si se ejecuta el script con --valgrind
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Igualmente, muy buen script! No quiero parecer mala onda jajaja, es solo que me pareció un aporte que no vendría mal.