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 ✨" |
Igualmente, muy buen script! No quiero parecer mala onda jajaja, es solo que me pareció un aporte que no vendría mal.
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
Con las instrucciones que sugerí, si hay un error en make no se ejecutan los casos de prueba. Esto incluye que no esté el programa, haya un error de compilación o cualquier otro. El exit code 0 solo se da cuando compila exitosamente, por lo que en cualquier otro caso no ejecutaría ningún test, y solamente mostraría el output dado por make, donde se especifica cuál fue el error.