--- /dev/null
+#!/bin/bash
+TEMP=`getopt -o c:d:m: -- "$@"`
+libdir="`pwd`/library"
+matitac="`pwd`/matitac.opt"
+devel="library"
+matitadep="./matitadep.opt"
+eval set -- "$TEMP"
+while true ; do
+ case "$1" in
+ -d) libdir="$2"; shift 2 ;;
+ -c) matitac="$2"; shift 2 ;;
+ --) shift; break ;;
+ *) echo "Usage: errors_bench [-c MATITAC_PATH] [-d LIBRARY_DIR] [-m MATITAMAKE_DEVEL]"; exit 1 ;;
+ esac
+done
+if ! [ -d "$libdir" ] ; then
+ echo "Can't find library directory '$libdir'"
+ exit 2
+fi
+if ! [ -x "$matitac" ] ; then
+ echo "Can't find executable Matita compiler '$matitac'"
+ exit 2
+fi
+
+ma_s=$(find $libdir -name "*.ma" -type f)
+sorted_ma_s=$($matitadep -order $ma_s)
+
+log="bench_disamberrors.txt"
+rm -f "$log"
+echo -e "# FILENAME\tOUTCOME\tEXPECTED_ERROR\tERRORS\tSPURIOUS_ERRORS" > $log
+# format: tab-separated fields:
+# FILENAME OUTCOME EXPECTED_ERROR ERRORS SPURIOUS_ERRORS
+# field descriptions:
+# OUTCOME is one of {"OK","KO","UNKNOWN(n)"}, n is an exit code
+# EXPECTED_ERROR is FROM-TO, where FROM and TO are character counts
+# ERRORS, same format as above (FROM-TO)
+# SPURIOUS_ERRORS, same format as above (FROM-TO)
+log_outcome ()
+{
+ echo -e "$1\t$2\t$3\t$4\t$5" >> "$log"
+}
+
+sorted_ma_s="datatypes/compare.ma logic/connectives.ma higher_order_defs/relations.ma"
+for ma in $sorted_ma_s ; do
+ mo=`echo $ma | sed 's/\.ma$/.mo/'`
+ make -C $libdir $mo # ensure deps for $mo have been built
+ rotten_mas=$(ls $libdir/$ma.*.rottened)
+ for rotten_ma in $rotten_mas ; do
+ rotten_ma=$(echo $rotten_ma | sed s@^$(pwd)/@@) # prettier names
+ echo "$rotten_ma ..."
+ tmp="bench_disamberrors.tmp"
+ $matitac $rotten_ma &> $tmp
+ outcome=$?
+ if [ "$outcome" = 3 ] ; then
+ outcome="KO"
+ elif [ "$outcome" = 0 ] ; then
+ outcome="OK"
+ else
+ outcome="UNKNOWN($outcome)"
+ fi
+ supposed_error=$(grep ^error-at: $rotten_ma | cut -f 2 -d' ')
+ raw_errors=$(grep '^*Error at' $tmp | sed 's/:.*$//' | cut -f 3 -d' ')
+ errors=""
+ for e in $raw_errors ; do
+ if ! [ -z "$errors" ] ; then errors="$errors," ; fi
+ errors="$errors$e"
+ done
+ raw_spurious_errors=$(grep '^*(Spurious?) Error at' $tmp | sed 's/:.*$//' | cut -f 4 -d' ')
+ spurious_errors=""
+ for e in $raw_spurious_errors ; do
+ if ! [ -z "$spurious_errors" ] ; then spurious_errors="$spurious_errors," ; fi
+ spurious_errors="$spurious_errors$e"
+ done
+ log_outcome $rotten_ma $outcome $supposed_error $errors $spurious_errors
+ done
+done
+
+echo "See $log for benchmark results"