Eu escrevi um programa / biblioteca que usei para obter resultados em um artigo. (Aqui está , mas minha pergunta é geral.) Eu tenho testes que eu executo regularmente usando ctest
(leva alguns minutos para executar). Para reproduzir algumas tabelas ou figuras no artigo, eu tenho que construir um script ou um programa de driver simples, que execute talvez 10 minutos, às vezes mais, para que eu não queira ter essa parte do conjunto de testes regular. Ao mesmo tempo, quero garantir que os resultados do artigo possam ser:
- reproduzido mais tarde
- verifique se eles ainda fornecem os mesmos / resultados corretos depois de eu continuar desenvolvendo a biblioteca
Atualmente, tento ter um pequeno programa de driver que execute como parte do conjunto de testes regular e, se quiser reproduzir os resultados do artigo, descomente algumas linhas. Obviamente, nunca sei quais linhas exatas e se preciso ajustar alguns outros parâmetros para obter exatamente os mesmos resultados que no artigo.
Eu também tentei ter um script Python que calcula as figuras / tabelas exatas do artigo. Esse script geralmente para de funcionar após uma atualização na biblioteca, porque não está sendo executado regularmente (leva muito tempo).
O melhor método que me ocorreu é ter um exemplo de Fortran (ou C / C ++), que será compilado regularmente (como parte da biblioteca), mas não executado no conjunto de testes regular. Dessa forma, pelo menos eu sei que ele compila bem (e, portanto, esperamos que também seja executado). E testarei um exemplo simples (menor) como parte de um conjunto de testes regular.
Quais são as melhores maneiras de lidar com esse problema?
fonte
Respostas:
Em deal.II, temos um testinguite que é dirigido por um Unix Makefile comum. Ele tem um destino padrão que executa todos os testes usuais e um destino separado para testes caros. A execução de cada teste é feita usando uma regra genérica, mas o destino padrão chama a regra genérica apenas para determinados testes e o destino caro a chama para os testes caros. Como tudo é feito usando uma regra genérica, ela deve estar atualizada a qualquer momento; o que pode ficar desatualizado pode ser apenas a lista de nomes de testes.
Atualização: o texto acima estava correto em 2012. Desde 2014, o deal.II testsuite é baseado no CTest, mas a ideia geral permanece válida.
fonte
p4est
?