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