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

BACKUP="../"

currentpath=`pwd`
origpath=$currentpath
currentdir=`basename $currentpath`
while [ $currentdir != "test" ]; do
	if [ $currentdir == "/" ]
	then
		echo "current directory must be in or under \"test\"."
		exit 1
	fi
	cd ..
	currentpath=`pwd`
	currentdir=`basename $currentpath`
	BACKUP="../"$BACKUP
done
cd $origpath

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

auto_header=0

if [ -z $HEADER_INCLUDE ]
then
	HEADER_INCLUDE=$BACKUP"include"
	let "auto_header+=1"
fi

auto_lib=0

SOURCE_LIB=/usr/lib/libc++.dylib
#SOURCE_LIB=/Users/hinnant/Development/libcpp/lib/libc++.a

if [ -z $SOURCE_LIB ]
then
	SOURCE_LIB=$BACKUP"lib/libc++.dylib"
	let "auto_lib+=1"
fi

if [ -z "$OPTIONS" ]
then
	OPTIONS="-nostdinc++ -nodefaultlibs /usr/lib/libSystem.B.dylib -arch `arch`"
fi

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 -I$HEADER_INCLUDE $SOURCE_LIB $FILE &> /dev/null
			then
				rm ./a.out
				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 -I$HEADER_INCLUDE $SOURCE_LIB $FILE
			then
				if ./a.out
				then
					rm ./a.out
					let "pass+=1"
				else
					echo "$FILE failed at run time"
					let "fail+=1"
					rm ./a.out
				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
			if [ $auto_header -eq 1 ]
			then
				SAVE_HEADER_INCLUDE=$HEADER_INCLUDE
				HEADER_INCLUDE="../"$HEADER_INCLUDE
			fi
			if [ $auto_lib -eq 1 ]
			then
				SAVE_SOURCE_LIB=$SOURCE_LIB
				SOURCE_LIB="../"$SOURCE_LIB
			fi

			afunc

			if [ $auto_header -eq 1 ]
			then
				HEADER_INCLUDE=${HEADER_INCLUDE:3}
			fi
			if [ $auto_lib -eq 1 ]
			then
				SOURCE_LIB=${SOURCE_LIB:3}
			fi
			cd ..
		fi
	done
}

afunc

echo "****************************************************"
echo "Results for `pwd`:"
echo "using `$CC --version`"
echo "with $OPTIONS -I$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
