Home | History | Annotate | Download | only in test
      1 #!/bin/sh
      2 # //===--------------------------- testit ---------------------------------===//
      3 # //
      4 # //                     The LLVM Compiler Infrastructure
      5 # //
      6 # // This file is distributed under the University of Illinois Open Source
      7 # // License. See LICENSE.TXT for details.
      8 # //
      9 # //===--------------------------------------------------------------------===//
     10 
     11 currentpath=`pwd`
     12 origpath=$currentpath
     13 currentdir=`basename $currentpath`
     14 while [ $currentdir != "test" ]; do
     15 	if [ $currentdir = "/" ]
     16 	then
     17 		echo "current directory must be in or under \"test\"."
     18 		exit 1
     19 	fi
     20 	cd ..
     21 	currentpath=`pwd`
     22 	currentdir=`basename $currentpath`
     23 done
     24 
     25 cd ..
     26 LIBCXX_ROOT=`pwd`
     27 cd $origpath
     28 
     29 if [ -z "$CC" ]
     30 then
     31 	if which xcrun >/dev/null
     32 	then
     33 		CC="xcrun clang++"
     34 	else
     35 		CC=clang++
     36 	fi
     37 fi
     38 
     39 if [ -z "$CXX_LANG" ]
     40 then
     41     CXX_LANG=c++11
     42 fi
     43 if [ -z "$OPTIONS" ]
     44 then
     45 	OPTIONS="-std=${CXX_LANG} -stdlib=libc++ -nostdinc++"
     46 fi
     47 OPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support"
     48 
     49 if [ -z "$HEADER_INCLUDE" ]
     50 then
     51        HEADER_INCLUDE="-I$LIBCXX_ROOT/include"
     52 fi
     53 
     54 if [ -z "$SOURCE_LIB" ]
     55 then
     56        SOURCE_LIB="-L$LIBCXX_ROOT/lib"
     57 fi
     58 
     59 case $TRIPLE in
     60   *-*-mingw* | *-*-cygwin* | *-*-win*)
     61 	TEST_EXE=test.exe
     62     ;;
     63   *)
     64     TEST_EXE=a.out
     65     ;;
     66 esac
     67 
     68 case $(uname -s) in
     69    NetBSD)
     70      THREAD_FLAGS=-lpthread
     71      ;;
     72 esac
     73 
     74 FAIL=0
     75 PASS=0
     76 UNIMPLEMENTED=0
     77 IMPLEMENTED_FAIL=0
     78 IMPLEMENTED_PASS=0
     79 
     80 afunc() {
     81 	fail=0
     82 	pass=0
     83 	if (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1)
     84 	then
     85 		for FILE in $(ls ${TEST_PREFIX}*fail.cpp); do
     86 			if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1
     87 			then
     88 				rm ./$TEST_EXE
     89 				echo "$FILE should not compile"
     90 				fail=$(($fail+1))
     91 			else
     92 				pass=$(($pass+1))
     93 			fi
     94 		done
     95 	fi
     96 
     97 	if (ls ${TEST_PREFIX}*pass.cpp > /dev/null 2>&1)
     98 	then
     99 		for FILE in $(ls ${TEST_PREFIX}*pass.cpp); do
    100             if [ "$VERBOSE" ]
    101             then
    102              	echo "Running test: " $FILE
    103             fi
    104 			if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) -o ./$TEST_EXE
    105 			then
    106 				if ./$TEST_EXE
    107 				then
    108 					rm ./$TEST_EXE
    109 					pass=$(($pass+1))
    110 				else
    111 					echo "`pwd`/$FILE failed at run time"
    112 					echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS)
    113 					fail=$(($fail+1))
    114 					rm ./$TEST_EXE
    115 				fi
    116 			else
    117 				echo "`pwd`/$FILE failed to compile"
    118 				echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS)
    119 				fail=$(($fail+1))
    120 			fi
    121 		done
    122 	fi
    123 
    124 	if [ $fail -gt 0 ]
    125 	then
    126 		echo "failed $fail tests in `pwd`"
    127 		IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1))
    128 	fi
    129 	if [ $pass -gt 0 ]
    130 	then
    131 		echo "passed $pass tests in `pwd`"
    132 		if [ $fail -eq 0 ]
    133 		then
    134 			IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1))
    135 		fi
    136 	fi
    137 	if [ $fail -eq 0 -a $pass -eq 0 ]
    138 	then
    139 		echo "not implemented:  `pwd`"
    140 		UNIMPLEMENTED=$(($UNIMPLEMENTED+1))
    141 	fi
    142 
    143 	FAIL=$(($FAIL+$fail))
    144 	PASS=$(($PASS+$pass))
    145 
    146 	for FILE in *
    147 	do
    148 		if [ -d "$FILE" ];
    149 		then
    150 			cd $FILE
    151 			if [ $FILE = thread -o $1 = yes ]; then
    152 				afunc yes
    153 			else
    154 				afunc no
    155 			fi
    156 			cd ..
    157 		fi
    158 	done
    159 }
    160 
    161 afunc no
    162 
    163 echo "****************************************************"
    164 echo "Results for `pwd`:"
    165 echo "using `$CC --version`"
    166 echo "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB"
    167 echo "----------------------------------------------------"
    168 echo "sections without tests   : $UNIMPLEMENTED"
    169 echo "sections with failures   : $IMPLEMENTED_FAIL"
    170 echo "sections without failures: $IMPLEMENTED_PASS"
    171 echo "                       +   ----"
    172 echo "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))"
    173 echo "----------------------------------------------------"
    174 echo "number of tests failed   : $FAIL"
    175 echo "number of tests passed   : $PASS"
    176 echo "                       +   ----"
    177 echo "total number of tests    : $(($FAIL+$PASS))"
    178 echo "****************************************************"
    179 
    180 exit $FAIL
    181