00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef TEUCHOS_UNIT_TEST_HELPERS_HPP
00030 #define TEUCHOS_UNIT_TEST_HELPERS_HPP
00031
00032
00039 #include "Teuchos_UnitTestBase.hpp"
00040
00041
00043 #define TEUCHOS_UNIT_TEST(TEST_GROUP, TEST_NAME) \
00044 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
00045 { \
00046 public: \
00047 TEST_GROUP##_##TEST_NAME##_UnitTest() \
00048 : Teuchos::UnitTestBase( #TEST_GROUP, #TEST_NAME ) \
00049 {} \
00050 virtual void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
00051 virtual std::string unitTestFile() const { return __FILE__; } \
00052 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
00053 }; \
00054 \
00055 TEST_GROUP##_##TEST_NAME##_UnitTest \
00056 instance_##TEST_GROUP##_##TEST_NAME##_UnitTest; \
00057 \
00058 void TEST_GROUP##_##TEST_NAME##_UnitTest::runUnitTestImpl( \
00059 Teuchos::FancyOStream &out, bool &success ) const \
00060
00061
00063 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_DECL(TEST_GROUP, TEST_NAME, TYPE) \
00064 template<class TYPE> \
00065 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
00066 { \
00067 public: \
00068 TEST_GROUP##_##TEST_NAME##_UnitTest(const std::string& typeName) \
00069 : Teuchos::UnitTestBase( std::string(#TEST_GROUP)+"_"+typeName, #TEST_NAME ) \
00070 {} \
00071 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
00072 virtual std::string unitTestFile() const { return __FILE__; } \
00073 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
00074 }; \
00075 \
00076 template<class TYPE> \
00077 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>::runUnitTestImpl( \
00078 Teuchos::FancyOStream &out, bool &success ) const \
00079
00080
00081 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, TYPE) \
00082 \
00083 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE>; \
00084 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE> \
00085 instance_##TEST_GROUP##_##TYPE##_##TEST_NAME##_UnitTest(#TYPE);
00086
00087
00088 #ifdef HAVE_TEUCHOS_FLOAT
00089 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)\
00090 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, float)
00091 #else
00092 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)
00093 #endif
00094
00095 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)\
00096 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, double)
00097
00098 #if defined(HAVE_TEUCHOS_COMPLEX) && defined(HAVE_TEUCHOS_FLOAT)
00099 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)\
00100 typedef std::complex<float> ComplexFloat; \
00101 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexFloat)
00102 #else
00103 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)
00104 #endif
00105
00106 #ifdef HAVE_TEUCHOS_COMPLEX
00107 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)\
00108 typedef std::complex<double> ComplexDouble; \
00109 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexDouble)
00110 #else
00111 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
00112 #endif
00113
00114
00118 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_REAL_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
00119 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
00120 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)
00121
00122
00124 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
00125 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
00126 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME) \
00127 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME) \
00128 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
00129
00130
00132 #define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
00133 template<class TYPE1, class TYPE2> \
00134 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
00135 { \
00136 public: \
00137 TEST_GROUP##_##TEST_NAME##_UnitTest( \
00138 const std::string& type1Name, \
00139 const std::string& type2Name \
00140 ) \
00141 :Teuchos::UnitTestBase( \
00142 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name, #TEST_NAME ) \
00143 {} \
00144 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
00145 virtual std::string unitTestFile() const { return __FILE__; } \
00146 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
00147 }; \
00148 \
00149 template<class TYPE1, class TYPE2> \
00150 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2>::runUnitTestImpl( \
00151 Teuchos::FancyOStream &out, bool &success ) const \
00152
00153
00154 #define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
00155 \
00156 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 >; \
00157 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 > \
00158 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2);
00159
00161 #define TEUCHOS_UNIT_TEST_TEMPLATE_3_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3) \
00162 template<class TYPE1, class TYPE2, class TYPE3> \
00163 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
00164 { \
00165 public: \
00166 TEST_GROUP##_##TEST_NAME##_UnitTest( \
00167 const std::string& type1Name, \
00168 const std::string& type2Name, \
00169 const std::string& type3Name \
00170 ) \
00171 :Teuchos::UnitTestBase( \
00172 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name+"_"+type3Name, #TEST_NAME ) \
00173 {} \
00174 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
00175 virtual std::string unitTestFile() const { return __FILE__; } \
00176 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
00177 }; \
00178 \
00179 template<class TYPE1, class TYPE2, class TYPE3> \
00180 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2,TYPE3>::runUnitTestImpl( \
00181 Teuchos::FancyOStream &out, bool &success ) const \
00182
00183
00184 #define TEUCHOS_UNIT_TEST_TEMPLATE_3_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2, TYPE3) \
00185 \
00186 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 >; \
00187 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2, TYPE3 > \
00188 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TYPE3##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2,#TYPE3);
00189
00190
00210 #define TEUCHOS_STATIC_SETUP() \
00211 class StaticSetup { \
00212 public: \
00213 StaticSetup(); \
00214 } staticSetup; \
00215 \
00216 StaticSetup::StaticSetup()
00217
00218
00219 #endif // TEUCHOS_UNIT_TEST_HELPERS_HPP