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 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME)\
00089 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, float)
00090
00091 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME)\
00092 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, double)
00093
00094 #ifdef HAVE_TEUCHOS_COMPLEX
00095 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)\
00096 typedef std::complex<float> ComplexFloat; \
00097 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexFloat)
00098 #else
00099 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME)
00100 #endif
00101
00102 #ifdef HAVE_TEUCHOS_COMPLEX
00103 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)\
00104 typedef std::complex<double> ComplexDouble; \
00105 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT(TEST_GROUP, TEST_NAME, ComplexDouble)
00106 #else
00107 # define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
00108 #endif
00109
00110
00112 #define TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_SCALAR_TYPES(TEST_GROUP, TEST_NAME)\
00113 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_FLOAT(TEST_GROUP, TEST_NAME) \
00114 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_DOUBLE(TEST_GROUP, TEST_NAME) \
00115 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_FLOAT(TEST_GROUP, TEST_NAME) \
00116 TEUCHOS_UNIT_TEST_TEMPLATE_1_INSTANT_COMPLEX_DOUBLE(TEST_GROUP, TEST_NAME)
00117
00118
00120 #define TEUCHOS_UNIT_TEST_TEMPLATE_2_DECL(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
00121 template<class TYPE1, class TYPE2> \
00122 class TEST_GROUP##_##TEST_NAME##_UnitTest : public Teuchos::UnitTestBase \
00123 { \
00124 public: \
00125 TEST_GROUP##_##TEST_NAME##_UnitTest( \
00126 const std::string& type1Name, \
00127 const std::string& type2Name \
00128 ) \
00129 :Teuchos::UnitTestBase( \
00130 std::string(#TEST_GROUP)+"_"+type1Name+"_"+type2Name, #TEST_NAME ) \
00131 {} \
00132 void runUnitTestImpl( Teuchos::FancyOStream &out, bool &success ) const; \
00133 virtual std::string unitTestFile() const { return __FILE__; } \
00134 virtual long int unitTestFileLineNumber() const { return __LINE__; } \
00135 }; \
00136 \
00137 template<class TYPE1, class TYPE2> \
00138 void TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1,TYPE2>::runUnitTestImpl( \
00139 Teuchos::FancyOStream &out, bool &success ) const \
00140
00141
00142 #define TEUCHOS_UNIT_TEST_TEMPLATE_2_INSTANT(TEST_GROUP, TEST_NAME, TYPE1, TYPE2) \
00143 \
00144 template class TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 >; \
00145 TEST_GROUP##_##TEST_NAME##_UnitTest<TYPE1, TYPE2 > \
00146 instance_##TEST_GROUP##_##TYPE1##_##TYPE2##_##TEST_NAME##_UnitTest(#TYPE1,#TYPE2);
00147
00148
00168 #define TEUCHOS_STATIC_SETUP() \
00169 class StaticSetup { \
00170 public: \
00171 StaticSetup(); \
00172 } staticSetup; \
00173 \
00174 StaticSetup::StaticSetup()
00175
00176
00177 #endif // TEUCHOS_UNIT_TEST_HELPERS_HPP