1c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger#!/bin/sh 2bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# //===--------------------------- testit ---------------------------------===// 3bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# // 4f5256e16dfc425c1d466f6308d4026d529ce9e0bHoward Hinnant# // The LLVM Compiler Infrastructure 5bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# // 6bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# // This file is distributed under the University of Illinois Open Source 7bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# // License. See LICENSE.TXT for details. 8bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# // 9bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant# //===--------------------------------------------------------------------===// 10bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 117fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantcurrentpath=`pwd` 127fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantorigpath=$currentpath 137fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantcurrentdir=`basename $currentpath` 147fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantwhile [ $currentdir != "test" ]; do 154dca0440f58228d6c7ef21ebea420aaa934c782bJoerg Sonnenberger if [ $currentdir = "/" ] 167fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant then 177fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant echo "current directory must be in or under \"test\"." 187fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant exit 1 197fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant fi 207fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant cd .. 217fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant currentpath=`pwd` 227fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant currentdir=`basename $currentpath` 237fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantdone 247fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant 257fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantcd .. 267fa77a701f066c745e3887b0938a5b039718d399Howard HinnantLIBCXX_ROOT=`pwd` 277fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantcd $origpath 287fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant 299efdc0bd5f22b3d6815862ddb14dbd4aed5042f0Richard Smithif [ -z "$CC" ] 30bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantthen 31b9344c218b0588e146181306a9743b6a4fd79717Dave Zarzycki if which xcrun >/dev/null 32b9344c218b0588e146181306a9743b6a4fd79717Dave Zarzycki then 33b9344c218b0588e146181306a9743b6a4fd79717Dave Zarzycki CC="xcrun clang++" 34b9344c218b0588e146181306a9743b6a4fd79717Dave Zarzycki else 35b9344c218b0588e146181306a9743b6a4fd79717Dave Zarzycki CC=clang++ 36b9344c218b0588e146181306a9743b6a4fd79717Dave Zarzycki fi 37bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantfi 38bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 392f78c0d9f98ec85ae8c5336aae107b5f938d571fMarshall Clowif [ -z "$CXX_LANG" ] 402f78c0d9f98ec85ae8c5336aae107b5f938d571fMarshall Clowthen 41928bb68bb209ea9218e277acba139284308349aeMarshall Clow CXX_LANG=c++11 422f78c0d9f98ec85ae8c5336aae107b5f938d571fMarshall Clowfi 43bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantif [ -z "$OPTIONS" ] 44bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantthen 452f78c0d9f98ec85ae8c5336aae107b5f938d571fMarshall Clow OPTIONS="-std=${CXX_LANG} -stdlib=libc++" 46bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantfi 4783e2c4d877fe2d7793868b1c6a5d9525a7c4d431Marshall ClowOPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support" 48bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 497fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantif [ -z "$HEADER_INCLUDE" ] 507fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantthen 517fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant HEADER_INCLUDE="-I$LIBCXX_ROOT/include" 527fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantfi 537fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant 547fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantif [ -z "$SOURCE_LIB" ] 557fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantthen 567fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant SOURCE_LIB="-L$LIBCXX_ROOT/lib" 577fa77a701f066c745e3887b0938a5b039718d399Howard Hinnantfi 587fa77a701f066c745e3887b0938a5b039718d399Howard Hinnant 598452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnantcase $TRIPLE in 608452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant *-*-mingw* | *-*-cygwin* | *-*-win*) 618452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant TEST_EXE=test.exe 628452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant ;; 638452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant *) 648452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant TEST_EXE=a.out 658452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant ;; 668452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnantesac 678452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant 6834cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenbergercase $(uname -s) in 6934cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger NetBSD) 7034cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger THREAD_FLAGS=-lpthread 7134cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger ;; 7234cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenbergeresac 7334cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger 74bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantFAIL=0 75bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantPASS=0 76bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantUNIMPLEMENTED=0 77bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantIMPLEMENTED_FAIL=0 78bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard HinnantIMPLEMENTED_PASS=0 79bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 80c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenbergerafunc() { 81bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fail=0 82bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant pass=0 83beee5e48b35b502e2c8c14e836151e96123be74dMarshall Clow if (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1) 84bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 85beee5e48b35b502e2c8c14e836151e96123be74dMarshall Clow for FILE in $(ls ${TEST_PREFIX}*fail.cpp); do 86c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1 87bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 888452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant rm ./$TEST_EXE 89bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant echo "$FILE should not compile" 90c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger fail=$(($fail+1)) 91bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant else 92c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger pass=$(($pass+1)) 93bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 94bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant done 95bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 96d2bb03207523e55aa2423570bcaaad03e779450cHoward Hinnant 97beee5e48b35b502e2c8c14e836151e96123be74dMarshall Clow if (ls ${TEST_PREFIX}*pass.cpp > /dev/null 2>&1) 98bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 99beee5e48b35b502e2c8c14e836151e96123be74dMarshall Clow for FILE in $(ls ${TEST_PREFIX}*pass.cpp); do 100c3a9b81e6762f4caf78d6616a0ea87542f6ef7a1Marshall Clow if [ "$VERBOSE" ] 101c3a9b81e6762f4caf78d6616a0ea87542f6ef7a1Marshall Clow then 102c3a9b81e6762f4caf78d6616a0ea87542f6ef7a1Marshall Clow echo "Running test: " $FILE 103c3a9b81e6762f4caf78d6616a0ea87542f6ef7a1Marshall Clow fi 10434cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) -o ./$TEST_EXE 105bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 1068452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant if ./$TEST_EXE 107bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 1088452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant rm ./$TEST_EXE 109c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger pass=$(($pass+1)) 110bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant else 111f2b2cc6440fa517d3bc29f78aebbb9106040c411David Chisnall echo "`pwd`/$FILE failed at run time" 11234cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) 113c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger fail=$(($fail+1)) 1148452d21f41d630b6ac173f6ce1139f1eb96a4dcbHoward Hinnant rm ./$TEST_EXE 115bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 116bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant else 117f2b2cc6440fa517d3bc29f78aebbb9106040c411David Chisnall echo "`pwd`/$FILE failed to compile" 11834cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) 119c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger fail=$(($fail+1)) 120bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 121bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant done 122bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 123bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 124bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if [ $fail -gt 0 ] 125bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 126bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant echo "failed $fail tests in `pwd`" 127c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1)) 128bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 129bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if [ $pass -gt 0 ] 130bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 131bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant echo "passed $pass tests in `pwd`" 132bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if [ $fail -eq 0 ] 133bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 134c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1)) 135bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 136bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 137bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if [ $fail -eq 0 -a $pass -eq 0 ] 138bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 139bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant echo "not implemented: `pwd`" 140c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger UNIMPLEMENTED=$(($UNIMPLEMENTED+1)) 141bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 142bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 143c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger FAIL=$(($FAIL+$fail)) 144c5e6aa5f5c7d2bbf7d9a3be8149f0c42a7af7415Joerg Sonnenberger PASS=$(($PASS+$pass)) 145bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 146bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant for FILE in * 147bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant do 148bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant if [ -d "$FILE" ]; 149bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant then 150bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant cd $FILE 15134cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger if [ $FILE = thread -o $1 = yes ]; then 15234cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger afunc yes 15334cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger else 15434cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger afunc no 15534cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenberger fi 156bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant cd .. 157bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant fi 158bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant done 159bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant} 160bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 16134cb066fa2c483e557ce18e9b2385b573c509fabJoerg Sonnenbergerafunc no 162bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 163bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "****************************************************" 164bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "Results for `pwd`:" 165bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "using `$CC --version`" 166c4cbb5b6b7626e4a8b74e0f61a4c5a88591f36a0Howard Hinnantecho "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB" 167bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "----------------------------------------------------" 168bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "sections without tests : $UNIMPLEMENTED" 169bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "sections with failures : $IMPLEMENTED_FAIL" 170bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "sections without failures: $IMPLEMENTED_PASS" 171bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho " + ----" 172bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))" 173bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "----------------------------------------------------" 174bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "number of tests failed : $FAIL" 175bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "number of tests passed : $PASS" 176bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho " + ----" 177bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "total number of tests : $(($FAIL+$PASS))" 178bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantecho "****************************************************" 179bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnant 180bc8d3f97eb5c958007f2713238472e0c1c8fe02Howard Hinnantexit $FAIL 181