| #!/bin/sh | |
| # //===--------------------------- testit ---------------------------------===// | |
| # // | |
| # // The LLVM Compiler Infrastructure | |
| # // | |
| # // This file is distributed under the University of Illinois Open Source | |
| # // License. See LICENSE.TXT for details. | |
| # // | |
| # //===--------------------------------------------------------------------===// | |
| 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` | |
| done | |
| cd .. | |
| LIBCXX_ROOT=`pwd` | |
| cd $origpath | |
| if [ -z "$CC" ] | |
| then | |
| if which xcrun >/dev/null | |
| then | |
| CC="xcrun clang++" | |
| else | |
| CC=clang++ | |
| fi | |
| fi | |
| if [ -z "$CXX_LANG" ] | |
| then | |
| CXX_LANG=c++11 | |
| fi | |
| if [ -z "$OPTIONS" ] | |
| then | |
| OPTIONS="-std=${CXX_LANG} -stdlib=libc++" | |
| fi | |
| OPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support" | |
| if [ -z "$HEADER_INCLUDE" ] | |
| then | |
| HEADER_INCLUDE="-I$LIBCXX_ROOT/include" | |
| fi | |
| if [ -z "$SOURCE_LIB" ] | |
| then | |
| SOURCE_LIB="-L$LIBCXX_ROOT/lib" | |
| fi | |
| case $TRIPLE in | |
| *-*-mingw* | *-*-cygwin* | *-*-win*) | |
| TEST_EXE=test.exe | |
| ;; | |
| *) | |
| TEST_EXE=a.out | |
| ;; | |
| esac | |
| case $(uname -s) in | |
| NetBSD) | |
| THREAD_FLAGS=-lpthread | |
| ;; | |
| esac | |
| FAIL=0 | |
| PASS=0 | |
| UNIMPLEMENTED=0 | |
| IMPLEMENTED_FAIL=0 | |
| IMPLEMENTED_PASS=0 | |
| afunc() { | |
| fail=0 | |
| pass=0 | |
| if (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1) | |
| then | |
| for FILE in $(ls ${TEST_PREFIX}*fail.cpp); do | |
| if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1 | |
| then | |
| rm ./$TEST_EXE | |
| echo "$FILE should not compile" | |
| fail=$(($fail+1)) | |
| else | |
| pass=$(($pass+1)) | |
| fi | |
| done | |
| fi | |
| if (ls ${TEST_PREFIX}*pass.cpp > /dev/null 2>&1) | |
| then | |
| for FILE in $(ls ${TEST_PREFIX}*pass.cpp); do | |
| if [ "$VERBOSE" ] | |
| then | |
| echo "Running test: " $FILE | |
| fi | |
| if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) -o ./$TEST_EXE | |
| then | |
| if ./$TEST_EXE | |
| then | |
| rm ./$TEST_EXE | |
| pass=$(($pass+1)) | |
| else | |
| echo "`pwd`/$FILE failed at run time" | |
| echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) | |
| fail=$(($fail+1)) | |
| rm ./$TEST_EXE | |
| fi | |
| else | |
| echo "`pwd`/$FILE failed to compile" | |
| echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) | |
| fail=$(($fail+1)) | |
| fi | |
| done | |
| fi | |
| if [ $fail -gt 0 ] | |
| then | |
| echo "failed $fail tests in `pwd`" | |
| IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1)) | |
| fi | |
| if [ $pass -gt 0 ] | |
| then | |
| echo "passed $pass tests in `pwd`" | |
| if [ $fail -eq 0 ] | |
| then | |
| IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1)) | |
| fi | |
| fi | |
| if [ $fail -eq 0 -a $pass -eq 0 ] | |
| then | |
| echo "not implemented: `pwd`" | |
| UNIMPLEMENTED=$(($UNIMPLEMENTED+1)) | |
| fi | |
| FAIL=$(($FAIL+$fail)) | |
| PASS=$(($PASS+$pass)) | |
| for FILE in * | |
| do | |
| if [ -d "$FILE" ]; | |
| then | |
| cd $FILE | |
| if [ $FILE = thread -o $1 = yes ]; then | |
| afunc yes | |
| else | |
| afunc no | |
| fi | |
| cd .. | |
| fi | |
| done | |
| } | |
| afunc no | |
| 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 |