#! /bin/sh . ../testenv.sh common_args="--std=93c" # Test number. test_num="1" do_inter_clean="no" # Functions used by tests. setup_test_group () { echo "Test: $1 $2" } end_test_group () { delete_lib work echo "*** End of tests" } create_lib () { echo "create library: $1" } delete_lib () { echo "delete library: $1" cmd="$GHDL --remove $common_args --work=$1" echo $cmd eval $cmd } # Usage: handle_test MODE FILE options... handle_test () { mode=$1 shift file=$1 shift args="$common_args" stop="" entity="" # handle options. for arg; do case $arg in LIBRARY=*) lib=`echo $arg | sed -e s/LIBRARY=/--work=/`; args="$args $lib"; ;; INPUT=*) input=$arg; ;; OUTPUT=*) output=$arg; ;; STOP=*) stop=`echo $arg | sed -e s/STOP=/--stop-time=/`; ;; ENTITY=*) entity=`echo $arg | sed -e s/ENTITY=//` ;; *) echo "build_compliant_test: unknown argument '$arg'"; exit 4; ;; esac done cmd="$GHDL -a $args $dir/$file" echo "Test: $test_num" echo $cmd if [ $test_num -gt $skip ]; then case $mode in compile) eval $cmd; ;; run) eval $cmd if [ x$entity = "x" ]; then entity=`$GET_ENTITIES $dir/$file` fi if [ "x$entity" = "x" ]; then echo "Cannot elaborate or run : no top level entity"; else cmd="$GHDL --elab-run $entity $stop --assert-level=error"; echo "$cmd"; eval $cmd; fi ;; ana_err) if eval $cmd; then echo "Analyze error expected"; exit 1; fi ;; run_err) eval $cmd # ent=`sed -n -e "/^ENTITY \([a-zA-Z0-9]*\) IS$/p" < $dir/$file \ # | cut -f 2 -d ' '` if [ x$entity = "x" ]; then entity=`$GET_ENTITIES $dir/$file` fi if [ "x$entity" = "x" ]; then echo "Cannot elaborate or run : no top level entity"; exit 1; else cmd="$GHDL -e $entity"; echo "$cmd"; eval $cmd; cmd="$GHDL -r $entity $stop --expect-failure --assert-level=error"; echo "$cmd"; eval $cmd; fi ;; *) echo "Unknown mode '$mode'"; exit 4; ;; esac if [ $do_inter_clean = "yes" ]; then if [ `expr $test_num % 16` = "0" ]; then delete_lib work; fi fi else echo "skip"; fi # Increment test_num test_num=`expr $test_num + 1` } build_compliant_test () { handle_test compile $@ } run_non_compliant_test () { handle_test ana_err $@ } run_compliant_test () { handle_test run $@ } run_err_non_compliant_test () { handle_test run_err $@ } # Decode options. skip=0 while [ $# -gt 0 ] do arg=$1; case $arg in -j) shift; skip=$1; ;; *) exit 1; ;; esac shift; done # Test group delete_lib work dir=vhdl-93/clifton-labs/compliant . $dir/compliant1.exp # ashenden compliant # OK dir=vhdl-93/ashenden/compliant . $dir/compliant.exp # OK dir=vhdl-93/ashenden/non_compliant . $dir/non_compliant.exp # Clean frequently the work library. do_inter_clean="yes" # OK. dir=vhdl-93/billowitch/compliant . $dir/compliant.exp # OK but FIXMEs dir=vhdl-93/billowitch/non_compliant/analyzer_failure . $dir/non_compliant.exp run_non_compliant_test () { handle_test run_err $@ } dir=vhdl-93/billowitch/non_compliant/simulator_failure . $dir/non_compliant.exp delete_lib project delete_lib random delete_lib utilities # Remove io files created by tests rm -f iofile.* *.file fopen*.out echo "Vests tests successful"