14f572ea9SToby Isaac const char help[] = "Test PetscAssertPointer type generics";
219cff895SToby Isaac
319cff895SToby Isaac #include <petsc/private/petscimpl.h>
419cff895SToby Isaac
5c41404d6SToby 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)
17c41404d6SToby Isaac #define PETSC_TEST_ASSERT_POINTER_GENERICS(type, PETSC_TYPE) \
18c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, PetscStringize(type)); \
19c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS_SINGLE(const type, PETSC_TYPE, PetscStringize(type))
2019cff895SToby Isaac
main(int argc,char ** argv)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
26c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( char, PETSC_CHAR );
27c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( signed char, PETSC_CHAR );
28c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( unsigned char, PETSC_CHAR );
29c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( short, PETSC_SHORT );
30c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS(unsigned short, PETSC_SHORT );
31c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( float, PETSC_FLOAT );
32c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( double, PETSC_DOUBLE );
33c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( PetscComplex, PETSC_COMPLEX);
34c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( int32_t, PETSC_INT32 );
35c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( uint32_t, PETSC_INT32 );
36c41404d6SToby Isaac PETSC_TEST_ASSERT_POINTER_GENERICS( int64_t, PETSC_INT64 );
37c41404d6SToby 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)
41c41404d6SToby 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:
50*b8399332SBarry Smith requires: defined(PETSC_HAVE_COMPLEX)
51*b8399332SBarry Smith
5219cff895SToby Isaac suffix: 0
533886731fSPierre Jolivet output_file: output/empty.out
5419cff895SToby Isaac
5519cff895SToby Isaac TEST*/
56