Jak w prosty sposób odtwarzać opublikowane wyniki we własnych artykułach przy użyciu własnego kodu

15

Napisałem program / bibliotekę, której użyłem do uzyskania wyników w artykule. (Tutaj jest , ale moje pytanie jest ogólne). Mam testy, które regularnie uruchamiam ctest( uruchomienie zajmuje kilka minut). Aby odtworzyć niektóre tabele lub ryciny w tym artykule, muszę zbudować skrypt lub prosty program sterownika, który działa może 10 minut, czasem dłużej, więc nie chcę mieć tej części standardowego zestawu testów. Jednocześnie chcę się upewnić, że wyniki z tego artykułu mogą być:

  • powielone później
  • upewnij się, że nadal dają takie same / poprawne wyniki po dalszym rozwijaniu biblioteki

Obecnie staram się mieć mały program sterownika, który uruchamiam jako część standardowego zestawu testów, a jeśli chcę odtworzyć wyniki z tego artykułu, odkomentuję niektóre wiersze. Oczywiście nigdy nie wiem, które dokładnie linie i czy muszę poprawić niektóre inne parametry, aby uzyskać dokładnie takie same wyniki jak w artykule.

Próbowałem też mieć skrypt w języku Python, który oblicza dokładne liczby / tabele z artykułu. Taki skrypt zazwyczaj przestaje działać po aktualizacji biblioteki, ponieważ nie jest uruchamiany regularnie (zajmuje zbyt dużo czasu).

Najlepszą metodą, jaką przyszło mi do głowy, jest posiadanie przykładu Fortran (lub C / C ++), który będzie regularnie kompilowany (jako część biblioteki), ale nie będzie uruchamiany w zwykłym pakiecie testowym. W ten sposób przynajmniej wiem, że dobrze się kompiluje (i mam nadzieję, że również działa). I przetestuję prosty (mniejszy) przykład jako część standardowego zestawu testów.

Jakie są optymalne sposoby rozwiązania tego problemu?

Ondřej Čertík
źródło
2
Świetne pytanie, moją pierwszą reakcją jest to, że powinieneś podzielić swoje testy na szybkie regresje, które można szybko uruchomić i są wykonywane przed każdym zatwierdzeniem i dłuższymi regresjami, których chciałbyś użyć w ramach ciągłego wysiłku integracyjnego. Czy jesteś szczególnie w sytuacji, gdy masz tylko testy poprzedniej odmiany i jeszcze ich nie podzieliłeś?
Aron Ahmadia,
Mam wiele testów, które działają szybko, patrz tutaj: github.com/certik/hfsolver/tree/master/src/tests , ale nie wiem, jak obsługiwać rzeczywiste obliczenia dla artykułu (np. 10 minut dla każdej tabeli / liczba daje z łatwością kilka godzin ogółem).
Ondřej Čertík
2
Długie testy uruchamiaj automatycznie co noc (lub co tydzień, co miesiąc itp.) Przy użyciu serwera ciągłej integracji. Ponieważ nie musisz zwracać uwagi na nic poza wynikami, nie będziesz się przejmować, ile czasu one zajmą.
David Ketcheson

Odpowiedzi:

6

W deal.II mamy testsuite, który jest obsługiwany przez zwykły Uniksowy Makefile. Ma domyślny cel, który uruchamia wszystkie zwykłe testy, oraz osobny cel dla drogich testów. Uruchamianie każdego testu odbywa się przy użyciu ogólnej reguły, ale domyślny cel wywołuje ogólną regułę tylko w przypadku niektórych testów, a drogi cel wywołuje ją w przypadku drogich testów. Ponieważ wszystko odbywa się przy użyciu ogólnej reguły, musi być aktualne w dowolnym momencie; przestarzałe mogą być tylko listy nazw testów.

Aktualizacja: powyższy tekst był poprawny w 2012 r. Od 2014 r. Testsuite. Transakcja II opiera się na CTest, ale ogólna idea pozostaje aktualna.

Wolfgang Bangerth
źródło
Dzięki! Oto link do dokumentacji: dealii.org/7.2.0/development/testsuite.html#regression_tests i oto wynik „zwykłych testów”: dealii.org/cgi-bin/regression_quick.pl i tutaj „drogie testy”: dealii.org/cgi-bin/regression.pl , czy zrobiłem to dobrze? Więc przeprowadzasz „zwykłe testy” dla każdej wersji, a „drogie testy” tylko co kilka wersji?
Ondřej Čertík,
Nie do końca. Wyniki drogich testów zwykle nie są publikowane na stronie internetowej.
Wolfgang Bangerth,
Więc uruchamiasz je ręcznie, powiedzmy przed każdym wydaniem? Jak długo trwa bieganie? Lubię twoje podejście.
Ondřej Čertík,
1
Tak, ręcznie. Co jakiś czas, na pewno przed wydaniami. W przypadku niektórych projektów zajmują godzinę lub dłużej, ale ponieważ testują tylko niewielką część biblioteki (przeważnie testują projekty dodatkowe, aby poradzić sobie z nimi. II), nie zawsze warto lub jest możliwe uruchamianie ich przy każdej wersji.
Wolfgang Bangerth,
Czy masz jakieś równoległe testy, które można uruchomić tylko na superkomputerach, na przykład testy na dużą skalę p4est?
Aron Ahmadia