1*19cff895SToby Isaac const char help[] = "Test PetscValidPointer type generics"; 2*19cff895SToby Isaac 3*19cff895SToby Isaac #include <petsc/private/petscimpl.h> 4*19cff895SToby Isaac 5*19cff895SToby Isaac #define PETSC_TEST_VALID_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, string) \ 6*19cff895SToby Isaac do { \ 7*19cff895SToby Isaac type *h = NULL; \ 8*19cff895SToby Isaac PetscBool same_string; \ 9*19cff895SToby Isaac PetscDataType data_type = PetscValidPointer_PetscDataType(h); \ 10*19cff895SToby Isaac const char expected_string[] = string; \ 11*19cff895SToby Isaac PetscCall(PetscInfo(NULL, "PetscValidPointer_PetscDataType(%s *h) = PETSC_%s\n", expected_string, PetscDataTypes[data_type])); \ 12*19cff895SToby Isaac PetscCall(PetscInfo(NULL, "PetscValidPointer_String(%s *h) = \"%s\"\n", expected_string, PetscValidPointer_String(h))); \ 13*19cff895SToby Isaac PetscCheck(data_type == PETSC_TYPE, PETSC_COMM_SELF, PETSC_ERR_PLIB, "[PetscValidPointer_PetscDataType(%s *h) = %s] != PETSC_%s", expected_string, PetscDataTypes[data_type], PetscDataTypes[PETSC_TYPE]); \ 14*19cff895SToby Isaac PetscCall(PetscStrcmp(PetscValidPointer_String(h), expected_string, &same_string)); \ 15*19cff895SToby Isaac PetscCheck(same_string, PETSC_COMM_SELF, PETSC_ERR_PLIB, "[PetscValidPointer_String(%s *h) = \"%s\"] != \"%s\"", expected_string, PetscValidPointer_String(h), expected_string); \ 16*19cff895SToby Isaac } while (0) 17*19cff895SToby Isaac #define PETSC_TEST_VALID_POINTER_GENERICS(type, PETSC_TYPE) \ 18*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, PetscStringize(type)); \ 19*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS_SINGLE(const type, PETSC_TYPE, PetscStringize(type)) 20*19cff895SToby Isaac 21*19cff895SToby Isaac int main(int argc, char **argv) 22*19cff895SToby Isaac { 23*19cff895SToby Isaac PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 24*19cff895SToby Isaac #if defined(PetscValidPointer_PetscDataType) && (defined(__cplusplus) || (PETSC_C_VERSION >= 11)) 25*19cff895SToby Isaac // clang-format off 26*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( char, PETSC_CHAR ); 27*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( signed char, PETSC_CHAR ); 28*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( unsigned char, PETSC_CHAR ); 29*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( short, PETSC_SHORT ); 30*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS(unsigned short, PETSC_SHORT ); 31*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( float, PETSC_FLOAT ); 32*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( double, PETSC_DOUBLE ); 33*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( PetscComplex, PETSC_COMPLEX); 34*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( int32_t, PETSC_INT32 ); 35*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( uint32_t, PETSC_INT32 ); 36*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( int64_t, PETSC_INT64 ); 37*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS( uint64_t, PETSC_INT64 ); 38*19cff895SToby Isaac // clang-format on 39*19cff895SToby Isaac #endif 40*19cff895SToby Isaac #if defined(PetscValidPointer_PetscDataType) && defined(__cplusplus) 41*19cff895SToby Isaac PETSC_TEST_VALID_POINTER_GENERICS(PetscBool, PETSC_BOOL); 42*19cff895SToby Isaac #endif 43*19cff895SToby Isaac PetscCall(PetscFinalize()); 44*19cff895SToby Isaac return 0; 45*19cff895SToby Isaac } 46*19cff895SToby Isaac 47*19cff895SToby Isaac /*TEST 48*19cff895SToby Isaac 49*19cff895SToby Isaac test: 50*19cff895SToby Isaac suffix: 0 51*19cff895SToby Isaac 52*19cff895SToby Isaac TEST*/ 53