#!/usr/bin/env bash

if [ -z "$BASH" ] ; then
    exec bash $0 $@
fi

case "$(command -p uname)" in
    CYGWIN*) CP="${CLASSPATH};." ;;
    *)       CP="${CLASSPATH}:." ;;
esac

echo -e "\nAST regression test"
echo "****************************************"

rm -rf foo
rm -rf base *.class *.java

if java jak2java.Main -v something ; then
    :
else
   rm -f -r -- copy
   mkdir copy
   cp g0 *.correct *.jak *.jakk copy
   cd copy
   for i in * ; do
      sed -es/jak2java.Lang/jak2java.*/g $i > tmp
      sed -es/Lang.//g tmp > $i
   done
fi


echo -e "\nGenerating base case ..."

cp g0 g0.java
javac g0.java
java -cp "${CP}" g0 foo
mv foo base

echo -e "\nTesting g77"
java jak2java.Main g77.jakk
javac -classpath "${CP}" g77.java
java -cp "${CP}" g77 > junk
if diff -w junk g77.correct ; then 
   echo "Test succeeded for" $f
   rm junk
else
   echo "Test failed for" $f
   rm junk
   exit 1
fi


for f in g?.jak g??.jak ; do
	root=${f%.jak}
	echo -e "\nTesting" $f "..."

	rm -rf g0gen* g0.class foo

	echo -e "\tconverting" $f "to" $root.java "..."
	java jak2java.Main $f

	echo -e "\tcompiling" $root.java "..."
	javac $root.java

	echo -e "\tcreating g0gen.java"
	java -cp "${CP}" $root >g0gen.java

	echo -e "\tcompiling g0gen.java"
	javac g0gen.java

	echo -e "\trunning g0gen"
	java -cp "${CP}" g0 foo

	if diff -w base/makefile foo/makefile ; then
		echo "Test succeeded for" $f
	else
		echo "Test failed for" $f
		exit 1
	fi
done

rm -rf foo base
echo -e "\nAST regression tests succeeded."
