scripts:
[testub10.git] / scripts / onetest
1 #!/bin/bash
2
3 i=$1
4 beispiel=codea
5 PROGRAM=./$beispiel
6
7 #LOC=.
8 LOC=/usr/ftp/pub/ubvl/test/$beispiel
9
10 allow_null_glob_expansion=1
11
12 if [ ! -d ~/abgabe/$beispiel ]; then
13   echo "Fehler: Verzeichnis ~/abgabe/$beispiel existiert nicht."
14   exit 1
15 else
16   cd ~/abgabe/$beispiel
17   echo 'Teste "make"'
18   make
19 fi
20
21 if test ! -x $PROGRAM
22 then
23         echo "Fehler: Kein Programm $PROGRAM"
24         exit 1
25 fi
26 let prgnum=0
27 #for i in $LOC/*.0 $LOC2/*.0
28 if [ -f $i ]; then
29         let prgnum=prgnum+1
30         let errorfound=0
31         echo "==========> Eingabe von $i:"
32         cat $i
33         echo
34         RESFILE=test${beispiel}out$$
35         $PROGRAM <$i >$RESFILE
36         retval=$?
37         echo -n "Übersetzung: "
38         if test $retval -eq 0
39         then
40                 echo "Status korrekt"
41         else
42                 echo "[Errot] Status=$retval. Erwartet: 0"
43                 let errorfound=1
44         fi
45         echo
46         echo "Ausgabe:"
47         if [ -f ~/test/scripts/clr.py ]; then
48                 cat $RESFILE | ~/test/scripts/clr.py
49         else
50                 cat $RESFILE
51         fi
52         mv -f $RESFILE $RESFILE.s
53         CALLFILE=${i%.*}.call
54         echo
55         if [ ! -f $CALLFILE ]; then
56         echo "Fehler: Datei $CALLFILE existiert nicht, kann Code nicht ausführen..."
57         exit 1
58         else
59         echo "Übersetze und linke das Testprogramm:"
60         if cc -g -I. -DCALL=\"$CALLFILE\" $LOC/testmain.c $LOC/callingconvention.o $RESFILE.s; then
61                 echo
62                 echo "Rufe folgendes Codefragment auf:"
63                 cat $CALLFILE
64                 echo
65                 ./a.out 
66                 retval=$?
67                 # test callee saved registers
68                 if [ "$retval" -ge 12 ] && [ "$retval" -le 15 ]; then
69                 echo "[Error] Callee-saved register %r$retval modified."
70                                         let errorfound=1
71                 elif [ "$retval" -eq 11 ]; then
72                 echo "[Error] Callee-saved register %rbx modified."
73                                         let errorfound=1
74                 elif [ "$retval" -eq 16 ]; then
75                 echo "[Error] Callee-saved register %rbp modified."
76                                         let errorfound=1
77                 elif [ "$retval" -eq 30 ]; then
78                 echo "[Error] Stack pointer %rsp modified."
79                                         let errorfound=1
80                                 else
81                                         # test signals  
82                 test $retval -gt 127
83                 retsig=$?
84                 test ${i##*.} = xin
85                 expsig=$?
86                 if test $retsig -eq $expsig; then
87                         if test $retval -eq 1; then
88                         echo "[Error] Das Ergebnis des Aufrufs ist falsch."
89                         let errorfound=1
90                         elif test $retval -eq 0; then
91                         echo "Das Ergebnis des Ausdrucks ist korrekt."
92                         else
93                                 echo "[Error] Erzeugter Code verhaelt sich bzgl. Signalerzeugung anders als erwartet."
94                         let errorfound=1
95                         fi
96                 else
97                         echo "[Error] Erzeugter Code verhaelt sich bezueglich Signalerzeugung anders als erwartet."
98                         let errorfound=1
99                         echo "Rueckgabewert = $retval";
100                 fi
101                 fi
102                 echo
103         else
104                 echo "[Error] Erzeugter Code konnte nicht assembliert und gelinkt werden."
105                 let errorfound=1
106         fi
107         fi
108         let errnum=errnum+errorfound
109         if [ 1 -eq $errorfound ]; then
110                 rm *.s
111                 rm *.out
112                 exit 3;
113         fi
114         rm -f a.out $RESFILE $RESFILE.s
115 fi