blob: 821292efb5a36786be17c96966e4b444a6167fa8 [file] [log] [blame]
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +00001#!/bin/sh
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00002# //===--------------------------- testit ---------------------------------===//
3# //
Howard Hinnantf5256e12010-05-11 21:36:01 +00004# // The LLVM Compiler Infrastructure
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00005# //
6# // This file is distributed under the University of Illinois Open Source
7# // License. See LICENSE.TXT for details.
8# //
9# //===--------------------------------------------------------------------===//
10
Howard Hinnant7fa77a72012-12-09 00:12:14 +000011currentpath=`pwd`
12origpath=$currentpath
13currentdir=`basename $currentpath`
14while [ $currentdir != "test" ]; do
Joerg Sonnenberger4dca0442013-07-04 15:11:10 +000015 if [ $currentdir = "/" ]
Howard Hinnant7fa77a72012-12-09 00:12:14 +000016 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
Richard Smith9efdc0b2012-04-19 00:50:47 +000029if [ -z "$CC" ]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000030then
Dave Zarzyckib9344c22012-02-22 00:20:30 +000031 if which xcrun >/dev/null
32 then
33 CC="xcrun clang++"
34 else
35 CC=clang++
36 fi
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000037fi
38
Marshall Clow2f78c0d2014-01-14 17:00:40 +000039if [ -z "$CXX_LANG" ]
40then
Marshall Clow928bb682014-01-14 17:04:06 +000041 CXX_LANG=c++11
Marshall Clow2f78c0d2014-01-14 17:00:40 +000042fi
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000043if [ -z "$OPTIONS" ]
44then
Dan Albert1d4a1ed2016-05-25 22:36:09 -070045 OPTIONS="-std=${CXX_LANG} -stdlib=libc++"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000046fi
Marshall Clow83e2c4d2013-01-05 03:21:01 +000047OPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000048
Howard Hinnant7fa77a72012-12-09 00:12:14 +000049if [ -z "$HEADER_INCLUDE" ]
50then
51 HEADER_INCLUDE="-I$LIBCXX_ROOT/include"
52fi
53
54if [ -z "$SOURCE_LIB" ]
55then
56 SOURCE_LIB="-L$LIBCXX_ROOT/lib"
57fi
58
Howard Hinnant8452d212011-10-01 15:34:27 +000059case $TRIPLE in
60 *-*-mingw* | *-*-cygwin* | *-*-win*)
61 TEST_EXE=test.exe
62 ;;
63 *)
64 TEST_EXE=a.out
65 ;;
66esac
67
Joerg Sonnenberger34cb0662013-05-02 19:21:36 +000068case $(uname -s) in
69 NetBSD)
70 THREAD_FLAGS=-lpthread
71 ;;
72esac
73
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000074FAIL=0
75PASS=0
76UNIMPLEMENTED=0
77IMPLEMENTED_FAIL=0
78IMPLEMENTED_PASS=0
79
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +000080afunc() {
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000081 fail=0
82 pass=0
Marshall Clowbeee5e42014-01-15 16:28:42 +000083 if (ls ${TEST_PREFIX}*fail.cpp > /dev/null 2>&1)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000084 then
Marshall Clowbeee5e42014-01-15 16:28:42 +000085 for FILE in $(ls ${TEST_PREFIX}*fail.cpp); do
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +000086 if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE > /dev/null 2>&1
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000087 then
Howard Hinnant8452d212011-10-01 15:34:27 +000088 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000089 echo "$FILE should not compile"
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +000090 fail=$(($fail+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000091 else
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +000092 pass=$(($pass+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000093 fi
94 done
95 fi
Howard Hinnantd2bb0322010-08-22 01:04:38 +000096
Marshall Clowbeee5e42014-01-15 16:28:42 +000097 if (ls ${TEST_PREFIX}*pass.cpp > /dev/null 2>&1)
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000098 then
Marshall Clowbeee5e42014-01-15 16:28:42 +000099 for FILE in $(ls ${TEST_PREFIX}*pass.cpp); do
Marshall Clowc3a9b812013-03-26 15:28:33 +0000100 if [ "$VERBOSE" ]
101 then
102 echo "Running test: " $FILE
103 fi
Joerg Sonnenberger34cb0662013-05-02 19:21:36 +0000104 if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS) -o ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000105 then
Howard Hinnant8452d212011-10-01 15:34:27 +0000106 if ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000107 then
Howard Hinnant8452d212011-10-01 15:34:27 +0000108 rm ./$TEST_EXE
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000109 pass=$(($pass+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000110 else
David Chisnallf2b2cc62012-02-29 13:00:44 +0000111 echo "`pwd`/$FILE failed at run time"
Joerg Sonnenberger34cb0662013-05-02 19:21:36 +0000112 echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS)
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000113 fail=$(($fail+1))
Howard Hinnant8452d212011-10-01 15:34:27 +0000114 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000115 fi
116 else
David Chisnallf2b2cc62012-02-29 13:00:44 +0000117 echo "`pwd`/$FILE failed to compile"
Joerg Sonnenberger34cb0662013-05-02 19:21:36 +0000118 echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS $(test $1 = no || echo $THREAD_FLAGS)
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000119 fail=$(($fail+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000120 fi
121 done
122 fi
123
124 if [ $fail -gt 0 ]
125 then
126 echo "failed $fail tests in `pwd`"
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000127 IMPLEMENTED_FAIL=$(($IMPLEMENTED_FAIL+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000128 fi
129 if [ $pass -gt 0 ]
130 then
131 echo "passed $pass tests in `pwd`"
132 if [ $fail -eq 0 ]
133 then
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000134 IMPLEMENTED_PASS=$((IMPLEMENTED_PASS+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000135 fi
136 fi
137 if [ $fail -eq 0 -a $pass -eq 0 ]
138 then
139 echo "not implemented: `pwd`"
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000140 UNIMPLEMENTED=$(($UNIMPLEMENTED+1))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000141 fi
142
Joerg Sonnenbergerc5e6aa52013-04-23 19:53:24 +0000143 FAIL=$(($FAIL+$fail))
144 PASS=$(($PASS+$pass))
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000145
146 for FILE in *
147 do
148 if [ -d "$FILE" ];
149 then
150 cd $FILE
Joerg Sonnenberger34cb0662013-05-02 19:21:36 +0000151 if [ $FILE = thread -o $1 = yes ]; then
152 afunc yes
153 else
154 afunc no
155 fi
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000156 cd ..
157 fi
158 done
159}
160
Joerg Sonnenberger34cb0662013-05-02 19:21:36 +0000161afunc no
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000162
163echo "****************************************************"
164echo "Results for `pwd`:"
165echo "using `$CC --version`"
Howard Hinnantc4cbb5b2011-02-14 18:06:10 +0000166echo "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000167echo "----------------------------------------------------"
168echo "sections without tests : $UNIMPLEMENTED"
169echo "sections with failures : $IMPLEMENTED_FAIL"
170echo "sections without failures: $IMPLEMENTED_PASS"
171echo " + ----"
172echo "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))"
173echo "----------------------------------------------------"
174echo "number of tests failed : $FAIL"
175echo "number of tests passed : $PASS"
176echo " + ----"
177echo "total number of tests : $(($FAIL+$PASS))"
178echo "****************************************************"
179
180exit $FAIL