Esta repo fue hecha para el tercer trabajo práctico de Algoritmos y Estructuras de Datos II en el primer cuatrimestre de 2023. Está basado en el pseudocódigo hecho en el segundo trabajo práctico, que a su vez (pseudo) implementa y expone las interfaces de lo especificado en el primer trabajo práctico. El objetivo de ésta, era tener separados los tests unitarios de cada componente y los tests generales de la catedra en otra repo.
En src/
están los archivos fuente de las definiciones, estructuras, implementaciones, etc. (.h
, .cpp
, .hpp
)
En tests/
están los tests.
En CMakeLists.txt
se especifican acciones para el ejecutable correrTests
con tests.cpp
. Para crearlo desde cero hay que ejecutar lo siguiente:
# En la carpeta del proyecto
# Buildear el proyecto
cmake .
# Generar el ejecutable de tests
make correrTests
# Correr los tests
./correrTests
Testeamos ésto en:
- Ubuntu 22.04 LTS (con Valgrind)
- Ubuntu 20.04.6 LTS (con Valgrind)
- Windows 10 (sin inspector de memoria)
Adicionalmente, si el sistema operativo usa bash, hay dos scripts: cleandir
y cleanbuild
.
El primero limpia todos los archivos creados por CMake y Make. El segundo primero ejecuta cleandir
y después buildea el proyecto y ejecuta los tests usando los comandos anteriores.
Hay un script más, projsetup
, que ejecutado a través de
. ./projsetup.sh
(Importante el espacio entre los puntitos)
Setea la terminal desde la que estén para que los comandos cleandir
y cleanbuild
se puedan escribir directamente, y aparte simplifica la ruta a la carpeta, que sólo ocupa espacio. Además, crea otro comando memcheck
que ejecuta Valgrind (si está instalado) sobre el ejecutable correrTests
.
¡Ésta repo cuenta con GitHub Actions! En resumen significa que todos los cambios que hagan (cada vez que pusheen) se van a testear automáticamente, sin necesidad de ejecutarlos en su máquina.
Si quieren revisarlo, en /.github/workflows/c-cpp.yml
está especificado qué debe ejecutarse cada vez que pushean un archivo. La cosa es así: Usamos CMake para crear el archivo Makefile, y usamos Make para compilar según el Makefile. Como el main
(entry point) del proyecto usa los Google Tests, entonces el archivo compilado son directamente esos tests. Lo único que hace GitHub Actions es, según el .yml
que escribí, ejecutar cmake . && make correrTests && ./correrTests
, como lo haríamos normalmente.
Objetivo: Pasar todos los tests de la cátedra sin memory leaks.
- Corroborar que los parámetros por copia no arruinen las complejidades.
- (Opcional) Anotar las complejidades
- Pasar el pseudocódigo a C++
- Escribir tests para cada componente.
- maxHeap
- minHeap
- Puesto
- Lollapatuza
- Pasar los tests personales y que cada componente no leakee.
- maxHeap
- minHeap
- Puesto
- Lollapatuza
- Pasar todos los tests de la cátedra sin que leakee.
- Encapsular y limpiar el código.
- maxHeap
- minHeap
- Puesto
- Lollapatuza