blob: 748c24666ea110a9c6618e5e89c02ff5c6dc96f2 [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
43
Howard Hinnant7fa77a72012-12-09 00:12:14 +000044if [ -z "$HEADER_INCLUDE" ]
45then
46 HEADER_INCLUDE="-I$LIBCXX_ROOT/include"
47fi
48
49if [ -z "$SOURCE_LIB" ]
50then
51 SOURCE_LIB="-L$LIBCXX_ROOT/lib"
52fi
53
Howard Hinnant8452d212011-10-01 15:34:27 +000054case $TRIPLE in
55 *-*-mingw* | *-*-cygwin* | *-*-win*)
56 TEST_EXE=test.exe
57 ;;
58 *)
59 TEST_EXE=a.out
60 ;;
61esac
62
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000063FAIL=0
64PASS=0
65UNIMPLEMENTED=0
66IMPLEMENTED_FAIL=0
67IMPLEMENTED_PASS=0
68
69function afunc
70{
71 fail=0
72 pass=0
73 if (ls *.fail.cpp &> /dev/null)
74 then
75 for FILE in $(ls *.fail.cpp); do
Howard Hinnant8452d212011-10-01 15:34:27 +000076 if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE &> /dev/null
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000077 then
Howard Hinnant8452d212011-10-01 15:34:27 +000078 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000079 echo "$FILE should not compile"
80 let "fail+=1"
81 else
82 let "pass+=1"
83 fi
84 done
85 fi
Howard Hinnantd2bb0322010-08-22 01:04:38 +000086
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000087 if (ls *.pass.cpp &> /dev/null)
88 then
89 for FILE in $(ls *.pass.cpp); do
Howard Hinnant8452d212011-10-01 15:34:27 +000090 if $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS -o ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000091 then
Howard Hinnant8452d212011-10-01 15:34:27 +000092 if ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000093 then
Howard Hinnant8452d212011-10-01 15:34:27 +000094 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000095 let "pass+=1"
96 else
David Chisnallf2b2cc62012-02-29 13:00:44 +000097 echo "`pwd`/$FILE failed at run time"
98 echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +000099 let "fail+=1"
Howard Hinnant8452d212011-10-01 15:34:27 +0000100 rm ./$TEST_EXE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000101 fi
102 else
David Chisnallf2b2cc62012-02-29 13:00:44 +0000103 echo "`pwd`/$FILE failed to compile"
104 echo "Compile line was:" $CC $OPTIONS $HEADER_INCLUDE $SOURCE_LIB $FILE $LIBS
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000105 let "fail+=1"
106 fi
107 done
108 fi
109
110 if [ $fail -gt 0 ]
111 then
112 echo "failed $fail tests in `pwd`"
113 let "IMPLEMENTED_FAIL+=1"
114 fi
115 if [ $pass -gt 0 ]
116 then
117 echo "passed $pass tests in `pwd`"
118 if [ $fail -eq 0 ]
119 then
120 let "IMPLEMENTED_PASS+=1"
121 fi
122 fi
123 if [ $fail -eq 0 -a $pass -eq 0 ]
124 then
125 echo "not implemented: `pwd`"
126 let "UNIMPLEMENTED+=1"
127 fi
128
129 let "FAIL+=$fail"
130 let "PASS+=$pass"
131
132 for FILE in *
133 do
134 if [ -d "$FILE" ];
135 then
136 cd $FILE
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000137 afunc
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000138 cd ..
139 fi
140 done
141}
142
143afunc
144
145echo "****************************************************"
146echo "Results for `pwd`:"
147echo "using `$CC --version`"
Howard Hinnantc4cbb5b2011-02-14 18:06:10 +0000148echo "with $OPTIONS $HEADER_INCLUDE $SOURCE_LIB"
Howard Hinnantbc8d3f92010-05-11 19:42:16 +0000149echo "----------------------------------------------------"
150echo "sections without tests : $UNIMPLEMENTED"
151echo "sections with failures : $IMPLEMENTED_FAIL"
152echo "sections without failures: $IMPLEMENTED_PASS"
153echo " + ----"
154echo "total number of sections : $(($UNIMPLEMENTED+$IMPLEMENTED_FAIL+$IMPLEMENTED_PASS))"
155echo "----------------------------------------------------"
156echo "number of tests failed : $FAIL"
157echo "number of tests passed : $PASS"
158echo " + ----"
159echo "total number of tests : $(($FAIL+$PASS))"
160echo "****************************************************"
161
162exit $FAIL