codea: offizielles testscript ein wenig modifiziert
authorBernhard Urban <lewurm@gmail.com>
Mon, 3 May 2010 18:01:02 +0000 (20:01 +0200)
committerBernhard Urban <lewurm@gmail.com>
Mon, 3 May 2010 18:01:02 +0000 (20:01 +0200)
clr.py findet man im infformatikforum ("[SCRIPT] Einfaerben von Assembler-Code"
by thp)

codea/Makefile
codea/modtest [new file with mode: 0755]

index b6673a14018d36ff5a8cedba22a3e70f51996fac..57559f644ad01683434316f5583a44ee2c2ceabc 100644 (file)
@@ -38,7 +38,8 @@ oxout.y oxout.l: parser.y scanner.lex
 clean:
        rm -f $(NAME) $(OBJS) scanner.c parser.{h,c,output} oxout.{y,l,h} code.c
 
-1test: 2test
+1test:
+       ./modtest
 
-2test:
+lvatest:
        /usr/ftp/pub/ublu/test/$(NAME)/test 2>&1
diff --git a/codea/modtest b/codea/modtest
new file mode 100755 (executable)
index 0000000..e0ecf63
--- /dev/null
@@ -0,0 +1,146 @@
+#! /bin/bash
+
+beispiel=codea
+PROGRAM=./$beispiel
+
+errnum=0
+prgnum=0
+
+#LOC=.
+LOC=/usr/ftp/pub/ubvl/test/$beispiel
+LOC2=~/test/$beispiel
+
+/usr/ftp/pub/ublu/test/accounttest || exit 1
+allow_null_glob_expansion=1
+
+if [ ! -d ~/abgabe/$beispiel ]; then
+  echo "Fehler: Verzeichnis ~/abgabe/$beispiel existiert nicht."
+  exit 1
+else
+  cd ~/abgabe/$beispiel
+  echo 'Teste "make clean"'
+  make clean
+  /usr/ftp/pub/ubvl/test/cleantest
+  echo 'Teste "make"'
+  make
+fi
+
+if test ! -x $PROGRAM
+then
+       echo "Fehler: Kein Programm $PROGRAM"
+       exit 1
+fi
+let prgnum=0
+for i in $LOC/*.0 $LOC2/*.0
+do
+       if [ -f $i ]; then
+           let prgnum=prgnum+1
+           let errorfound=0
+           echo "==========> Eingabe von $i:"
+           cat $i
+           echo
+           RESFILE=test${beispiel}out$$
+           $PROGRAM <$i >$RESFILE
+           retval=$?
+           echo -n "Übersetzung: "
+           if test $retval -eq 0
+           then
+                   echo "Status korrekt"
+           else
+                   echo "[Errot] Status=$retval. Erwartet: 0"
+                   let errorfound=1
+           fi
+           echo
+           echo "Ausgabe:"
+           cat $RESFILE | clr.py
+           mv -f $RESFILE $RESFILE.s
+           CALLFILE=${i%.*}.call
+           echo
+           if [ ! -f $CALLFILE ]; then
+               echo "Fehler: Datei $CALLFILE existiert nicht, kann Code nicht ausführen..."
+               exit 1
+           else
+               echo "Übersetze und linke das Testprogramm:"
+               if cc -g -I. -DCALL=\"$CALLFILE\" $LOC/testmain.c $LOC/callingconvention.o $RESFILE.s; then
+                   echo
+                   echo "Rufe folgendes Codefragment auf:"
+                   cat $CALLFILE
+                   echo
+                   ./a.out 
+                   retval=$?
+                   # test callee saved registers
+                   if [ "$retval" -ge 12 ] && [ "$retval" -le 15 ]; then
+                       echo "[Error] Callee-saved register %r$retval modified."
+                        let errorfound=1
+                   elif [ "$retval" -eq 11 ]; then
+                       echo "[Error] Callee-saved register %rbx modified."
+                        let errorfound=1
+                   elif [ "$retval" -eq 16 ]; then
+                       echo "[Error] Callee-saved register %rbp modified."
+                        let errorfound=1
+                   elif [ "$retval" -eq 30 ]; then
+                       echo "[Error] Stack pointer %rsp modified."
+                        let errorfound=1
+                    else
+                        # test signals  
+                       test $retval -gt 127
+                       retsig=$?
+                       test ${i##*.} = xin
+                       expsig=$?
+                       if test $retsig -eq $expsig; then
+                           if test $retval -eq 1; then
+                               echo "[Error] Das Ergebnis des Aufrufs ist falsch."
+                               let errorfound=1
+                           elif test $retval -eq 0; then
+                               echo "Das Ergebnis des Ausdrucks ist korrekt."
+                           else
+                               echo "[Error] Erzeugter Code verhaelt sich bzgl. Signalerzeugung anders als erwartet."
+                               let errorfound=1
+                           fi
+                       else
+                           echo "[Error] Erzeugter Code verhaelt sich bezueglich Signalerzeugung anders als erwartet."
+                           let errorfound=1
+                           echo "Rueckgabewert = $retval";
+                       fi
+                   fi
+                   echo
+               else
+                   echo "[Error] Erzeugter Code konnte nicht assembliert und gelinkt werden."
+                   let errorfound=1
+               fi
+           fi
+           let errnum=errnum+errorfound
+               if [ 1 -eq $errorfound ]; then
+                       rm *.s
+                       exit 3;
+               fi
+           rm -f a.out $RESFILE $RESFILE.s
+       fi
+done
+
+for i in $LOC/*.[123] $LOC2/*.[123]
+do
+       if [ -f $i ]; then
+       let prgnum=prgnum+1
+       echo "==========> Eingabe von $i:"
+       cat $i
+       echo
+       echo "Ausgabe:"
+       $PROGRAM <$i
+       retval=$?
+       if test $retval -eq ${i#*.}
+       then
+               echo "Status: korrekt"
+       else
+               echo "[Error] Status: $retval. Erwartet: ${i#*.}"
+               let errnum=errnum+1
+       fi
+       echo
+fi
+done
+let corrnum=prgnum-errnum
+echo "Statistics: "
+echo "==========="
+echo "           $prgnum Tests total"
+echo "           $corrnum Tests passed"
+echo "           $errnum Tests failed"