fd40bcefcf
Note that it is really slow compared to something like : javac -cp ../../../lib/java */*.java which compiles everything together instead of relaunching the compiler by hand in each subdir.
322 lines
6.3 KiB
Bash
Executable file
322 lines
6.3 KiB
Bash
Executable file
#!/bin/bash
|
|
|
|
checkdir=_check_builds
|
|
|
|
|
|
# TODO: rewrite in OCaml or something better than sh
|
|
|
|
shopt -s nullglob
|
|
|
|
# script de test
|
|
|
|
compilo=../../heptc
|
|
coption="-memalloc"
|
|
|
|
# compilateurs utilises pour les tests de gen. de code
|
|
|
|
CAMLC=ocamlc
|
|
JAVAC=javac
|
|
LUSTREC=lustre
|
|
CC="gcc -std=c99 -I../../../lib/c -I../t1_c"
|
|
|
|
# par defaut : pas de test de generation de code
|
|
|
|
tomato=0
|
|
java=0
|
|
lustre=0
|
|
c=0
|
|
minils=0
|
|
vhdl=0
|
|
|
|
score=0
|
|
max=0
|
|
verbose=0
|
|
clean=0
|
|
|
|
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
|
|
logfile=`basename $1`.log
|
|
echo "Compile -i $coption $args_comp $1"
|
|
$compilo $coption -I good $args_comp $1 >$logfile 2>&1
|
|
else
|
|
if [ $2 == 1 ]; then
|
|
$compilo $coption -I good $args_comp $1 >/dev/null 2>&1
|
|
else
|
|
$compilo $coption -I good $args_comp $1 2>&1
|
|
fi
|
|
fi
|
|
failed=$?
|
|
|
|
return $failed
|
|
}
|
|
|
|
launch_check () {
|
|
|
|
score=0
|
|
max=0
|
|
|
|
if [ $clean = 1 ]; then
|
|
rm -r $checkdir
|
|
exit 0
|
|
fi
|
|
|
|
if [ ! -d $checkdir ]; then
|
|
mkdir $checkdir
|
|
fi
|
|
cd $checkdir
|
|
|
|
# les mauvais
|
|
echo "Tests bads"
|
|
for f in ../bad/*.ept ; do
|
|
if [ $verbose = 0 ]; then
|
|
echo -n "."
|
|
fi
|
|
max=`expr $max + 1`;
|
|
if compile $f 1; then
|
|
echo
|
|
echo "ERROR on "$f" (should fail to compile)";
|
|
else
|
|
score=`expr $score + 1`;
|
|
fi
|
|
done
|
|
echo
|
|
echo "Tests goods"
|
|
for f in ../good/*.ept; do
|
|
echec=0
|
|
if [ $verbose = 0 ]; then
|
|
echo -n "."
|
|
fi
|
|
max=`expr $max + 1`;
|
|
base_f=`basename $f .ept`
|
|
if compile $f 0; 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 "java/$(echo ${base_f} | sed 's/^./\u&/')" > /dev/null
|
|
if $JAVAC -cp ../../../../lib/java:../ *.java > /dev/null
|
|
then
|
|
echec=0
|
|
else
|
|
echec=3
|
|
fi
|
|
popd > /dev/null
|
|
fi
|
|
# Compil. caml ?
|
|
if [[ ($echec == 0) && ($caml == 1) ]]; then
|
|
if $CAMLC -c ${base_f}.ml > /dev/null; then
|
|
echec=0
|
|
else
|
|
echec=4
|
|
fi
|
|
fi
|
|
# Compil. c ?
|
|
if [[ ($echec == 0) && ($c == 1) ]]; then
|
|
pushd ${base_f}_c >/dev/null
|
|
for cf in *.c; do
|
|
$CC -c $cf >/dev/null 2>&1
|
|
if [ $? = 0 -a $echec != 5 ]; then
|
|
echec=0
|
|
else
|
|
echec=5
|
|
fi
|
|
done
|
|
#echo "Compilation $f vers C = $echec"
|
|
|
|
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=0
|
|
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=0
|
|
else
|
|
echec=7
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
popd >/dev/null
|
|
fi
|
|
# Compil. VHDL ?
|
|
if [[ ($echec == 0) && ($vhdl == 1) ]]; then
|
|
pushd ${base_f}_vhdl > /dev/null
|
|
for vhdl_file in *.vhd; do
|
|
if $VHDLC -a ${vhdl_file} && $VHDLC -e ${vhdl_file} > /dev/null 2>&1
|
|
then
|
|
echec=${echec}
|
|
else
|
|
echec=8
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if [[ $echec == 0 ]]; then
|
|
score=`expr $score + 1`;
|
|
else
|
|
echo
|
|
echo "ERROR on \"$f\" (should compile)";
|
|
case $echec in
|
|
1 )
|
|
echo "Compilation failed.";;
|
|
2 )
|
|
echo "Compilation to Minils failed.";;
|
|
3 )
|
|
echo "Compilation to Java failed.";;
|
|
4 )
|
|
echo "Compilation to Caml failed.";;
|
|
5 )
|
|
echo "C compilation 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_clean () {
|
|
clean=1
|
|
}
|
|
|
|
activate_minils () {
|
|
minils=1
|
|
}
|
|
|
|
activate_java () {
|
|
java=1
|
|
coption="$coption -target java"
|
|
}
|
|
|
|
activate_caml () {
|
|
caml=1
|
|
coption="$coption -target caml"
|
|
}
|
|
|
|
activate_vhdl () {
|
|
vhdl=1
|
|
coption="$coption -target vhdl"
|
|
}
|
|
|
|
activate_c () {
|
|
c=1
|
|
coption="$coption -target c"
|
|
}
|
|
|
|
activate_tomato () {
|
|
tomato=1
|
|
coption="$coption -tomato"
|
|
}
|
|
|
|
activate_all () {
|
|
activate_java
|
|
activate_c
|
|
}
|
|
|
|
activate_boolean () {
|
|
coption="$coption -bool"
|
|
}
|
|
|
|
activate_deadcode () {
|
|
coption="$coption -deadcode"
|
|
}
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
"-clean" )
|
|
activate_clean
|
|
shift;;
|
|
"-v" )
|
|
verbose=1;
|
|
shift;;
|
|
"-all" )
|
|
activate_all
|
|
shift;;
|
|
"-java" )
|
|
activate_java
|
|
shift;;
|
|
"-c" )
|
|
activate_c
|
|
shift;;
|
|
"-caml" )
|
|
activate_caml
|
|
shift;;
|
|
"-vhdl" )
|
|
activate_vhdl
|
|
shift;;
|
|
"-mls" )
|
|
activate_minils
|
|
shift;;
|
|
"-tomato" )
|
|
activate_tomato
|
|
shift;;
|
|
"-bool" )
|
|
activate_boolean
|
|
shift;;
|
|
"-deadcode" )
|
|
activate_deadcode
|
|
shift;;
|
|
"-h" )
|
|
echo "usage : $0 <options> <compilo>"
|
|
echo "options : "
|
|
echo "-clean : clean build dir"
|
|
echo "-java : test of code generation (java code)"
|
|
echo "-caml : test of code generation (caml code)"
|
|
echo "-lustre : test of code generation (lustre code)"
|
|
echo "-vhdl : test of code generation (vhdl)"
|
|
echo "-bool : test of boolean translation"
|
|
echo "-deadcode : test of deadcode removal"
|
|
echo "-tomato : test of automata minimization"
|
|
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
|