#!/bin/bash
# //===--------------------------- testit ---------------------------------===//
# //
# //                     The LLVM Compiler Infrastructure
# //
# // This file is distributed under the University of Illinois Open Source
# // License. See LICENSE.TXT for details.
# //
# //===--------------------------------------------------------------------===//

if [ -z $CC ]
then
	CC=clang++
fi

if [ -z "$OPTIONS" ]
then
	OPTIONS="-std=c++0x -stdlib=libc++"
fi

case $TRIPLE in
  *-*-mingw* | *-*-cygwin* | *-*-win*)
	TEST_EXE=test.exe
    ;;
  *)
    TEST_EXE=a.out
    ;;
esac

FAIL=0
PASS=0
UNIMPLEMENTED=0
IMPLEMENTED_FAIL=0
IMPLEMENTED_PASS=0

function afunc
{
	fail=0
	pass=0
	if (ls *.fail.cpp &> /dev/null)
	then
		for FILE in $(ls *.fail.cpp); do
			if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE &> /dev/null
			then
				rm ./$TEST_EXE
				echo "$FILE should not compile"
				let "fail+=1"
			else
				let "pass+=1"
			fi
		done
	fi

	if (ls *.pass.cpp &> /dev/null)
	then
		for FILE in $(ls *.pass.cpp); do
			if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE
			then
				if ./$TEST_EXE
				then
					rm ./$TEST_EXE
					let "pass+=1"
				else
					echo "$FILE failed at run time"
					let "fail+=1"
					rm ./$TEST_EXE
				fi
			else
				echo "$FILE failed to compile"
				let "fail+=1"
			fi
		done
	fi

	if [ $fail -gt 0 ]
	then
		echo "failed $fail tests in `pwd`"
		let "IMPLEMENTED_FAIL+=1"
	fi
	if [ $pass -gt 0 ]
	then
		echo "passed $pass tests in `pwd`"
		if [ $fail -eq 0 ]
		then
			let "IMPLEMENTED_PASS+=1"
		fi
	fi
	if [ $fail -eq 0 -a $pass -eq 0 ]
	then
		echo "not implemented:  `pwd`"
		let "UNIMPLEMENTED+=1"
	fi

	let "FAIL+=$fail"
	let "PASS+=$pass"

	for FILE in *
	do
		if [ -d "$FILE" ];
		then
			cd $FILE
			afunc
			cd ..
		fi
	done
}

afunc

echo "****************************************************"
echo "Results for `pwd`:"
echo "using `$CC --version`"
echo "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB"
echo "----------------------------------------------------"
echo "sections without tests   : $UNIMPLEMENTED"
echo "sections with failures   : $IMPLEMENTED_FAIL"
echo "sections without failures: $IMPLEMENTED_PASS"
echo "                       +   ----"
echo "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))"
echo "----------------------------------------------------"
echo "number of tests failed   : $FAIL"
echo "number of tests passed   : $PASS"
echo "                       +   ----"
echo "total number of tests    : $(($FAIL+$PASS))"
echo "****************************************************"

exit $FAIL
