Bash Debuger/Tester programów
-
- Posty: 21
- Rejestracja: 12 kwietnia 2009, 20:10
- Lokalizacja: Gdynia
Bash Debuger/Tester programów
Witam,
mam następujący pomysł:
patrząc na działanie STOS-u (Platforma testowa na PG) w godzinach szczytu pomyślałem czy by w bashu nie napisać swojego.
i pojawiły się problemy .
Plik in składa się w ogólności z danych różnej długości (ilość linii) wiec wpadłem na pomysł by program testowany przy pomocy strumienia błędów odpowiadał scriptowi ile ma podać.
plik out podobnie może zawierać jedną albo więcej lini na test.
I teraz o co chodzi. chcę napisać tak script w bashu by wkładał w mój program pliki in (stdin) i jeśli wyjście programu będzie się różnić od spodziewanego to wyda polecenie debug (poda na standardowe wejście programu np)
no niby proste 2 pętelki jakiś cat head tail ale... nie zadziała to jak chce bo nie mogę przerwać wykonania mojego programiku.
Mam nadzieje że wypowiedziałem się zrozumiale.
ps. da sie z basha pluć na stderr ?
mam następujący pomysł:
patrząc na działanie STOS-u (Platforma testowa na PG) w godzinach szczytu pomyślałem czy by w bashu nie napisać swojego.
i pojawiły się problemy .
Plik in składa się w ogólności z danych różnej długości (ilość linii) wiec wpadłem na pomysł by program testowany przy pomocy strumienia błędów odpowiadał scriptowi ile ma podać.
plik out podobnie może zawierać jedną albo więcej lini na test.
I teraz o co chodzi. chcę napisać tak script w bashu by wkładał w mój program pliki in (stdin) i jeśli wyjście programu będzie się różnić od spodziewanego to wyda polecenie debug (poda na standardowe wejście programu np)
no niby proste 2 pętelki jakiś cat head tail ale... nie zadziała to jak chce bo nie mogę przerwać wykonania mojego programiku.
Mam nadzieje że wypowiedziałem się zrozumiale.
ps. da sie z basha pluć na stderr ?
Co do pierwszego, to nie, nie wypowiedziałeś się zrozumiale. Ni w ząb nie wiem co chcesz zrobić, poza tym, że chcesz napisać jakiś skrypt.
Co do drugiego, to:
Co do drugiego, to:
Kod: Zaznacz cały
echo test >&2
Ja mniej więcej zrozumiałem o co biega, chodzi zapewne o testowanie algorytmów w postaci takiej, że mamy pewien zbiór testów (plików test.in i test.out). Przepuszczamy plik test.in przez nasz program (dajemy go na stdin), nasz program na stdout wypluwa jakieś wyniki w zależności od testów. Otrzymane wyniki testujemy z przewidywanymi z pliku test.out. Jeżeli jakiś się nie zgadza do wypisujemy błąd ala "Program nie wykonał poprawnie testów "test".
Przykład: Program dodający dwie liczby
test.in:
test.out:
Nie rozumiem tylko o co dokładnie chodzi z tym przekazywaniem czegoś do(?) programu przez stderr? Chcesz swojemu programowi sygnalizować błędy? Btw. skrypty testujące (napisane w bashu) do tego typu zadań są do pobrania z github, jest ich conajmniej parę.
Przykład: Program dodający dwie liczby
test.in:
Kod: Zaznacz cały
2
2
Kod: Zaznacz cały
4
-
- Posty: 21
- Rejestracja: 12 kwietnia 2009, 20:10
- Lokalizacja: Gdynia
Do takich rzeczy jakie opisujesz @wytrzeszcz stosuje się nie pliki *.in i *.out a specjalnie do tego celu napisane programy testujące. Napisz sobie program który forknie się tuż po uruchomieniu, przekieruje odpowiednio swoje stdin i stdout, albo stwórz własne łącza (man dup, man dup2, man fork) i wówczas możesz badać co zostaje wprowadzone do procesu-dziecka i w razie niepowodzenia któregoś z testów zareagować na to odpowiednio.
-
- Posty: 21
- Rejestracja: 12 kwietnia 2009, 20:10
- Lokalizacja: Gdynia
Fork i pipeline można robić również w czystym bashu. Wymianę danych można robić przez łącza nazwane (fifo np.).
http://stackoverflow.com/questions/3096 ... ec-in-bash
http://www.linuxjournal.com/content/usi ... fifos-bash
http://pl.wikipedia.org/wiki/Potok_%28Unix%29
http://stackoverflow.com/questions/3096 ... ec-in-bash
http://www.linuxjournal.com/content/usi ... fifos-bash
http://pl.wikipedia.org/wiki/Potok_%28Unix%29
-
- Posty: 21
- Rejestracja: 12 kwietnia 2009, 20:10
- Lokalizacja: Gdynia
Wyjdę na debila pewno ale mam takie coś:
i to nie chce działać co robię źle?
PS cały script tu:
http://kuba.witominska.net/jakub/so/projekt.sh
Kod: Zaznacz cały
[...]
out="$katalog/out" # wyjcie
fifo="$katalog/fifo" # wejscie
mkfifo $fifo # nawet powstalo (potok nazwany)
touch $out
[...] #konfig innych rzeczy
./a.out <$fifo >$out & pid=$!
[...] # wyciąganie inputa linia po nili
echo "$liniain" >> $fifo
[...] #operacje porównania outów itd
PS cały script tu:
http://kuba.witominska.net/jakub/so/projekt.sh