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