xref: /petsc/src/sys/tests/ex67.c (revision 19cff895e468e6eeea17e6de90791a5d0cb0026d)
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