Repozytorium do dzielenia się testami z IPP.
Tworzenie testów polega na napisaniu funkcji main, która będzie korzystała z funkcji
zdefiniowanych w module phone_forward.h
- podobnie do przykładowego pliku
phone_forward_example.c
. Testy nie powinny korzystać z żadnych modułów poza
phone_forward.h
oraz biblioteki standardowej i powinny sprawdzać zgodność wyniku
funkcją assert()
.
Plik nagłówkowy umieszczony jest w folderze: testy_forward/phone_forward.h
.
Testy mogą być w podfolderach, jeśli bardzo ktoś chce, ale nie powinno być takiej potrzeby.
Ewentualne komentarze do testów powinny znaleźć się w funkcji main danego testu.
Wszystkie testy (plik z funkcją main) od jednego autora powinny znajdować się w jednym pliku, żeby uniknąć bałaganu.
Aby rozpocząć testowanie należy uruchomić skrypt testujący, znajdujący się w katalogu głównym repozytorium, który jako argument przyjmuje katalog z kodem źródłowym w następujący sposób:
Usage: ./test_forward.sh [options] <path/to/src>
Options:
-h show this help message
-c remove test files
-m skip cmake tests
-v run tests with valgrind
Skrypt kompiluje źródła oraz wszystkie testy, a następnie uruchamia je i mierzy czas wykonywania.
Parametry z myślnikiem są opcjonalne.
Uwaga! Testy zostały skompresowane do archiwum testy_labirynt.tar.xz
, które przechowywane jest przy użyciu narzędzia git-lfs
. Dzięki temu plik nie jest pobierany, jeśli go nie potrzebujemy (a jest duży). Żeby pobrać plik należy zainstalować pakiet git-lfs
(np. w Debianie, Ubuntu i podobnych: sudo apt install git-lfs
), a następnie w katalogu głównum repozytorium wywołać polecenie git lfs pull
.
- Zrób forka repozytorium na swoje konto na Githubie.
- Dodaj testy i oczekiwane wyjście do katalogu
testy_labirynt
, bądź podkatalogu, jeśli jest ich dużo. - Otwórz pull requesta w tym repozytorium (postaram się jak najszybciej zatwierdzić).
Aby uniknąć powtarzających się nazw testów nazwij swoje testy pierwszą literą imienia oraz nazwiskiem.
Reprezentatywny przykład. Jan Kowalski chciał dodać swoje testy na nowy, nieznany do tej pory edge case.
Sklonował repozytorium i dodał do niego pliki jkowalski.in
, jkowalski.out
oraz jkowalski.err
.
Znalazł też inne fajne testy, więc dodał jeszcze jkowalski_1.in
, jkowalski_1.out
i jkowalski_1.err
.
Bądź jak Jan Kowalski.
Ważne, żeby pliki dotyczące tych samych testów miały te same nazwy. Plik *.in
zawiera wejście, *.out
wyjście
standardowe, a *.err
wyjście stderr.
Oficjalne:
oficjalne_example
- example1 – mały labirynt dwuwymiarowy z drogą o długości 12
- example2 – mały labirynt jednowymiarowy z drogą o długości 5
- example3 – mały labirynt trójwymiarowy, ale jeden wymiar jest zdegenerowany, pozycja końcowa jest pozycją początkową
- example4 – mały labirynt trójwymiarowy z drogą o długości 4
- example5 – duży labirynt jednowymiarowy bez drogi
- error00 – ewidentnie za duży labirynt
- error10 – rozmiar labiryntu nie może być zerowy
- error26 – pozycja (początkowa) musi być w pustej kostce
- error30 – współrzędne pozycji (końcowej) muszą być dodatnie
- error40 – liczba opisująca położenie ścian ma za dużo bitów
- error50 – dane wejściowe mają za dużo linii
oficjalne
-
Oficjalne testy, które były używane przy sprawdzaniu małego zadania.
Uwaga! Niektóre z tych testów zwracją inne kody blędów niż testy oficjalne. W szczególności, gdy testy zwracają
ERROR 0
dla zbyt dużego labiryntu te testy mogą uważać ERROR 1
za poprawne wyjście (ponieważ iloczyn wymiarów jest
większy niż SIZE_MAX
). Podobnie gdy testy oficjalne zwracają ERROR 2/3
, ponieważ początek/koniec są w niepustej kostce, niektóre
z tych testów mogą zwracać ERROR 4
(niepoprawna liczba w czwartej linijce). Nie należy się tym przejmować.
Folder kwasow
- kwasowski_1 - example1 + zera wiodące w linijkach 1-3 i kodzie hex
- kwasowski_2 - example1 + ale ma spacje wiodące, między liczbami i na końcu linijki
- kwasowski_3 - example1 + tabulatory brzydkie
- kwasowski_4 - example4 + brzydkie wejście (tabulatory, spacje, zera)
- kwasowski_5 - (error) pierwsza linijka wejścia zawiera tekst
- kwasowski_6 - (error) mała litera i spacja w hexie (mała litera nie jest błędna, spacja owszem)
- kwasowski_7 - (error) wymiar labiryntu większy niż `SIZE_MAX`
- kwasowski_8 - (error) trzecia linijka zawiera za mało danych
- kwasowski_9 - (error) dane z `R` w czwartej linijce są rozdzielone na dwie linijki (czyli jest ich za mało w czwartej linijce)
- kwasowski_10 - (error) spacje między `0x`, a hexem
- kwasowski_11 - (error) niby wszystkie linijki są, ale jest dodatkowa linijka przerwy między pierwszą i drugą
Folder etiaro
- Folder 2D - losowe testy dwuwymiarowe
- Folder 3D - losowe testy trójwymiarowe
- Folder 4-8D - losowe testy 4-8-wymiarowe, niektóre dość duże (długi czas wykonywania)
Folder rentib
- Folder hex106 - losowe testy z liczbą opisującą labirynt w zapisie szesnastkowym, rozmiar labiryntu nie przekracza znacznie 10^6
- Folder hex1018 - losowe testy z liczbą opisującą labirynt w zapisie szesnastkowym, rozmiar labiryntu nie przekracza znacznie 10^18
- Folder rnd106 - losowe (potężne) testy z liczbą opisującą labirynt w formie R ..., jest wiele znaków białych, rozmiar labiryntu nie przekracza znacznie 10^6
- Folder rnd109 - losowe (potężne) testy z liczbą opisującą labirynt w formie R ..., rozmiar labiryntu nie przekracza znacznie 10^9, aby uniknąć ERROR 0 jest wiele niedużych wymiarów
Folder wojtekr
- zly01 - 3. linijka położenie większe niż wymiar
- zly02 - 2. linijka położenie większe niż wymiar
- zly03 - 2. linijka liczba za dużo
- zly04 - 3. linijka pusta
- zly05 - 2. linijka pusta
- zly06 - 4. linijka niepoprawna
- zly07 - 4. linijka liczba za dużo
- zly08 - 4. linijka liczba za mało
- zly09 - 4. linijka pusta
- zly10 - 2. linijka zawiera 0
- zly11 - 3. linijka zawiera 0
- zly12 - 5. linijka istnieje w 0x
- zly13 - 5. linijka istnieje w R
- zly14 - 4. linijka dodatkowy znak
- zly15 - 2. linijka pozycja w kostce
- zly16 - 4. linijka zawiera znak nie hexowy
- zly17 - 3. linijka pozycja w kostce
- zly18 - 4. linijka liczba R ponad UINT32_MAX
- zly19 - 4. linijka m jest zerem
- zly20 - 4. linijka spacja po x
- zly21 - 4. linijka spacja po 0
- test12 - 4. linijka liczymy liczby do r włącznie
- test13 - 4. linijka liczby mogą być zerami
Folder fuchczyk
- pfuchs1 - Brak 2. linijki (EOF w pierwszej)
- pfuchs2 - Niepoprawna 2. linijka (tylko EOF)
- pfuchs3 - Niepoprawna 1. linijka (pusta - tylko EOF)
- pfuchs4 - Brak 1. linijki (tylko EOF)
- pfuchs5 - Niepoprawna 3. linijka (pusta - tylko EOF)
- pfuchs6 - Brak 3. linijki (EOF w drugiej)
- pfuchs7 - Brak 4. linijki (EOF w trzeciej)
- pfuchs8 - Niepoprawna 4. linijka (pusta - tylko EOF)
- pfuchs9 - Pomieszanie formatów: rozpoczęcie od "0R"
Folder az
- Folder tsh_h_50mln - Kilka testów 3D o wymiarach 10000 x 10000 x 4 o tak dobranej trasie od startu do końca aby jej przebycie wymagało przejścia około 50 milionów kostek. Uwaga! Te testy zostały skompresowane, bo zajmowały w cholerę miejsca. Trzeba je najpierw rozpakować.
- Folder a - 64 testy o liczbie wymiarów 1,2, ... ,64. Rozmiar każdego wymiaru jest równy 2. W każdym są tylko puste kostki. Start i koniec tak dobrane aby długość trasy była równa liczbie wymiarów.
- Folder b - 64 testy o liczbie wymiarów 1,2, ... ,64. Rozmiar każdego wymiaru jest równy 2. W każdym są tylko puste kostki. Start i koniec w tej samej kostce.
Folder correctErrorHandling
- Proste testy sprawdzające poprawność wejśćia.
- UWAGA !!! EOF na końcu linij traktujemy jako błąd tej linii. Oraz jeśli jest ściana na pozycji strtowej, zwracamy ERROR 2, analogicznie dla pozycji końcowej. (Jeśli ktoś zwraca to jako błąd w kolejnej linijce, to powinien mieć poprawne wszystkie testy oprócz stu).
Czasy zmierzone na serwerze students
przy użyciu komendy time
(czasy dotyczą czasów real
) bez valgrinda.
Nazwa testu | Czas |
---|---|
Oficjalne | 0m1.091 |
kwasow | 0m0.250 |
etiaro/1D | 0m10.388 |
etiaro/2D | 0m10.982 |
etiaro/3D | 0m6.838 |
etiaro/4-8D | 2m11.267 |
rentib/hex106 | 0m41.980 |
rentib/hex1018 | 3m28.198 |
rentib/rnd106 | 16m3.333 |
rentib/hex109 | 109m4.448 |
wojtekr | 0m17.562 |
tsh_h_50mln | 0m56.014 |
fuchczyk | 0m0.170 |