2010-06-21 12:11:06 +02:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# $Id$
|
|
|
|
|
|
|
|
shopt -s nullglob
|
|
|
|
|
|
|
|
# script de test
|
|
|
|
|
2010-06-22 09:46:57 +02:00
|
|
|
compilo=../compiler/heptc.byte
|
2010-06-21 12:11:06 +02:00
|
|
|
coption=
|
|
|
|
|
|
|
|
# compilateurs utilises pour les tests de gen. de code
|
|
|
|
|
|
|
|
CAMLC=ocamlc
|
|
|
|
JAVAC=javac
|
|
|
|
LUSTREC=lustre
|
|
|
|
CC=gcc
|
|
|
|
MLC=mlc
|
|
|
|
VHDLC=ghdl
|
|
|
|
|
|
|
|
# par defaut : pas de test de generation de code
|
|
|
|
|
|
|
|
caml=0
|
|
|
|
java=0
|
|
|
|
lustre=0
|
|
|
|
c=0
|
|
|
|
cold=0
|
|
|
|
minils=0
|
|
|
|
vhdl=0
|
|
|
|
|
|
|
|
score=0
|
|
|
|
max=0
|
|
|
|
verbose=0
|
|
|
|
|
|
|
|
for d in good bad; do
|
|
|
|
rm -f -r $d/*.obc $d/*_java $d/*_c $d/*_c-old\
|
|
|
|
$d/*.mci $d/*.mls $d/*.epci\
|
|
|
|
$d/*.lus $d/*.ml $d/*.cmi $d/*.cmo;
|
|
|
|
done
|
|
|
|
|
|
|
|
#rm -f inline/good/*.ml inline/good/*.cmi inline/good/*.cmo \
|
|
|
|
# inline/good/*.dcc inline/good/*.lci inline/good/a.out
|
|
|
|
#../util/split sujet1/bad/bad.split
|
|
|
|
#../util/split sujet1/good/good.split
|
|
|
|
|
|
|
|
compile () {
|
|
|
|
if [[ $verbose != 0 ]]; then
|
|
|
|
echo Compile -i $coption $1 $2
|
|
|
|
$compilo $coption -I good $1 $2;
|
|
|
|
else
|
|
|
|
$compilo $coption -I good $1 $2 > /dev/null 2>&1;
|
|
|
|
fi;
|
|
|
|
}
|
|
|
|
|
|
|
|
launch_check () {
|
|
|
|
|
|
|
|
score=0
|
|
|
|
max=0
|
|
|
|
|
|
|
|
echo "Test"
|
|
|
|
|
|
|
|
# les mauvais
|
|
|
|
echo -n "mauvais "
|
|
|
|
for f in bad/*.ept ; do
|
|
|
|
echo -n ".";
|
|
|
|
max=`expr $max + 1`;
|
|
|
|
if compile $f; then
|
|
|
|
echo
|
|
|
|
echo "ECHEC sur "$f" (devrait echouer)";
|
|
|
|
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 good/${base_f}.mls > /dev/null 2>&1; then
|
|
|
|
echec=0
|
|
|
|
else
|
|
|
|
echec=2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# Compil. caml ?
|
|
|
|
if [[ ($echec == 0) && ($caml == 1) ]]; then
|
|
|
|
if $CAMLC -i good/${base_f}.ml > /dev/null; then
|
|
|
|
echec=0
|
|
|
|
else
|
|
|
|
echec=2
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# Compil. java ?
|
|
|
|
if [[ ($echec == 0) && ($java == 1) ]]; then
|
|
|
|
pushd "good/${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. lustre ?
|
|
|
|
if [[ ($echec == 0) && ($lustre == 1) ]]; then
|
|
|
|
if $LUSTREC good/${base_f}.lus > /dev/null; then
|
|
|
|
echec=0
|
|
|
|
else
|
|
|
|
echec=4
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
# Compil. c ?
|
|
|
|
if [[ ($echec == 0) && ($c == 1) ]]; then
|
|
|
|
pushd "good/${base_f}_c" > /dev/null
|
|
|
|
for c_file in *.c ; do
|
|
|
|
if $CC -I ../t1_c -c ${c_file} > /dev/null 2>&1; then
|
|
|
|
echec=${echec}
|
|
|
|
else
|
|
|
|
echec=5
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
popd > /dev/null
|
|
|
|
fi
|
|
|
|
# Compil. c-old ?
|
|
|
|
if [[ ($echec == 0) && ($cold == 1) ]]; then
|
|
|
|
pushd "good/${base_f}_c-old" > /dev/null
|
|
|
|
for c_file in *.c ; do
|
|
|
|
if $CC -I ../t1_c-ng -c ${c_file} > /dev/null 2>&1; then
|
|
|
|
echec=${echec}
|
|
|
|
else
|
|
|
|
echec=6
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
popd > /dev/null
|
|
|
|
fi
|
|
|
|
if [[ ($echec == 0) && ($vhdl == 1) ]]; then
|
|
|
|
pushd "good/${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=7
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ $echec == 0 ]]; then
|
|
|
|
score=`expr $score + 1`;
|
|
|
|
else
|
|
|
|
echo
|
|
|
|
echo "ECHEC sur "$f" (devrait reussir)";
|
|
|
|
case $echec in
|
|
|
|
1 )
|
|
|
|
echo "Echec de la compil. vers code objet";;
|
|
|
|
2 )
|
|
|
|
echo "Echec de la compil. caml";;
|
|
|
|
3 )
|
|
|
|
echo "Echec de la compil. java";;
|
|
|
|
4 )
|
|
|
|
echo "Echec de la compil. lustre";;
|
|
|
|
5 )
|
|
|
|
echo "Echec de la compil. c";;
|
|
|
|
6 )
|
|
|
|
echo "Echec de la compil. c-ng";;
|
|
|
|
7 )
|
|
|
|
echo "Echec de la compil. VHDL";;
|
|
|
|
esac
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
echo
|
|
|
|
|
|
|
|
percent=`expr 100 \* $score / $max`;
|
|
|
|
|
|
|
|
echo -n "Test: $score/$max : $percent%";
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_minils () {
|
|
|
|
minils=1
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_caml () {
|
|
|
|
caml=1
|
|
|
|
coption="$coption -target caml"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_java () {
|
|
|
|
java=1
|
|
|
|
coption="$coption -target java"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_lustre () {
|
|
|
|
lustre=1
|
|
|
|
coption="$coption -target lustre"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_c () {
|
|
|
|
c=1
|
|
|
|
coption="$coption -target c"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_cold () {
|
|
|
|
cng=1
|
|
|
|
coption="$coption -target c-old"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_vhdl () {
|
|
|
|
vhdl=1
|
|
|
|
coption="$coption -target vhdl"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_tomato () {
|
|
|
|
coption="$coption -tomato"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_cse () {
|
|
|
|
coption="$coption -cse"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_inter () {
|
|
|
|
coption="$coption -inter"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_boolean () {
|
|
|
|
coption="$coption -bool"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_deadcode () {
|
|
|
|
coption="$coption -deadcode"
|
|
|
|
}
|
|
|
|
|
|
|
|
activate_all () {
|
|
|
|
activate_caml
|
|
|
|
activate_java
|
|
|
|
activate_lustre
|
|
|
|
activate_c
|
|
|
|
activate_cold
|
|
|
|
activate_vhdl
|
|
|
|
activate_boolean
|
|
|
|
activate_deadcode
|
|
|
|
activate_cse
|
|
|
|
activate_inter
|
|
|
|
activate_tomato
|
|
|
|
}
|
|
|
|
|
|
|
|
# -1, -2, -3, -v1, -v2, -v3 kept for backward compatibility
|
|
|
|
# (to be suppressed)
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
case $1 in
|
|
|
|
"-1" )
|
|
|
|
shift;;
|
|
|
|
"-2" )
|
|
|
|
activate_minils
|
|
|
|
shift;;
|
|
|
|
"-3" )
|
|
|
|
activate_minils
|
|
|
|
shift;;
|
|
|
|
"-v" )
|
|
|
|
verbose=1;
|
|
|
|
shift;;
|
|
|
|
"-all" )
|
|
|
|
activate_all
|
|
|
|
shift;;
|
|
|
|
"-caml" )
|
|
|
|
activate_caml
|
|
|
|
shift;;
|
|
|
|
"-java" )
|
|
|
|
activate_java
|
|
|
|
shift;;
|
|
|
|
"-lustre" )
|
|
|
|
activate_lustre
|
|
|
|
shift;;
|
|
|
|
"-tomato" )
|
|
|
|
activate_tomato
|
|
|
|
shift;;
|
|
|
|
"-cse" )
|
|
|
|
activate_cse
|
|
|
|
shift;;
|
|
|
|
"-inter" )
|
|
|
|
activate_inter
|
|
|
|
shift;;
|
|
|
|
"-c" )
|
|
|
|
activate_c
|
|
|
|
shift;;
|
|
|
|
"-c-old" )
|
|
|
|
activate_cold
|
|
|
|
shift;;
|
|
|
|
"-vhdl" )
|
|
|
|
activate_vhdl
|
|
|
|
shift;;
|
|
|
|
"-mls" )
|
|
|
|
activate_minils
|
|
|
|
shift;;
|
|
|
|
"-bool" )
|
|
|
|
activate_boolean
|
|
|
|
shift;;
|
|
|
|
"-deadcode" )
|
|
|
|
activate_deadcode
|
|
|
|
shift;;
|
|
|
|
"-v1" )
|
|
|
|
verbose=1;
|
|
|
|
shift;;
|
|
|
|
"-v2" )
|
|
|
|
verbose=1;
|
|
|
|
activate_minils
|
|
|
|
shift;;
|
|
|
|
"-v3" )
|
|
|
|
verbose=1;
|
|
|
|
shift;;
|
|
|
|
"-h" )
|
|
|
|
echo "usage : $0 <options> <compilo>"
|
|
|
|
echo "options : "
|
|
|
|
echo "-caml : test of code generation (caml code)"
|
|
|
|
echo "-java : test of code generation (java code)"
|
|
|
|
echo "-lustre : test of code generation (lustre code)"
|
|
|
|
echo "-c : test of code generation (c code)"
|
|
|
|
echo "-c-old : test of code generation (c code, old backend)"
|
|
|
|
echo "-vhdl : test of code generation (vhdl)"
|
|
|
|
echo "-bool : test of boolean translation"
|
|
|
|
echo "-deadcode : test of deadcode removal"
|
|
|
|
echo "-inter : test of intermediate equations removal"
|
|
|
|
echo "-tomato : test of automata minimization"
|
|
|
|
echo "-cse : test of common sub-expression elimination"
|
|
|
|
echo "-all : test all"
|
|
|
|
echo "-v : verbose"
|
|
|
|
exit 0;;
|
|
|
|
* )
|
|
|
|
compilo=$1
|
|
|
|
shift
|
|
|
|
coption="$coption $*"
|
|
|
|
break
|
|
|
|
esac
|
|
|
|
done
|
|
|
|
launch_check
|
|
|
|
echo
|