#!/bin/bash


# regression test  (need to run regrtest -ocaml in ../elsa before)
#
# runs check-oast on all ast files found (check their internal consistency)
# (check-oast requires ocaml with the SafeUnmarshal library, see check-oast.ml)
#
# currently the SafeUnmarshal consitency check works only on small files
# (it takes more than 2 hours to input a 4.7MB of marshaled ast on my machine)
# you might kill this if it gets to slow

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-oast [-skip <n>]"
    exit 1
}

skip=0
typeset -i count=0

#echo args: $#

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

for f in $ast_files ; do
    if [ $skip -gt $count ]; then
	echo "[$count] skip $f"
    else
	echo "[$count] test $f "
	size=$(ls -l $f | awk '{print $5;}')
	TIMEFORMAT="user time %U s size $size"
	time ./check-oast $f
	result=$?
	if [ ! $result -eq 0 ] ; then
	    echo check-oast exit $result on $f >&2
	    exit $result
	fi
    fi
    count=$count+1
done

