xref: /petsc/src/sys/objects/device/tests/petscdevicetestcommon.h (revision 3ba1676111f5c958fe6c2729b46ca4d523958bb3)
1a4af0ceeSJacob Faibussowitsch #ifndef PETSCDEVICETESTCOMMON_H
2a4af0ceeSJacob Faibussowitsch #define PETSCDEVICETESTCOMMON_H
3a4af0ceeSJacob Faibussowitsch 
40e6b6b59SJacob Faibussowitsch /* this file needs to be the one to include petsc/private/deviceimpl.h since it needs to define
50e6b6b59SJacob Faibussowitsch  * a special macro to ensure that the error checking macros stay defined even in optimized
60e6b6b59SJacob Faibussowitsch  * builds
7a4af0ceeSJacob Faibussowitsch  */
80e6b6b59SJacob Faibussowitsch #if defined(PETSCDEVICEIMPL_H)
90e6b6b59SJacob Faibussowitsch   #error "must #include this file before petsc/private/deviceimpl.h"
100e6b6b59SJacob Faibussowitsch #endif
11a4af0ceeSJacob Faibussowitsch 
120e6b6b59SJacob Faibussowitsch #if !defined(PETSC_DEVICE_KEEP_ERROR_CHECKING_MACROS)
130e6b6b59SJacob Faibussowitsch   #define PETSC_DEVICE_KEEP_ERROR_CHECKING_MACROS 1
140e6b6b59SJacob Faibussowitsch #endif
150e6b6b59SJacob Faibussowitsch #include <petsc/private/deviceimpl.h>
16a4af0ceeSJacob Faibussowitsch 
17d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertDeviceExists(PetscDevice device)
18d71ae5a4SJacob Faibussowitsch {
19a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
20a4af0ceeSJacob Faibussowitsch   PetscValidDevice(device, 1);
21*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
22a4af0ceeSJacob Faibussowitsch }
23a4af0ceeSJacob Faibussowitsch 
24d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertDeviceDoesNotExist(PetscDevice device)
25d71ae5a4SJacob Faibussowitsch {
26a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
272c71b3e2SJacob Faibussowitsch   PetscCheck(!device, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDevice was not destroyed for type %s", PetscDeviceTypes[device->type]);
28*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
29a4af0ceeSJacob Faibussowitsch }
30a4af0ceeSJacob Faibussowitsch 
31d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertDeviceContextExists(PetscDeviceContext dctx)
32d71ae5a4SJacob Faibussowitsch {
33a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
34a4af0ceeSJacob Faibussowitsch   PetscValidDeviceContext(dctx, 1);
35*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
36a4af0ceeSJacob Faibussowitsch }
37a4af0ceeSJacob Faibussowitsch 
38d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertDeviceContextDoesNotExist(PetscDeviceContext dctx)
39d71ae5a4SJacob Faibussowitsch {
40a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
412c71b3e2SJacob Faibussowitsch   PetscCheck(!dctx, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDeviceContext was not destroyed");
42*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
43a4af0ceeSJacob Faibussowitsch }
44a4af0ceeSJacob Faibussowitsch 
45d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertPetscStreamTypesValidAndEqual(PetscStreamType left, PetscStreamType right, const char *errStr)
46d71ae5a4SJacob Faibussowitsch {
47a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
48a4af0ceeSJacob Faibussowitsch   PetscValidStreamType(left, 1);
49a4af0ceeSJacob Faibussowitsch   PetscValidStreamType(right, 2);
502c71b3e2SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, errStr, PetscStreamTypes[left], PetscStreamTypes[right]);
51*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
52a4af0ceeSJacob Faibussowitsch }
53a4af0ceeSJacob Faibussowitsch 
54d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertPetscDeviceTypesValidAndEqual(PetscDeviceType left, PetscDeviceType right, const char *errStr)
55d71ae5a4SJacob Faibussowitsch {
560e6b6b59SJacob Faibussowitsch   PetscFunctionBegin;
570e6b6b59SJacob Faibussowitsch   PetscValidDeviceType(left, 1);
580e6b6b59SJacob Faibussowitsch   PetscValidDeviceType(right, 2);
590e6b6b59SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, errStr, PetscDeviceTypes[left], PetscDeviceTypes[right]);
60*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
610e6b6b59SJacob Faibussowitsch }
620e6b6b59SJacob Faibussowitsch 
63d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertPetscDevicesValidAndEqual(PetscDevice left, PetscDevice right, const char *errStr)
64d71ae5a4SJacob Faibussowitsch {
65a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
66a4af0ceeSJacob Faibussowitsch   PetscCheckCompatibleDevices(left, 1, right, 2);
67f9fea11eSJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "%s: %p != %p", errStr, left, right);
68*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
69a4af0ceeSJacob Faibussowitsch }
70a4af0ceeSJacob Faibussowitsch 
71d71ae5a4SJacob Faibussowitsch static inline PetscErrorCode AssertPetscDeviceContextsValidAndEqual(PetscDeviceContext left, PetscDeviceContext right, const char *errStr)
72d71ae5a4SJacob Faibussowitsch {
73a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
74a4af0ceeSJacob Faibussowitsch   PetscCheckCompatibleDeviceContexts(left, 1, right, 2);
752c71b3e2SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "%s", errStr);
76*3ba16761SJacob Faibussowitsch   PetscFunctionReturn(PETSC_SUCCESS);
77a4af0ceeSJacob Faibussowitsch }
78a4af0ceeSJacob Faibussowitsch #endif /* PETSCDEVICETESTCOMMON_H */
79