From 6b4881ccd0b2aba2b37d7b1dd7fdb25125c972d1 Mon Sep 17 00:00:00 2001 From: Adrien Guatto Date: Fri, 2 Jul 2010 16:03:04 +0200 Subject: [PATCH] Revamped testing framework --- compiler/heptagon/analysis/typing.ml | 2 +- test/check | 336 +++++++++------------------ 2 files changed, 111 insertions(+), 227 deletions(-) diff --git a/compiler/heptagon/analysis/typing.ml b/compiler/heptagon/analysis/typing.ml index a5c7779..b30a1a2 100644 --- a/compiler/heptagon/analysis/typing.ml +++ b/compiler/heptagon/analysis/typing.ml @@ -573,7 +573,7 @@ and typing_app statefull h op e_list = params in let expected_ty_list = List.map (subst_type_vars m) expected_ty_list in let typed_e_list = typing_args statefull h expected_ty_list e_list in - let size_constrs = + let size_constr = instanciate_constr m ty_desc.node_params_constraints in let result_ty_list = List.map (subst_type_vars m) result_ty_list in List.iter add_size_constraint size_constrs; diff --git a/test/check b/test/check index cf43449..717ff03 100755 --- a/test/check +++ b/test/check @@ -1,12 +1,14 @@ #!/bin/bash +# TODO: rewrite in OCaml or something better than sh + # $Id$ shopt -s nullglob # script de test -compilo=../compiler/heptc.byte +compilo=../compiler/heptc.native coption= # compilateurs utilises pour les tests de gen. de code @@ -15,66 +17,72 @@ 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; + rm -f -r $d/*.obc $d/*_java $d/*_c $d/*.mci $d/*.mls $d/*.epci 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; + arg_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 + score=0 + max=0 -echo "Test" + echo "Test" -# les mauvais -echo -n "mauvais " -for f in bad/*.ept ; do + # les mauvais + echo -n "bad " + for f in bad/*.ept ; do echo -n "."; max=`expr $max + 1`; if compile $f; then - echo - echo "ECHEC sur "$f" (devrait echouer)"; + echo + echo "ERROR on "$f" (should fail to compile)"; else - score=`expr $score + 1`; + score=`expr $score + 1`; fi -done -echo + done -echo -n "bons" -for f in good/*.ept; do + echo + + echo -n "bons" + for f in good/*.ept; do echec=0 echo -n "."; max=`expr $max + 1`; @@ -92,19 +100,12 @@ for f in good/*.ept; do 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 + if $JAVAC -warn:-unused -sourcepath .:..:../t1 ${java_file} > /dev/null + then echec=${echec} else echec=3 @@ -112,236 +113,119 @@ for f in good/*.ept; do 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 + pushd good/${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 - 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 + popd >/dev/null fi if [[ $echec == 0 ]]; then - score=`expr $score + 1`; + 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 + 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 + done + echo -percent=`expr 100 \* $score / $max`; - -echo -n "Test: $score/$max : $percent%"; + percent=`expr 100 \* $score / $max`; + echo -n "Test: $score/$max : $percent%"; } activate_minils () { - minils=1 -} - -activate_caml () { - caml=1 - coption="$coption -target caml" + minils=1 } activate_java () { - java=1 - coption="$coption -target java" -} - -activate_lustre () { - lustre=1 - coption="$coption -target lustre" + java=1 + coption="$coption -target java" } 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" + c=1 + coption="$coption -target c" } activate_all () { - activate_caml - activate_java - activate_lustre - activate_c - activate_cold - activate_vhdl - activate_boolean - activate_deadcode - activate_cse - activate_inter - activate_tomato + activate_java + activate_c } # -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" ) + case $1 in + "-v" ) verbose=1; shift;; - "-all" ) + "-all" ) activate_all shift;; - "-caml" ) - activate_caml - shift;; - "-java" ) + "-java" ) activate_java shift;; - "-lustre" ) - activate_lustre - shift;; - "-tomato" ) - activate_tomato - shift;; - "-cse" ) - activate_cse - shift;; - "-inter" ) - activate_inter - shift;; - "-c" ) + "-c" ) activate_c shift;; - "-c-old" ) - activate_cold - shift;; - "-vhdl" ) - activate_vhdl - shift;; - "-mls" ) + "-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" ) + "-h" ) echo "usage : $0 " 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 + esac done launch_check echo