Sierra Toolkit Version of the Day
stk_utest_macros.hpp
00001 /*------------------------------------------------------------------------*/
00002 /*                 Copyright 2010 Sandia Corporation.                     */
00003 /*  Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive   */
00004 /*  license for use of this work by or on behalf of the U.S. Government.  */
00005 /*  Export of this program may require a license from the                 */
00006 /*  United States Government.                                             */
00007 /*------------------------------------------------------------------------*/
00008 
00009 #ifndef stk_mesh_unit_tests_stk_utest_macros_hpp
00010 #define stk_mesh_unit_tests_stk_utest_macros_hpp
00011 
00012 #ifndef STK_BUILT_IN_SIERRA
00013 #include <STK_config.h>
00014 #endif
00015 
00016 //
00017 //This file is kind of like a unit-test abstraction layer:
00018 //A series of STKUNIT_* macros are defined in terms of either
00019 //cppunit macros, or trilinos/teuchos unit-test macros, depending
00020 //on whether stk_mesh is being built as a sierra product or Trilinos package.
00021 //
00022 
00023 #ifdef HAVE_STK_Trilinos
00024 //If we're building as a Trilinos package, then we'll use the Teuchos unit-test macros.
00025 
00026 #include <Teuchos_UnitTestHarness.hpp>
00027 #include <Teuchos_UnitTestRepository.hpp>
00028 #include <Teuchos_GlobalMPISession.hpp>
00029 
00030 #define STKUNIT_UNIT_TEST(testclass,testmethod) TEUCHOS_UNIT_TEST(testclass,testmethod)
00031 
00032 #define STKUNIT_ASSERT(A) \
00033     {bool success = true; TEUCHOS_TEST_ASSERT(A,std::cout,success); if (!success) throw 1;}
00034 #define STKUNIT_ASSERT_EQUAL(A,B) \
00035     {bool success = true; TEUCHOS_TEST_EQUALITY(B,A,std::cout,success); if (!success) throw 1;}
00036 #define STKUNIT_EXPECT_EQUAL(A,B) STKUNIT_ASSERT_EQUAL(A,B)
00037 #define STKUNIT_ASSERT_EQ(A,B) STKUNIT_ASSERT_EQUAL(A,B)
00038 #define STKUNIT_ASSERT_NE(A,B) \
00039     {bool success = true; TEUCHOS_TEST_INEQUALITY(B,A,std::cout,success); if (!success) throw 1;}
00040 #define STKUNIT_ASSERT_LE(A,B) ASSERT_LE(A,B) \
00041     {bool success = true; TEUCHOS_TEST_COMPARE(A,<=,B,std::cout,success); if (!success) throw 1;}
00042 #define STKUNIT_ASSERT_LT(A,B) ASSERT_LT(A,B) \
00043     {bool success = true; TEUCHOS_TEST_COMPARE(A,<,B,std::cout,success); if (!success) throw 1;}
00044 #define STKUNIT_ASSERT_GE(A,B) ASSERT_GE(A,B) \
00045     {bool success = true; TEUCHOS_TEST_COMPARE(A,>=,B,std::cout,success); if (!success) throw 1;}
00046 #define STKUNIT_ASSERT_GT(A,B) ASSERT_GT(A,B) \
00047     {bool success = true; TEUCHOS_TEST_COMPARE(A,>,B,std::cout,success); if (!success) throw 1;}
00048 #define STKUNIT_EXPECT_EQ(A,B) STKUNIT_ASSERT_EQ(A,B)
00049 #define STKUNIT_EXPECT_NE(A,B) STKUNIT_ASSERT_NE(A,B)
00050 #define STKUNIT_EXPECT_LE(A,B) STKUNIT_ASSERT_LE(A,B)
00051 #define STKUNIT_EXPECT_LT(A,B) STKUNIT_ASSERT_LT(A,B)
00052 #define STKUNIT_EXPECT_GE(A,B) STKUNIT_ASSERT_GE(A,B)
00053 #define STKUNIT_EXPECT_GT(A,B) STKUNIT_ASSERT_GT(A,B)
00054 #define STKUNIT_ASSERT_STREQ(A,B) STKUNIT_ASSERT_EQ(A,B)
00055 #define STKUNIT_ASSERT_STRNE(A,B) STKUNIT_ASSERT_NE(A,B)
00056 #define STKUNIT_ASSERT_STRCASEEQ(A,B) STKUNIT_ASSERT_STREQ(toupper(A),toupper(B))
00057 #define STKUNIT_ASSERT_STRCASENE(A,B) STKUNIT_ASSERT_STRNE(toupper(A),toupper(B))
00058 #define STKUNIT_EXPECT_STREQ(A,B) STKUNIT_EXPECT_EQ(A,B)
00059 #define STKUNIT_EXPECT_STRNE(A,B) STKUNIT_EXPECT_NE(A,B)
00060 #define STKUNIT_EXPECT_STRCASEEQ(A,B) STKUNIT_EXPECT_STREQ(toupper(A),toupper(B))
00061 #define STKUNIT_EXPECT_STRCASENE(A,B) STKUNIT_EXPECT_STRNE(toupper(A),toupper(B))
00062 #define STKUNIT_ASSERT_THROW(A,B) \
00063     {bool success = true; TEUCHOS_TEST_THROW(A,B,std::cout,success); if (!success) throw 1;}
00064 #define STKUNIT_ASSERT_NO_THROW(A) \
00065     {TEUCHOS_TEST_NOTHROW(A,out,success)}
00066 #define STKUNIT_EXPECT_TRUE(A) \
00067     {bool success = true; TEUCHOS_TEST_ASSERT(A,std::cout,success); if (!success) throw 1;}
00068 #define STKUNIT_EXPECT_FALSE(A) \
00069     {bool success = true; TEUCHOS_TEST_ASSERT(!(A),std::cout,success); if (!success) throw 1;}
00070 #define STKUNIT_ASSERT_TRUE(A) STKUNIT_EXPECT_TRUE(A)
00071 #define STKUNIT_ASSERT_FALSE(A) STKUNIT_EXPECT_FALSE(A)
00072 #define STKUNIT_ASSERT_DOUBLE_EQ(A,B) \
00073     {bool success = true; TEUCHOS_TEST_EQUALITY(B,A,std::cout,success); if (!success) throw 1;}
00074 #define STKUNIT_ASSERT_NEAR(A,B, tol) \
00075     {bool success = true; TEUCHOS_TEST_FLOATING_EQUALITY(B,A,tol,std::cout,success); if (!success) throw 1;}
00076 
00077 
00078 #define STKUNIT_MAIN(argc,argv) \
00079 int main(int argc,char**argv) {\
00080   Teuchos::GlobalMPISession mpiSession(&argc, &argv); \
00081   bool result = Teuchos::UnitTestRepository::runUnitTestsFromMain(argc, argv); \
00082   std::cout << std::endl ; \
00083   return result; \
00084 }
00085 
00086 
00087 #elif HAVE_STK_CPPUNIT
00088 
00089 //If we're not in Trilinos, we're a sierra product, so we're using cppunit:
00090 
00091 #include <cppunit/TestCase.h>
00092 #include <cppunit/extensions/HelperMacros.h>
00093 #include <cppunit/extensions/TestFactoryRegistry.h>
00094 #include <cppunit/ui/text/TestRunner.h>
00095 
00096 #define STKUNIT_ASSERT(A) CPPUNIT_ASSERT(A)
00097 #define STKUNIT_ASSERT_EQUAL(A,B) CPPUNIT_ASSERT_EQUAL(A,B)
00098 #define STKUNIT_EXPECT_EQUAL(A,B) CPPUNIT_ASSERT_EQUAL(A,B)
00099 #define STKUNIT_ASSERT_THROW(A,B) CPPUNIT_ASSERT_THROW(A,B)
00100 
00101 #define STKUNIT_UNIT_TEST(testclass,testmethod) \
00102 class testclass##_##testmethod : public CppUnit::TestCase { \
00103 private: \
00104   CPPUNIT_TEST_SUITE( testclass##_##testmethod ); \
00105   CPPUNIT_TEST( testmethod ); \
00106   CPPUNIT_TEST_SUITE_END(); \
00107 public: \
00108   testclass##_##testmethod() : CppUnit::TestCase() {} \
00109   void setUp() {} \
00110   void tearDown() {} \
00111   void testmethod(); \
00112 }; \
00113 CPPUNIT_TEST_SUITE_REGISTRATION( testclass##_##testmethod ); \
00114 void testclass##_##testmethod::testmethod() \
00115 
00116 #define STKUNIT_MAIN(argc,argv) \
00117 int main(int argc, char ** argv) \
00118 { \
00119   if ( MPI_SUCCESS != MPI_Init( & argc , & argv ) ) { \
00120     std::cerr << "MPI_Init FAILED" << std::endl ; \
00121     std::abort(); \
00122   } \
00123  \
00124   std::string test_names; \
00125  \
00126   { \
00127     for (int i = 0; i < argc; ++i) { \
00128       if (std::string(argv[i]) == "-test") { \
00129         if (i + 1 < argc) \
00130           test_names = argv[i + 1]; \
00131         else \
00132           std::cout << "Running all tests" << std::endl; \
00133       } \
00134     } \
00135  \
00136     CppUnit::TextUi::TestRunner runner; \
00137     CppUnit::TestFactoryRegistry & registry = \
00138       CppUnit::TestFactoryRegistry::getRegistry(); \
00139     runner.addTest( registry.makeTest() ); \
00140     runner.run(test_names); \
00141   } \
00142  \
00143   MPI_Finalize(); \
00144  \
00145   return 0; \
00146 }
00147 
00148 #else // HAVE_STK_GTEST
00149 
00150 #include <gtest/gtest.h>
00151 
00152 #define STKUNIT_ASSERT(A) ASSERT_TRUE(A)
00153 #define STKUNIT_ASSERT_EQUAL(A,B) ASSERT_EQ(A,B)
00154 #define STKUNIT_EXPECT_EQUAL(A,B) EXPECT_EQ(A,B)
00155 #define STKUNIT_ASSERT_EQ(A,B) ASSERT_EQ(A,B)
00156 #define STKUNIT_ASSERT_NE(A,B) ASSERT_NE(A,B)
00157 #define STKUNIT_ASSERT_LE(A,B) ASSERT_LE(A,B)
00158 #define STKUNIT_ASSERT_LT(A,B) ASSERT_LT(A,B)
00159 #define STKUNIT_ASSERT_GE(A,B) ASSERT_GE(A,B)
00160 #define STKUNIT_ASSERT_GT(A,B) ASSERT_GT(A,B)
00161 #define STKUNIT_EXPECT_EQ(A,B) EXPECT_EQ(A,B)
00162 #define STKUNIT_EXPECT_NE(A,B) EXPECT_NE(A,B)
00163 #define STKUNIT_EXPECT_LE(A,B) EXPECT_LE(A,B)
00164 #define STKUNIT_EXPECT_LT(A,B) EXPECT_LT(A,B)
00165 #define STKUNIT_EXPECT_GE(A,B) EXPECT_GE(A,B)
00166 #define STKUNIT_EXPECT_GT(A,B) EXPECT_GT(A,B)
00167 #define STKUNIT_ASSERT_STREQ(A,B) ASSERT_STREQ(A,B)
00168 #define STKUNIT_ASSERT_STRNE(A,B) ASSERT_STRNE(A,B)
00169 #define STKUNIT_ASSERT_STRCASEEQ(A,B) ASSERT_STRCASEEQ(A,B)
00170 #define STKUNIT_ASSERT_STRCASENE(A,B) ASSERT_STRCASENE(A,B)
00171 #define STKUNIT_EXPECT_STREQ(A,B) EXPECT_STREQ(A,B)
00172 #define STKUNIT_EXPECT_STRNE(A,B) EXPECT_STRNE(A,B)
00173 #define STKUNIT_EXPECT_STRCASEEQ(A,B) EXPECT_STRCASEEQ(A,B)
00174 #define STKUNIT_EXPECT_STRCASENE(A,B) EXPECT_STRCASENE(A,B)
00175 #define STKUNIT_ASSERT_THROW(A,B) ASSERT_THROW(A,B)
00176 #define STKUNIT_ASSERT_NO_THROW(A) ASSERT_NO_THROW(A)
00177 #define STKUNIT_EXPECT_TRUE(A) EXPECT_TRUE(A)
00178 #define STKUNIT_EXPECT_FALSE(A) EXPECT_FALSE(A)
00179 #define STKUNIT_ASSERT_TRUE(A) ASSERT_TRUE(A)
00180 #define STKUNIT_ASSERT_FALSE(A) ASSERT_FALSE(A)
00181 #define STKUNIT_ASSERT_DOUBLE_EQ(A,B) ASSERT_DOUBLE_EQ(A,B)
00182 #define STKUNIT_ASSERT_NEAR(A,B,tol) ASSERT_NEAR(A,B,tol)
00183 
00184 #define STKUNIT_UNIT_TEST(testclass,testmethod) TEST(testclass,testmethod)
00185 
00186 #define STKUNIT_MAIN(argc,argv) \
00187 int main(int argc, char **argv) { \
00188   if ( MPI_SUCCESS != MPI_Init( & argc , & argv ) ) { \
00189     std::cerr << "MPI_Init FAILED" << std::endl ; \
00190     std::abort(); \
00191   } \
00192   std::cout << "Running main() from gtest_main.cc\n"; \
00193   testing::InitGoogleTest(&argc, argv); \
00194   bool result = RUN_ALL_TESTS(); \
00195   MPI_Finalize(); \
00196   return result; \
00197 }
00198 
00199 
00200 #endif // HAVE_STK_Trilinos
00201 
00202 #endif // stk_mesh_unit_tests_stk_utest_macros_hpp
00203 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends