366eab4b9a5aee1a4bc361ce5f640dbee5457271
[testub10.git] / scripts / modlvatest_codea.sh
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 $LOC/*.0 $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                 if [ -f ~/test/scripts/clr.py ]; then
56                         cat $RESFILE | ~/test/scripts/clr.py
57                 else
58                         cat $RESFILE
59                 fi
60             mv -f $RESFILE $RESFILE.s
61             CALLFILE=${i%.*}.call
62             echo
63             if [ ! -f $CALLFILE ]; then
64                 echo "Fehler: Datei $CALLFILE existiert nicht, kann Code nicht ausführen..."
65                 exit 1
66             else
67                 echo "Übersetze und linke das Testprogramm:"
68                 if cc -g -I. -DCALL=\"$CALLFILE\" $LOC/testmain.c $LOC/callingconvention.o $RESFILE.s; then
69                     echo
70                     echo "Rufe folgendes Codefragment auf:"
71                     cat $CALLFILE
72                     echo
73                     ./a.out 
74                     retval=$?
75                     # test callee saved registers
76                     if [ "$retval" -ge 12 ] && [ "$retval" -le 15 ]; then
77                         echo "[Error] Callee-saved register %r$retval modified."
78                         let errorfound=1
79                     elif [ "$retval" -eq 11 ]; then
80                         echo "[Error] Callee-saved register %rbx modified."
81                         let errorfound=1
82                     elif [ "$retval" -eq 16 ]; then
83                         echo "[Error] Callee-saved register %rbp modified."
84                         let errorfound=1
85                     elif [ "$retval" -eq 30 ]; then
86                         echo "[Error] Stack pointer %rsp modified."
87                         let errorfound=1
88                     else
89                         # test signals  
90                         test $retval -gt 127
91                         retsig=$?
92                         test ${i##*.} = xin
93                         expsig=$?
94                         if test $retsig -eq $expsig; then
95                             if test $retval -eq 1; then
96                                 echo "[Error] Das Ergebnis des Aufrufs ist falsch."
97                                 let errorfound=1
98                             elif test $retval -eq 0; then
99                                 echo "Das Ergebnis des Ausdrucks ist korrekt."
100                             else
101                                 echo "[Error] Erzeugter Code verhaelt sich bzgl. Signalerzeugung anders als erwartet."
102                                 let errorfound=1
103                             fi
104                         else
105                             echo "[Error] Erzeugter Code verhaelt sich bezueglich Signalerzeugung anders als erwartet."
106                             let errorfound=1
107                             echo "Rueckgabewert = $retval";
108                         fi
109                     fi
110                     echo
111                 else
112                     echo "[Error] Erzeugter Code konnte nicht assembliert und gelinkt werden."
113                     let errorfound=1
114                 fi
115             fi
116             let errnum=errnum+errorfound
117                 if [ 1 -eq $errorfound ]; then
118                         rm *.s
119                         rm *.out
120                         exit 3;
121                 fi
122             rm -f a.out $RESFILE $RESFILE.s
123         fi
124 done
125
126 for i in $LOC/*.[123] $LOC2/*.[123]
127 do
128         if [ -f $i ]; then
129         let prgnum=prgnum+1
130         echo "==========> Eingabe von $i:"
131         cat $i
132         echo
133         echo "Ausgabe:"
134         $PROGRAM <$i
135         retval=$?
136         if test $retval -eq ${i#*.}
137         then
138                 echo "Status: korrekt"
139         else
140                 echo "[Error] Status: $retval. Erwartet: ${i#*.}"
141                 let errnum=errnum+1
142         fi
143         echo
144 fi
145 done
146 let corrnum=prgnum-errnum
147 echo "Statistics: "
148 echo "==========="
149 echo "           $prgnum Tests total"
150 echo "           $corrnum Tests passed"
151 echo "           $errnum Tests failed"