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