Escribí un programa / biblioteca que usé para obtener resultados en un artículo. (Aquí está , pero mi pregunta es general). Tengo pruebas que ejecuto regularmente ctest
(me toma unos minutos ejecutarlas). Para reproducir algunas tablas o figuras en el artículo, tengo que construir un script o un programa de controlador simple, que ejecute unos 10 minutos, a veces más, por lo que no quiero tener esta parte del conjunto de pruebas regular. Al mismo tiempo, quiero asegurarme de que los resultados del artículo puedan ser:
- reproducido más tarde
- asegúrese de que sigan dando los mismos resultados / correctos después de seguir desarrollando la biblioteca
Actualmente trato de tener un pequeño programa de controlador que ejecuto como parte del conjunto de pruebas regular, y si quiero reproducir los resultados del artículo, descomento algunas líneas allí. Por supuesto, nunca sé qué líneas exactas y si tengo que ajustar algunos otros parámetros para obtener exactamente los mismos resultados que en el artículo.
También intenté tener un script de Python que calcule las figuras / tablas exactas del artículo. Dicha secuencia de comandos generalmente deja de funcionar después de una actualización de la biblioteca, porque no se ejecuta de forma regular (lleva demasiado tiempo).
El mejor método que se me ocurrió es tener un ejemplo de Fortran (o C / C ++), que se compilará regularmente (como parte de la biblioteca), pero no se ejecutará en el conjunto de pruebas regular. De esa manera, al menos sé que se compila bien (y con suerte también se ejecuta). Y probaré algún ejemplo simple (más pequeño) como parte de un conjunto de pruebas regular.
¿Cuáles son las formas óptimas de manejar este problema?
fuente
Respuestas:
En deal.II, tenemos un paquete de prueba que es manejado por un Unix Makefile regular. Tiene un objetivo predeterminado que ejecuta todas las pruebas habituales y un objetivo separado para pruebas costosas. La ejecución de cada prueba se realiza mediante una regla genérica, pero el objetivo predeterminado llama a la regla genérica solo para ciertas pruebas y el objetivo costoso lo llama para las pruebas costosas. Como todo se hace utilizando una regla genérica, debe estar actualizado en cualquier momento; lo que puede quedar desactualizado solo puede ser la lista de nombres de pruebas.
Actualización: el texto anterior era correcto en 2012. Desde 2014, el paquete de pruebas deal.II se basa en CTest, pero la idea general sigue siendo válida.
fuente
p4est
?