heptagon/test/check
2010-07-21 15:15:57 +02:00

232 lines
4.4 KiB
Bash
Executable file

#!/bin/bash
# TODO: rewrite in OCaml or something better than sh
# $Id$
shopt -s nullglob
# script de test
compilo=../heptc
coption=
# compilateurs utilises pour les tests de gen. de code
CAMLC=ocamlc
JAVAC=javac
LUSTREC=lustre
CC="gcc -std=c99"
# par defaut : pas de test de generation de code
java=0
c=0
score=0
max=0
verbose=0
for d in good bad; do
rm -f -r $d/*.obc $d/*_java $d/*_c $d/*.mci $d/*.mls $d/*.epci
done
compile () {
args_comp=""
assert_node=$(eval grep CHECK $1 | awk '{ print $3 }')
if [ -n "$assert_node" ]; then
args_comp="-assert $assert_node"
fi
if [ $verbose != 0 ]; then
args_comp="$args_comp -v"
fi
if grep "node main()" $1 >/dev/null; then
args_comp="$args_comp -s main"
fi
if [ $verbose != 0 ]; then
echo Compile -i $coption $1 $2 $args_comp
$compilo $coption -I good $1 $2 $args_comp
else
$compilo $coption -I good $args_comp $1 $2 >/dev/null 2>&1
fi
failed=$?
return $failed
}
launch_check () {
score=0
max=0
echo "Test"
# les mauvais
echo -n "bad "
for f in bad/*.ept ; do
echo -n ".";
max=`expr $max + 1`;
if compile $f; then
echo
echo "ERROR on "$f" (should fail to compile)";
else
score=`expr $score + 1`;
fi
done
echo
echo -n "bons"
for f in good/*.ept; do
echec=0
echo -n ".";
max=`expr $max + 1`;
base_f=`basename $f .ept`
if compile $f; then
echec=0
else
echec=1
fi
# Compil. minils ?
if [[ ($echec == 0) && ($minils == 1) ]]; then
if $MLC ${base_f}.mls > /dev/null 2>&1; then
echec=0
else
echec=2
fi
fi
# Compil. java ?
if [[ ($echec == 0) && ($java == 1) ]]; then
pushd "${base_f}" > /dev/null
for java_file in *.java ; do
if $JAVAC -warn:-unused -sourcepath .:..:../t1 ${java_file} > /dev/null
then
echec=${echec}
else
echec=3
fi
done
popd > /dev/null
fi
# Compil. c ?
if [[ ($echec == 0) && ($c == 1) ]]; then
pushd ${base_f}_c >/dev/null
for cf in *.c; do
if $CC -c $cf >/dev/null 2>&1; then
echec=$echec
else
echec=5
fi
done
if [ $echec != 5 ]; then
if egrep "(node main\(\))|(CHECK)" ../${base_f}.ept >/dev/null 2>&1
then
if $CC *.o -o ${base_f} 2>&1; then
echec=$echec
else
echec=6
fi
if [ $echec != 6 ]; then
step_count=`grep CHECK ../$base_f.ept | awk '{ print $4 }'`
if [ -n "$step_count" ]; then
if ./${base_f} $step_count >/dev/null 2>&1; then
echec=${echec}
else
echec=7
fi
fi
fi
fi
fi
popd >/dev/null
fi
if [[ $echec == 0 ]]; then
score=`expr $score + 1`;
else
echo
echo "ERROR on \"$f\" (should compile)";
case $echec in
1 )
echo "Compilation to Obc failed.";;
3 )
echo "Compilation to Java failed.";;
5 )
echo "Compilation to C failed.";;
6 )
echo "Link failure.";;
7 )
echo "Run-time assertion failure.";;
esac
fi
done
echo
percent=`expr 100 \* $score / $max`;
echo -n "Test: $score/$max : $percent%";
}
activate_minils () {
minils=1
}
activate_java () {
java=1
coption="$coption -target java"
}
activate_c () {
c=1
coption="$coption -target c"
}
activate_all () {
activate_java
activate_c
}
# -1, -2, -3, -v1, -v2, -v3 kept for backward compatibility
# (to be suppressed)
while [ $# -gt 0 ]; do
case $1 in
"-v" )
verbose=1;
shift;;
"-all" )
activate_all
shift;;
"-java" )
activate_java
shift;;
"-c" )
activate_c
shift;;
"-mls" )
activate_minils
shift;;
"-h" )
echo "usage : $0 <options> <compilo>"
echo "options : "
echo "-java : test of code generation (java code)"
echo "-c : test of code generation (c code)"
echo "-all : test all"
echo "-v : verbose"
exit 0;;
* )
compilo=$1
shift
coption="$coption $*"
break
esac
done
launch_check
echo