blob: 945c70046248de0b2150bfb10decc8ffe2617bca [file] [log] [blame]
Howard Hinnantbc8d3f92010-05-11 19:42:16 +00001#!/bin/bash
2# //===--------------------------- 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
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
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
39if [ -z "$OPTIONS" ]
40then
Howard Hinnantc4cbb5b2011-02-14 18:06:10 +000041 OPTIONS="-std=c++0x -stdlib=libc++"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000042fi
Marshall Clow83e2c4d2013-01-05 03:21:01 +000043OPTIONS="$OPTIONS -I$LIBCXX_ROOT/test/support"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000044
Howard Hinnant7fa77a72012-12-09 00:12:14 +000045if [ -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
Howard Hinnant8452d212011-10-01 15:34:27 +000055case $TRIPLE in
56 *-*-mingw* | *-*-cygwin* | *-*-win*)
57 TEST_EXE=test.exe
58 ;;
59 *)
60 TEST_EXE=a.out
61 ;;
62esac
63
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000064FAIL=0
65PASS=0
66UNIMPLEMENTED=0
67IMPLEMENTED_FAIL=0
68IMPLEMENTED_PASS=0
69
70function afunc
71{
72 fail=0
73 pass=0
74 if (ls *.fail.cpp &> /dev/null)
75 then
76 for FILE in $(ls *.fail.cpp); do
Howard Hinnant8452d212011-10-01 15:34:27 +000077 if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE &> /dev/null
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000078 then
Howard Hinnant8452d212011-10-01 15:34:27 +000079 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000080 echo "$FILE should not compile"
81 let "fail+=1"
82 else
83 let "pass+=1"
84 fi
85 done
86 fi
Howard Hinnantd2bb0322010-08-22 01:04:38 +000087
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000088 if (ls *.pass.cpp &> /dev/null)
89 then
90 for FILE in $(ls *.pass.cpp); do
Howard Hinnant8452d212011-10-01 15:34:27 +000091 if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000092 then
Howard Hinnant8452d212011-10-01 15:34:27 +000093 if ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000094 then
Howard Hinnant8452d212011-10-01 15:34:27 +000095 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000096 let "pass+=1"
97 else
David Chisnallf2b2cc62012-02-29 13:00:44 +000098 echo "`pwd`/$FILE failed at run time"
99 echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000100 let "fail+=1"
Howard Hinnant8452d212011-10-01 15:34:27 +0000101 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000102 fi
103 else
David Chisnallf2b2cc62012-02-29 13:00:44 +0000104 echo "`pwd`/$FILE failed to compile"
105 echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000106 let "fail+=1"
107 fi
108 done
109 fi
110
111 if [ $fail -gt 0 ]
112 then
113 echo "failed $fail tests in `pwd`"
114 let "IMPLEMENTED_FAIL+=1"
115 fi
116 if [ $pass -gt 0 ]
117 then
118 echo "passed $pass tests in `pwd`"
119 if [ $fail -eq 0 ]
120 then
121 let "IMPLEMENTED_PASS+=1"
122 fi
123 fi
124 if [ $fail -eq 0 -a $pass -eq 0 ]
125 then
126 echo "not implemented: `pwd`"
127 let "UNIMPLEMENTED+=1"
128 fi
129
130 let "FAIL+=$fail"
131 let "PASS+=$pass"
132
133 for FILE in *
134 do
135 if [ -d "$FILE" ];
136 then
137 cd $FILE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000138 afunc
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000139 cd ..
140 fi
141 done
142}
143
144afunc
145
146echo "****************************************************"
147echo "Results for `pwd`:"
148echo "using `$CC --version`"
Howard Hinnantc4cbb5b2011-02-14 18:06:10 +0000149echo "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000150echo "----------------------------------------------------"
151echo "sections without tests : $UNIMPLEMENTED"
152echo "sections with failures : $IMPLEMENTED_FAIL"
153echo "sections without failures: $IMPLEMENTED_PASS"
154echo " + ----"
155echo "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))"
156echo "----------------------------------------------------"
157echo "number of tests failed : $FAIL"
158echo "number of tests passed : $PASS"
159echo " + ----"
160echo "total number of tests : $(($FAIL+$PASS))"
161echo "****************************************************"
162
163exit $FAIL