111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#!/bin/sh
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# //===--------------------------- testit ---------------------------------===//
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# //
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# //                     The LLVM Compiler Infrastructure
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# //
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# // This file is distributed under the University of Illinois Open Source
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# // License. See LICENSE.TXT for details.
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# //
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# //===--------------------------------------------------------------------===//
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcurrentpath=`pwd`
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertorigpath=$currentpath
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcurrentdir=`basename $currentpath`
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertwhile [ $currentdir != "test" ]; do
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if [ $currentdir = "/" ]
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		echo "current directory must be in or under \"test\"."
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		exit 1
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	cd ..
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	currentpath=`pwd`
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	currentdir=`basename $currentpath`
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertdone
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcd ..
2611cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertLIBCXX_ROOT=`pwd`
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcd $origpath
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$CC" ]
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if which xcrun >/dev/null
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		CC="xcrun clang++"
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	else
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		CC=clang++
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$CXX_LANG" ]
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    CXX_LANG=c++11
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$OPTIONS" ]
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	OPTIONS="-std=${CXX_LANG} -stdlib=libc++ -nostdinc++"
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
4711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertOPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support"
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$HEADER_INCLUDE" ]
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert       HEADER_INCLUDE="-I$LIBCXX_ROOT/include"
5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertif [ -z "$SOURCE_LIB" ]
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertthen
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert       SOURCE_LIB="-L$LIBCXX_ROOT/lib"
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertfi
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcase $TRIPLE in
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  *-*-mingw* | *-*-cygwin* | *-*-win*)
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	TEST_EXE=test.exe
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ;;
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert  *)
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    TEST_EXE=a.out
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    ;;
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertesac
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertcase $(uname -s) in
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert   NetBSD)
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert     THREAD_FLAGS=-lpthread
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert     ;;
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertesac
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7411cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertFAIL=0
7511cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertPASS=0
7611cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertUNIMPLEMENTED=0
7711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertIMPLEMENTED_FAIL=0
7811cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertIMPLEMENTED_PASS=0
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertafunc() {
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fail=0
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	pass=0
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1)
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		for FILE in $(ls ${TEST_PREFIX}*fail.cpp); do
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			then
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				rm ./$TEST_EXE
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				echo "$FILE should not compile"
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				fail=$(($fail+1))
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			else
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				pass=$(($pass+1))
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			fi
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		done
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if (ls ${TEST_PREFIX}*pass.cpp > /dev/null 2>&1)
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		for FILE in $(ls ${TEST_PREFIX}*pass.cpp); do
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert            if [ "$VERBOSE" ]
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert            then
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert             	echo "Running test: " $FILE
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert            fi
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) -o ./$TEST_EXE
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			then
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				if ./$TEST_EXE
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				then
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert					rm ./$TEST_EXE
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert					pass=$(($pass+1))
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				else
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert					echo "`pwd`/$FILE failed at run time"
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert					echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS)
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert					fail=$(($fail+1))
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert					rm ./$TEST_EXE
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				fi
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			else
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				echo "`pwd`/$FILE failed to compile"
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS)
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				fail=$(($fail+1))
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			fi
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		done
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if [ $fail -gt 0 ]
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		echo "failed $fail tests in `pwd`"
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1))
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if [ $pass -gt 0 ]
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		echo "passed $pass tests in `pwd`"
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		if [ $fail -eq 0 ]
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		then
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1))
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		fi
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	if [ $fail -eq 0 -a $pass -eq 0 ]
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	then
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		echo "not implemented:  `pwd`"
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		UNIMPLEMENTED=$(($UNIMPLEMENTED+1))
14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	fi
14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	FAIL=$(($FAIL+$fail))
14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	PASS=$(($PASS+$pass))
14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	for FILE in *
14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	do
14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		if [ -d "$FILE" ];
14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		then
15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			cd $FILE
15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			if [ $FILE = thread -o $1 = yes ]; then
15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				afunc yes
15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			else
15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert				afunc no
15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			fi
15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert			cd ..
15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert		fi
15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert	done
15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}
16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertafunc no
16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "****************************************************"
16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "Results for `pwd`:"
16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "using `$CC --version`"
16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB"
16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "----------------------------------------------------"
16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "sections without tests   : $UNIMPLEMENTED"
16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "sections with failures   : $IMPLEMENTED_FAIL"
17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "sections without failures: $IMPLEMENTED_PASS"
17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "                       +   ----"
17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))"
17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "----------------------------------------------------"
17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "number of tests failed   : $FAIL"
17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "number of tests passed   : $PASS"
17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "                       +   ----"
17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "total number of tests    : $(($FAIL+$PASS))"
17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertecho "****************************************************"
17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertexit $FAIL
181