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