xref: /petsc/src/sys/tests/ex67.c (revision 4f572ea9526f19623f23a8c158f3503516190bbc)
1*4f572ea9SToby Isaac const char help[] = "Test PetscAssertPointer type generics";
219cff895SToby Isaac 
319cff895SToby Isaac #include <petsc/private/petscimpl.h>
419cff895SToby Isaac 
519cff895SToby Isaac #define PETSC_TEST_VALID_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, string) \
619cff895SToby Isaac   do { \
719cff895SToby Isaac     type         *h = NULL; \
819cff895SToby Isaac     PetscBool     same_string; \
9*4f572ea9SToby Isaac     PetscDataType data_type         = PetscAssertPointer_PetscDataType(h); \
1019cff895SToby Isaac     const char    expected_string[] = string; \
11*4f572ea9SToby Isaac     PetscCall(PetscInfo(NULL, "PetscAssertPointer_PetscDataType(%s *h) = PETSC_%s\n", expected_string, PetscDataTypes[data_type])); \
12*4f572ea9SToby Isaac     PetscCall(PetscInfo(NULL, "PetscAssertPointer_String(%s *h) = \"%s\"\n", expected_string, PetscAssertPointer_String(h))); \
13*4f572ea9SToby 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]); \
14*4f572ea9SToby Isaac     PetscCall(PetscStrcmp(PetscAssertPointer_String(h), expected_string, &same_string)); \
15*4f572ea9SToby 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)
1719cff895SToby Isaac #define PETSC_TEST_VALID_POINTER_GENERICS(type, PETSC_TYPE) \
1819cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS_SINGLE(type, PETSC_TYPE, PetscStringize(type)); \
1919cff895SToby Isaac   PETSC_TEST_VALID_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));
24*4f572ea9SToby Isaac #if defined(PetscAssertPointer_PetscDataType) && (defined(__cplusplus) || (PETSC_C_VERSION >= 11))
2519cff895SToby Isaac   // clang-format off
2619cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(          char, PETSC_CHAR   );
2719cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(   signed char, PETSC_CHAR   );
2819cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS( unsigned char, PETSC_CHAR   );
2919cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(         short, PETSC_SHORT  );
3019cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(unsigned short, PETSC_SHORT  );
3119cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(         float, PETSC_FLOAT  );
3219cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(        double, PETSC_DOUBLE );
3319cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(  PetscComplex, PETSC_COMPLEX);
3419cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(       int32_t, PETSC_INT32  );
3519cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(      uint32_t, PETSC_INT32  );
3619cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(       int64_t, PETSC_INT64  );
3719cff895SToby Isaac   PETSC_TEST_VALID_POINTER_GENERICS(      uint64_t, PETSC_INT64  );
3819cff895SToby Isaac   // clang-format on
3919cff895SToby Isaac #endif
40*4f572ea9SToby Isaac #if defined(PetscAssertPointer_PetscDataType) && defined(__cplusplus)
4119cff895SToby Isaac   PETSC_TEST_VALID_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