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 <STKClassic_config.h>
00014 #else
00015 #define HAVE_MPI
00016 #endif
00017 #if defined(HAVE_MPI)
00018 #include <mpi.h>
00019 #endif
00020 //
00021 //This file is kind of like a unit-test abstraction layer:
00022 //A series of STKUNIT_* macros are defined in terms of either
00023 //gtest macros, or trilinos/teuchos unit-test macros, depending
00024 //on whether stk_mesh is being built as a sierra product or Trilinos package.
00025 //
00026 #ifdef HAVE_MPI
00027 #define RUN_TEST_REDUCE(error) \
00028   int tmp_error = error; \
00029   int reduce_result = MPI_Allreduce ( &tmp_error, &error, 1 /*count*/, \
00030                                       MPI_INT, MPI_MAX, MPI_COMM_WORLD ); \
00031   if (reduce_result != MPI_SUCCESS) { \
00032     std::cerr << "MPI_Allreduce FAILED" << std::endl; \
00033     error = true; \
00034   } \
00035   if ( !error ) \
00036     std::cout << "STKUNIT_ALL_PASS" << std::endl;
00037 #else
00038 #define RUN_TEST_REDUCE(error) \
00039   if (error != 0) { \
00040     std::cerr << "Test FAILED" << std::endl; \
00041     error = true; \
00042   } \
00043   if ( !error ) \
00044     std::cout << "STKUNIT_ALL_PASS" << std::endl;
00045 #endif
00046 
00047 
00048 #ifdef HAVE_STK_Trilinos
00049 //If we're building as a Trilinos package, then we'll use the Teuchos unit-test macros.
00050 
00051 #include <Teuchos_UnitTestHarness.hpp>
00052 #include <Teuchos_UnitTestRepository.hpp>
00053 #include <Teuchos_GlobalMPISession.hpp>
00054 
00055 #define STKUNIT_UNIT_TEST(testclass,testmethod) TEUCHOS_UNIT_TEST(testclass,testmethod)
00056 
00057 #define STKUNIT_ASSERT(A) \
00058     {bool success = true; TEUCHOS_TEST_ASSERT(A,std::cout,success); if (!success) throw 1;}
00059 #define STKUNIT_ASSERT_EQUAL(A,B) \
00060     {bool success = true; TEUCHOS_TEST_EQUALITY(B,A,std::cout,success); if (!success) throw 1;}
00061 #define STKUNIT_EXPECT_EQUAL(A,B) STKUNIT_ASSERT_EQUAL(A,B)
00062 #define STKUNIT_ASSERT_EQ(A,B) STKUNIT_ASSERT_EQUAL(A,B)
00063 #define STKUNIT_ASSERT_NE(A,B) \
00064     {bool success = true; TEUCHOS_TEST_INEQUALITY(B,A,std::cout,success); if (!success) throw 1;}
00065 #define STKUNIT_ASSERT_LE(A,B) \
00066     {bool success = true; TEUCHOS_TEST_COMPARE(A,<=,B,std::cout,success); if (!success) throw 1;}
00067 #define STKUNIT_ASSERT_LT(A,B) \
00068     {bool success = true; TEUCHOS_TEST_COMPARE(A,<,B,std::cout,success); if (!success) throw 1;}
00069 #define STKUNIT_ASSERT_GE(A,B) \
00070     {bool success = true; TEUCHOS_TEST_COMPARE(A,>=,B,std::cout,success); if (!success) throw 1;}
00071 #define STKUNIT_ASSERT_GT(A,B) \
00072     {bool success = true; TEUCHOS_TEST_COMPARE(A,>,B,std::cout,success); if (!success) throw 1;}
00073 #define STKUNIT_EXPECT_EQ(A,B) STKUNIT_ASSERT_EQ(A,B)
00074 #define STKUNIT_EXPECT_NE(A,B) STKUNIT_ASSERT_NE(A,B)
00075 #define STKUNIT_EXPECT_LE(A,B) STKUNIT_ASSERT_LE(A,B)
00076 #define STKUNIT_EXPECT_LT(A,B) STKUNIT_ASSERT_LT(A,B)
00077 #define STKUNIT_EXPECT_GE(A,B) STKUNIT_ASSERT_GE(A,B)
00078 #define STKUNIT_EXPECT_GT(A,B) STKUNIT_ASSERT_GT(A,B)
00079 #define STKUNIT_ASSERT_STREQ(A,B) STKUNIT_ASSERT_EQ(A,B)
00080 #define STKUNIT_ASSERT_STRNE(A,B) STKUNIT_ASSERT_NE(A,B)
00081 #define STKUNIT_ASSERT_STRCASEEQ(A,B) STKUNIT_ASSERT_STREQ(toupper(A),toupper(B))
00082 #define STKUNIT_ASSERT_STRCASENE(A,B) STKUNIT_ASSERT_STRNE(toupper(A),toupper(B))
00083 #define STKUNIT_EXPECT_STREQ(A,B) STKUNIT_EXPECT_EQ(A,B)
00084 #define STKUNIT_EXPECT_STRNE(A,B) STKUNIT_EXPECT_NE(A,B)
00085 #define STKUNIT_EXPECT_STRCASEEQ(A,B) STKUNIT_EXPECT_STREQ(toupper(A),toupper(B))
00086 #define STKUNIT_EXPECT_STRCASENE(A,B) STKUNIT_EXPECT_STRNE(toupper(A),toupper(B))
00087 #define STKUNIT_ASSERT_THROW(A,B) \
00088     {bool success = true; TEUCHOS_TEST_THROW(A,B,std::cout,success); if (!success) throw 1;}
00089 #define STKUNIT_ASSERT_NO_THROW(A) \
00090     {TEUCHOS_TEST_NOTHROW(A,out,success)}
00091 #define STKUNIT_EXPECT_TRUE(A) \
00092     {bool success = true; TEUCHOS_TEST_ASSERT(A,std::cout,success); if (!success) throw 1;}
00093 #define STKUNIT_EXPECT_FALSE(A) \
00094     {bool success = true; TEUCHOS_TEST_ASSERT(!(A),std::cout,success); if (!success) throw 1;}
00095 #define STKUNIT_ASSERT_TRUE(A) STKUNIT_EXPECT_TRUE(A)
00096 #define STKUNIT_ASSERT_FALSE(A) STKUNIT_EXPECT_FALSE(A)
00097 #define STKUNIT_ASSERT_DOUBLE_EQ(A,B) \
00098     {bool success = true; TEUCHOS_TEST_EQUALITY(B,A,std::cout,success); if (!success) throw 1;}
00099 #define STKUNIT_EXPECT_DOUBLE_EQ(A,B) STKUNIT_ASSERT_DOUBLE_EQ(A,B)
00100 #define STKUNIT_ASSERT_NEAR(A,B, tol) \
00101     {bool success = true; TEUCHOS_TEST_FLOATING_EQUALITY(B,A,tol,std::cout,success); if (!success) throw 1;}
00102 #define STKUNIT_EXPECT_NEAR(A,B, tol) STKUNIT_ASSERT_NEAR(A, B, tol)
00103 
00104 #define STKUNIT_MAIN(argc,argv) \
00105 int* STKUNIT_ARGC;                                                 \
00106 char** STKUNIT_ARGV;                                               \
00107 int main(int argc,char**argv) {\
00108 STKUNIT_ARGC = &argc; \
00109 STKUNIT_ARGV = argv; \
00110   Teuchos::GlobalMPISession mpiSession(&argc, &argv); \
00111   int error = Teuchos::UnitTestRepository::runUnitTestsFromMain(argc, argv); \
00112   RUN_TEST_REDUCE(error); \
00113   return error; \
00114 }
00115 
00116 #else // HAVE_STK_GTEST
00117 
00118 #include <gtest/gtest.h>
00119 
00120 #define STKUNIT_ASSERT(A) ASSERT_TRUE(A)
00121 #define STKUNIT_ASSERT_EQUAL(A,B) ASSERT_EQ(A,B)
00122 #define STKUNIT_EXPECT_EQUAL(A,B) EXPECT_EQ(A,B)
00123 #define STKUNIT_ASSERT_EQ(A,B) ASSERT_EQ(A,B)
00124 #define STKUNIT_ASSERT_NE(A,B) ASSERT_NE(A,B)
00125 #define STKUNIT_ASSERT_LE(A,B) ASSERT_LE(A,B)
00126 #define STKUNIT_ASSERT_LT(A,B) ASSERT_LT(A,B)
00127 #define STKUNIT_ASSERT_GE(A,B) ASSERT_GE(A,B)
00128 #define STKUNIT_ASSERT_GT(A,B) ASSERT_GT(A,B)
00129 #define STKUNIT_EXPECT_EQ(A,B) EXPECT_EQ(A,B)
00130 #define STKUNIT_EXPECT_NE(A,B) EXPECT_NE(A,B)
00131 #define STKUNIT_EXPECT_LE(A,B) EXPECT_LE(A,B)
00132 #define STKUNIT_EXPECT_LT(A,B) EXPECT_LT(A,B)
00133 #define STKUNIT_EXPECT_GE(A,B) EXPECT_GE(A,B)
00134 #define STKUNIT_EXPECT_GT(A,B) EXPECT_GT(A,B)
00135 #define STKUNIT_ASSERT_STREQ(A,B) ASSERT_STREQ(A,B)
00136 #define STKUNIT_ASSERT_STRNE(A,B) ASSERT_STRNE(A,B)
00137 #define STKUNIT_ASSERT_STRCASEEQ(A,B) ASSERT_STRCASEEQ(A,B)
00138 #define STKUNIT_ASSERT_STRCASENE(A,B) ASSERT_STRCASENE(A,B)
00139 #define STKUNIT_EXPECT_STREQ(A,B) EXPECT_STREQ(A,B)
00140 #define STKUNIT_EXPECT_STRNE(A,B) EXPECT_STRNE(A,B)
00141 #define STKUNIT_EXPECT_STRCASEEQ(A,B) EXPECT_STRCASEEQ(A,B)
00142 #define STKUNIT_EXPECT_STRCASENE(A,B) EXPECT_STRCASENE(A,B)
00143 #define STKUNIT_ASSERT_THROW(A,B) ASSERT_THROW(A,B)
00144 #define STKUNIT_ASSERT_NO_THROW(A) ASSERT_NO_THROW(A)
00145 #define STKUNIT_EXPECT_TRUE(A) EXPECT_TRUE(A)
00146 #define STKUNIT_EXPECT_FALSE(A) EXPECT_FALSE(A)
00147 #define STKUNIT_ASSERT_TRUE(A) ASSERT_TRUE(A)
00148 #define STKUNIT_ASSERT_FALSE(A) ASSERT_FALSE(A)
00149 #define STKUNIT_ASSERT_DOUBLE_EQ(A,B) ASSERT_DOUBLE_EQ(A,B)
00150 #define STKUNIT_EXPECT_DOUBLE_EQ(A,B) EXPECT_DOUBLE_EQ(A,B)
00151 #define STKUNIT_ASSERT_NEAR(A,B,tol) ASSERT_NEAR(A,B,tol)
00152 #define STKUNIT_EXPECT_NEAR(A,B,tol) EXPECT_NEAR(A,B,tol)
00153 
00154 #define STKUNIT_UNIT_TEST(testclass,testmethod) TEST(testclass,testmethod)
00155 
00156 #define STKUNIT_MAIN(argc,argv)                                    \
00157 int* STKUNIT_ARGC;                                                 \
00158 char** STKUNIT_ARGV;                                               \
00159 int main(int argc, char **argv) {                                  \
00160   if ( MPI_SUCCESS != MPI_Init( & argc , & argv ) ) {              \
00161     std::cerr << "MPI_Init FAILED" << std::endl ;                  \
00162     std::abort();                                                  \
00163   }                                                                \
00164   STKUNIT_ARGC = &argc;                                            \
00165   STKUNIT_ARGV = argv;                                             \
00166   std::cout << "Running main() from gtest_main.cc\n";              \
00167   testing::InitGoogleTest(&argc, argv);                            \
00168   int error = RUN_ALL_TESTS();                                     \
00169   RUN_TEST_REDUCE(error);                                          \
00170   MPI_Finalize();                                                  \
00171   return error;                                                    \
00172 }
00173 
00174 #define STKUNIT_WITH_TRACING_MAIN(argc, argv)                      \
00175 int* STKUNIT_ARGC;                                                 \
00176 char** STKUNIT_ARGV;                                               \
00177 int main(int argc, char **argv) {                                  \
00178   use_case::UseCaseEnvironment use_case_environment(&argc, &argv); \
00179   std::cout << "Running main() from gtest_main.cc\n";              \
00180   testing::InitGoogleTest(&argc, argv);                            \
00181   STKUNIT_ARGC = &argc;                                            \
00182   STKUNIT_ARGV = argv;                                             \
00183   int error = RUN_ALL_TESTS();                                     \
00184   RUN_TEST_REDUCE(error);                                          \
00185   return error;                                                    \
00186 }
00187 
00188 #define STKUNIT_WITH_SIERRA_MAIN(argc,argv,prod)    \
00189 int main(int argc, char **argv) { \
00190   sierra::Env::set_input_file_required(false); \
00191   testing::InitGoogleTest(&argc, argv); \
00192   sierra::Env::Startup startup__(&argc, &argv, sierra::prod::get_product_name(), __DATE__ " " __TIME__); \
00193   int error = RUN_ALL_TESTS();                                          \
00194   RUN_TEST_REDUCE(error);                                          \
00195   return error; \
00196 }
00197 
00198 #endif // HAVE_STK_Trilinos
00199 
00200 #endif // stk_mesh_unit_tests_stk_utest_macros_hpp
00201 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines