#!/bin/bash

# regression test  (need to run regrtest -ocaml in ../elsa before)
#
# run ast_graph and dot on all ast files found
#
# takes a long time because doing graph layout with dot is time consuming
# to improve to timings you can patch dot to exit after parsing the dot file
# call this dot-parseonly, place it into the PATH and use the option -parse


trap "echo Interupted; exit 1" SIGINT


# ast_files=$(find .. -name \*.oast -print)

ast_files_1_1=$(ls ../elsa/in/t*.oast)
ast_files_1_2=$(ls ../elsa/in/d*.oast)
ast_files_1_3=$(ls ../elsa/in/k*.oast)
ast_files_1_4=$(ls ../elsa/in/s*.oast)
ast_files_1="$ast_files_1_1 $ast_files_1_2 $ast_files_1_3 $ast_files_1_4"
ast_files_2=$(ls ../elsa/in/c/t*.oast)
ast_files_3=$(ls ../elsa/in/c/d*.oast)
ast_files_4=$(ls ../elsa/in/c/k*.oast)
ast_files_5=$(ls ../elsa/in/c99/*.oast)
ast_files_6=$(ls ../elsa/in/gnu/bugs/*.oast)
ast_files_7=$(ls ../elsa/in/gnu/cil/*.oast)
ast_files_8=$(ls ../elsa/in/gnu/g*.oast)
ast_files_9=$(ls ../elsa/in/gnu/*.oast)
ast_files_10=$(ls ../elsa/in/kandr/*.oast)
ast_files_11=$(ls ../elsa/in/msvc/*.oast)
ast_files_12=$(ls ../elsa/in/std/*.oast)
ast_files_13=$(ls ../elsa/in/big/*.oast)

ast_files="$ast_files_1 $ast_files_2 $ast_files_3 $ast_files_4 $ast_files_5 $ast_files_6 $ast_files_7 $ast_files_8 $ast_files_9 $ast_files_10 $ast_files_11 $ast_files_12 $ast_files_13"


function usage(){
    echo "usage: regtest-graph [-parse] [-skip <n>]"
    exit 1
}

skip=0
typeset -i count=0

dot=dot

#echo args: $#

while [ $# -ge 1 ] ; do
    case $1 in
	-parse)
	    dot=dot-parseonly;;
	-skip)	
	    if [ $# -lt 2 ] ; then
		usage
	    fi
	    skip=$2
	    shift;;
	*)  usage;;
    esac
    shift
done

#exit

for f in $ast_files ; do
    if [ $skip -gt $count ]; then
	echo "[$count] skip $f"
    else
	echo "[$count] test $f"
	./ast_graph $f -o $f.dot
	result=$?
	if [ ! $result -eq 0 ] ; then
	    echo ast_graph exit $result on $f >&2
	    exit $result
	fi
	echo $f | grep -q big
	if [ $? = 0 ] ; then
	    $dot -v -Tps $f.dot -o $f.ps
	    result=$?
	else
	    $dot -Tps $f.dot -o $f.ps
	    result=$?
	fi
	result=$?
	if [ ! $result -eq 0 ] ; then
	    echo $dot exit $result on $f >&2
	    exit $result
	fi
    fi
    count=$count+1
done

