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++" 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