summaryrefslogtreecommitdiffstats
path: root/šola/p1/dn/tj.sh
blob: ed9e51000bea777076a88210de33e61cccb19af8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/bash
d=$3
[ x$d = x ] && d=.
[ x$1 = x ] && { echo kot prvi argument bi morali navesti ime .java datoteke!; exit 1; }
[ x$2 = x ] && { echo kot drugi argument bi morali navesti pot do direktorija s testi!; exit 1; }
uspelih=0
napa=0
predolg=0
if [ x$URA = x ]
then
	ura=5s
else
	ura=$URA
fi
find $2 -name 'Test[0-9]*.java' -or -name '*.in' |
{
	while read -r f
	do
		echo -n "$f ... "
		uspeh=0
		if grep 'java$' <<<$f > /dev/null
		then
			stdout=`echo <(java $f)`
		else
			stdout=`echo <(java $1 < $f)`
		fi
		out=$(timeout $ura /usr/bin/time --quiet -f %E diff --ignore-trailing-space --side-by-side <(java `grep 'java$' <<<$f > /dev/null && echo $f || echo $1` <$f) `sed -e s/in$/out/ -e 's/Test\([0-9]\)/test\1/' -e s/java$/out/ <<<$f` 2>&1) && uspeh=1
		koda=$?
		if [ $uspeh -eq 0 ]
		then
			if [ $koda -eq 124 ]
			then
				predolg=$(($predolg+1))
				echo "PREKORAČEN ČAS $ura!"
				if grep 'java$' <<<$f > /dev/null
				then
					true
				else
					echo "VHOD:"
					tac $f | tac
				fi
			else
				napa=$(($napa+1))
				echo "NAPAČEN IZHOD! Čas izvajanja: `tail -n1 <<<$out`"
				if grep 'java$' <<<$f > /dev/null
				then
					true
				else
					echo "VHOD:"
					tac $f | tac
				fi
				echo "IZHOD: Levo je vaš izhod, desno je pravilen izhod:"
				head -n-1 <<<$out
				grep 'java$' <<<$f > /dev/null && echo -e "PRIPOROČILO: Če DN zahteva razrede (kot recimo DN06), morate imeti v trenutnem direktoriju PREVEDENE .class datoteke vaših zahtevanih razredov. Če so v katerem drugem direktoriju, morate nastaviti CLASSPATH.\nPoleg tega se lahko zgodi, da v direktoriju s testi obstaja TestSkupno.java (kot recimo DN07), ki ga je potrebno prevesti v z javac."
			fi
		else
			uspelih=$(($uspelih+1))
			echo "USPELO! Čas izvajanja: `tail -n1 <<<$out`"
		fi
	done
	echo "uspešnih testov:	$uspelih"
	echo "napačnih izhodov:	$napa"
	echo "prekoračen čas $ura:	$predolg"
}