*****************************************************************
AUTOMATSKI TESTER RADOVA - Autor: Aleksandar Kartelj (2014) v1.5
*****************************************************************

Tester je napisan u cistom Bash script jeziku. 

Struktura direktorijuma je sledeca:
	a) test1.sh
	b) testn.sh
	c) testall.sh
	d) primer_upotrebe
	e) UPUTSTVO_ZA_UPOTREBU.txt (ovaj fajl)
	f) tofile.sh - pomocni program

Napomena: Moguce je da pri pokretanju skriptova, sistem ispise nesto poput "permission denied"
ili slicno. Jedan od razloga moze da bude sto .sh fajlovima nisu data prava za izvrsavanje.
Da bi se to postiglo, jednostavno uradite sledece:

chmod +x test1.sh
chmod +x testn.sh
chmod +x testall.sh
chmod +x tofile.sh

**********************************************************************
test1.sh 
**********************************************************************
Sluzi za testiranje samo jedne C datoteke sa jednim test primerom.
Da bi istestirali njegovo ponasanje probajte da ukucate:

>./test1.sh "primer_upotrebe/radovi/Student1/1.c" k{1k} u{4u} i{5i} 
>DA

ili 

>./test1.sh "primer_upotrebe/radovi/Student1/1.c" k{4k} u{5u} i{5i}  
>NE

Program dat u primeru uzima jedan broj kao argument komandne linije, a 
drugi sa standardnog ulaza i rezultat ispisuje na standardni izlac. 

Podaci koji se upisu u region k{...k} su argumenti komandne linije.
Oni koji se upisu izmedju u{...u} su argumenti standardnog ulaza, 
i konacno izmedju i{...i} je dat ocekivani izlaz. 

U prvom slucaju je vracen odgovor DA jer je 1+4=5, a u drugom NE jer 4+5!=5



**********************************************************************
testn.sh
**********************************************************************
Ovaj izvrsni skript sluzi da se istestira ceo niz test primera za zadatu C datoteku. Npr.:

>./testn.sh primer_upotrebe/radovi/Student1/1.c primer_upotrebe/1.t 
>/home/aca/test2/tester, primer_upotrebe/radovi/Student1/1.c, el:1, pts:8, uk:8

Ovde se vidi da je za direktoriju Student1, program 1.c prosao eliminacioni
test primer i preostalih 8 test primera. Pritom su test primeri zadati u
fajlu primer_upotrebe/1.t koji izgleda ovako:

k{19k} u{644u} i{663i}
|
k{20k} u{645u} i{665i}
|
k{23k} u{642u} i{665i}
|
k{19k} u{100u} i{119i}
|
k{19k} u{-21u} i{-2i}
|
k{19k} u{-9u} i{10i}
|
k{19k} u{0u} i{19i}
|
k{19k} u{-7u} i{12i}
|
k{0k} u{644u} i{644i}
|

Prvi u nizu test primera je eliminacioni (podesava se kao treci parametar u pozivu skripte), 
a ostali se broje u poene. 

Ukoliko se kao poslednji argument pri pozivu ubaci opcija -v, tester ce prikazivati
u toku izvrsavanja koji su test primeri prosli a koji nisu. 

>./testn.sh primer_upotrebe/radovi/Student1/1.c primer_upotrebe/1.t 1 -v
>1 : DA
>2 : DA
>3 : DA
>4 : DA
>5 : DA
>6 : DA
>7 : DA
>8 : DA
>9 : DA
>/home/aca/test2/tester, primer_upotrebe/radovi/Student1/1.c, el:1, pts:8, uk:8

**********************************************************************
testall.sh
**********************************************************************
Ovaj skript testira kompletan direktorijum sa radovima veceg broja studenata. 
Npr. ako hocemo da proverimo sve radove u direktorijumu primer_upotrebe/radovi,
mozemo to uciniti na sledeci nacin:

>./testall.sh primer_upotrebe/radovi/ "1.c" primer_upotrebe/1.t 1
/home/aca/test2/tester/primer_upotrebe/radovi/Student1, 1.c, el:1, pts:8, uk:8
/home/aca/test2/tester/primer_upotrebe/radovi/Student2, 1.c, el:1, pts:8, uk:8

Ovde vidimo da su oba studenta imali tacan zadatak 1.c. Rezultati se upisuju
u datoteku rezultati.csv koja se nalazi u aktivnom direktorijumu, tj. direktorijumu
iz kog se pokrece ./testall.sh

Ukoliko je za kompilaciju potrebno ukljuciti math biblioteku, poziv se menja u:
>./testall.sh primer_upotrebe/radovi/ "1.c -lm" primer_upotrebe/1.t

Ipak, sa opcijom -lm treba biti pazljiv, jer neki kompajleri implicitno ukljucuju
-lm, pa dodatno ukljucivanje napravi problem, i pregledac onda ne radi korektno.

Takodje se umesto jedne .c datoteke moze upisati vise datoteka, npr:
>./testall.sh primer_upotrebe/radovi/ "1.c mojabiblioteka.c -lm" primer_upotrebe/1.t 1

*********************************************************************
RAD SA DATOTEKAMA
*********************************************************************

Postoji podrska i za testiranje programa koji koriste datoteke: da u njih
pisu,ili da iz njih citaju. Trenutno je postavljeno da moze biti najvise
5 ulaznih datoteka, i najvise 2 izlazne. 

Drugi zadatak u direktorijumu primer_upotrebe predstavlja jedan primer u kojem
se koristi ulazna i izlazna datoteka, kao i standardni izlaz. U zadatku je potrebno
otvoriti ulaznu datoteku, prepisati sve njene karaktere u izlaznu, a na standardni
izlaz ispisati sva slova koja se pojavljuju u ulaznoj datoteci. 

Primer poziva za jedan test primer je sledeci:

>./test1.sh primer_upotrebe/radovi/Student1/2.c "uf1[ulazni.txt]{test iz P1 uf1} if1[izlazni.txt]{test iz P1 if1} i{ 7 i}" 
DA

Ukoliko je potrebno imati vise ulaznih ili izlaznih datoteka, one se oznacavaju sa uf2, uf3 itd.,
odnosno sa if2 u slucaju izlazne.

Primer upotrebe nad vise test primera je sledeci:

>./testn.sh primer_upotrebe/radovi/Student1/2.c primer_upotrebe/2.t 1 -v
1 : DA
2 : DA
3 : DA
4 : DA
5 : DA
6 : DA
7 : DA
8 : DA
9 : DA

Pritom je sadrzaj datoteke 2.t sledeci:

"uf1[ulazni.txt]{test iz P1 uf1} if1[izlazni.txt]{test iz P1 if1} i{ 7 i}"
|
"uf1[ulazni.txt]{P1 P2 uf1} if1[izlazni.txt]{P1 P2 if1} i{ 2 i}"
|
"uf1[ulazni.txt]{12345 uf1} if1[izlazni.txt]{12345 if1} i{ 0 i}"
|
"uf1[ulazni.txt]{_____ uf1} if1[izlazni.txt]{_____ if1} i{ 0 i}"
|
"uf1[ulazni.txt]{53289 fdslj fsdl3 324 uf1} if1[izlazni.txt]{53289 fdslj fsdl3 324 if1} i{ 9 i}"
|
"uf1[ulazni.txt]{11111 uf1} if1[izlazni.txt]{11111 if1} i{ 0 i}"
|
"uf1[ulazni.txt]{fls dslk ldks uf1} if1[izlazni.txt]{fls dslk ldks if1} i{ 11 i}"
|
"uf1[ulazni.txt]{aaaaaaaa uf1} if1[izlazni.txt]{aaaaaaaa if1} i{ 8 i}"
|
"uf1[ulazni.txt]{?_34_+fds uf1} if1[izlazni.txt]{?_34_+fds if1} i{ 3 i}
|

