14f572ea9SToby Isaac const char help[] = "Test PetscAssertPointer type generics"; 219cff895SToby Isaac 319cff895SToby Isaac #include <petsc/private/petscimpl.h> 419cff895SToby Isaac 5*c41404d6SToby Isaac #define PETSC_TEST_ASSERT_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, string) \ 619cff895SToby Isaac do { \ 719cff895SToby Isaac type *h = NULL; \ 819cff895SToby Isaac PetscBool same_string; \ 94f572ea9SToby Isaac PetscDataType data_type = PetscAssertPointer_PetscDataType(h); \ 1019cff895SToby Isaac const char expected_string[] = string; \ 114f572ea9SToby Isaac PetscCall(PetscInfo(NULL, "PetscAssertPointer_PetscDataType(%s *h) = PETSC_%s\n", expected_string, PetscDataTypes[data_type])); \ 124f572ea9SToby Isaac PetscCall(PetscInfo(NULL, "PetscAssertPointer_String(%s *h) = \"%s\"\n", expected_string, PetscAssertPointer_String(h))); \ 134f572ea9SToby Isaac PetscCheck(data_type == PETSC_TYPE, PETSC_COMM_SELF, PETSC_ERR_PLIB, "[PetscAssertPointer_PetscDataType(%s *h) = %s] != PETSC_%s", expected_string, PetscDataTypes[data_type], PetscDataTypes[PETSC_TYPE]); \ 144f572ea9SToby Isaac PetscCall(PetscStrcmp(PetscAssertPointer_String(h), expected_string, &same_string)); \ 154f572ea9SToby Isaac PetscCheck(same_string, PETSC_COMM_SELF, PETSC_ERR_PLIB, "[PetscAssertPointer_String(%s *h) = \"%s\"] != \"%s\"", expected_string, PetscAssertPointer_String(h), expected_string); \ 1619cff895SToby Isaac } while (0) 17*c41404d6SToby Isaac #define PETSC_TEST_ASSERT_POINTER_GENERICS(type, PETSC_TYPE) \ 18*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, PetscStringize(type)); \ 19*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS_SINGLE(const type, PETSC_TYPE, PetscStringize(type)) 2019cff895SToby Isaac 2119cff895SToby Isaac int main(int argc, char **argv) 2219cff895SToby Isaac { 2319cff895SToby Isaac PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 244f572ea9SToby Isaac #if defined(PetscAssertPointer_PetscDataType) && (defined(__cplusplus) || (PETSC_C_VERSION >= 11)) 2519cff895SToby Isaac // clang-format off 26*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( char, PETSC_CHAR ); 27*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( signed char, PETSC_CHAR ); 28*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( unsigned char, PETSC_CHAR ); 29*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( short, PETSC_SHORT ); 30*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS(unsigned short, PETSC_SHORT ); 31*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( float, PETSC_FLOAT ); 32*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( double, PETSC_DOUBLE ); 33*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( PetscComplex, PETSC_COMPLEX); 34*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( int32_t, PETSC_INT32 ); 35*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( uint32_t, PETSC_INT32 ); 36*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( int64_t, PETSC_INT64 ); 37*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( uint64_t, PETSC_INT64 ); 3819cff895SToby Isaac // clang-format on 3919cff895SToby Isaac #endif 404f572ea9SToby Isaac #if defined(PetscAssertPointer_PetscDataType) && defined(__cplusplus) 41*c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS(PetscBool, PETSC_BOOL); 4219cff895SToby Isaac #endif 4319cff895SToby Isaac PetscCall(PetscFinalize()); 4419cff895SToby Isaac return 0; 4519cff895SToby Isaac } 4619cff895SToby Isaac 4719cff895SToby Isaac /*TEST 4819cff895SToby Isaac 4919cff895SToby Isaac test: 5019cff895SToby Isaac suffix: 0 5119cff895SToby Isaac 5219cff895SToby Isaac TEST*/ 53