|
Sierra Toolkit
Version of the Day
|
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