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