xref: /petsc/src/sys/objects/device/tests/petscdevicetestcommon.h (revision 0e6b6b5985dd9b1172860d21fb88bd3966bf7c54)
1a4af0ceeSJacob Faibussowitsch #ifndef PETSCDEVICETESTCOMMON_H
2a4af0ceeSJacob Faibussowitsch #define PETSCDEVICETESTCOMMON_H
3a4af0ceeSJacob Faibussowitsch 
4*0e6b6b59SJacob Faibussowitsch /* this file needs to be the one to include petsc/private/deviceimpl.h since it needs to define
5*0e6b6b59SJacob Faibussowitsch  * a special macro to ensure that the error checking macros stay defined even in optimized
6*0e6b6b59SJacob Faibussowitsch  * builds
7a4af0ceeSJacob Faibussowitsch  */
8*0e6b6b59SJacob Faibussowitsch #if defined(PETSCDEVICEIMPL_H)
9*0e6b6b59SJacob Faibussowitsch #error "must #include this file before petsc/private/deviceimpl.h"
10*0e6b6b59SJacob Faibussowitsch #endif
11a4af0ceeSJacob Faibussowitsch 
12*0e6b6b59SJacob Faibussowitsch #if !defined(PETSC_DEVICE_KEEP_ERROR_CHECKING_MACROS)
13*0e6b6b59SJacob Faibussowitsch #define PETSC_DEVICE_KEEP_ERROR_CHECKING_MACROS 1
14*0e6b6b59SJacob Faibussowitsch #endif
15*0e6b6b59SJacob Faibussowitsch #include <petsc/private/deviceimpl.h>
16a4af0ceeSJacob Faibussowitsch 
179371c9d4SSatish Balay static inline PetscErrorCode AssertDeviceExists(PetscDevice device) {
18a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
19a4af0ceeSJacob Faibussowitsch   PetscValidDevice(device, 1);
20a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
21a4af0ceeSJacob Faibussowitsch }
22a4af0ceeSJacob Faibussowitsch 
239371c9d4SSatish Balay static inline PetscErrorCode AssertDeviceDoesNotExist(PetscDevice device) {
24a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
252c71b3e2SJacob Faibussowitsch   PetscCheck(!device, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDevice was not destroyed for type %s", PetscDeviceTypes[device->type]);
26a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
27a4af0ceeSJacob Faibussowitsch }
28a4af0ceeSJacob Faibussowitsch 
299371c9d4SSatish Balay static inline PetscErrorCode AssertDeviceContextExists(PetscDeviceContext dctx) {
30a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
31a4af0ceeSJacob Faibussowitsch   PetscValidDeviceContext(dctx, 1);
32a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
33a4af0ceeSJacob Faibussowitsch }
34a4af0ceeSJacob Faibussowitsch 
359371c9d4SSatish Balay static inline PetscErrorCode AssertDeviceContextDoesNotExist(PetscDeviceContext dctx) {
36a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
372c71b3e2SJacob Faibussowitsch   PetscCheck(!dctx, PETSC_COMM_SELF, PETSC_ERR_PLIB, "PetscDeviceContext was not destroyed");
38a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
39a4af0ceeSJacob Faibussowitsch }
40a4af0ceeSJacob Faibussowitsch 
419371c9d4SSatish Balay static inline PetscErrorCode AssertPetscStreamTypesValidAndEqual(PetscStreamType left, PetscStreamType right, const char *errStr) {
42a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
43a4af0ceeSJacob Faibussowitsch   PetscValidStreamType(left, 1);
44a4af0ceeSJacob Faibussowitsch   PetscValidStreamType(right, 2);
452c71b3e2SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, errStr, PetscStreamTypes[left], PetscStreamTypes[right]);
46a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
47a4af0ceeSJacob Faibussowitsch }
48a4af0ceeSJacob Faibussowitsch 
49*0e6b6b59SJacob Faibussowitsch static inline PetscErrorCode AssertPetscDeviceTypesValidAndEqual(PetscDeviceType left, PetscDeviceType right, const char *errStr) {
50*0e6b6b59SJacob Faibussowitsch   PetscFunctionBegin;
51*0e6b6b59SJacob Faibussowitsch   PetscValidDeviceType(left, 1);
52*0e6b6b59SJacob Faibussowitsch   PetscValidDeviceType(right, 2);
53*0e6b6b59SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, errStr, PetscDeviceTypes[left], PetscDeviceTypes[right]);
54*0e6b6b59SJacob Faibussowitsch   PetscFunctionReturn(0);
55*0e6b6b59SJacob Faibussowitsch }
56*0e6b6b59SJacob Faibussowitsch 
579371c9d4SSatish Balay static inline PetscErrorCode AssertPetscDevicesValidAndEqual(PetscDevice left, PetscDevice right, const char *errStr) {
58a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
59a4af0ceeSJacob Faibussowitsch   PetscCheckCompatibleDevices(left, 1, right, 2);
602c71b3e2SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_CORRUPT, "%s", errStr);
61a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
62a4af0ceeSJacob Faibussowitsch }
63a4af0ceeSJacob Faibussowitsch 
649371c9d4SSatish Balay static inline PetscErrorCode AssertPetscDeviceContextsValidAndEqual(PetscDeviceContext left, PetscDeviceContext right, const char *errStr) {
65a4af0ceeSJacob Faibussowitsch   PetscFunctionBegin;
66a4af0ceeSJacob Faibussowitsch   PetscCheckCompatibleDeviceContexts(left, 1, right, 2);
672c71b3e2SJacob Faibussowitsch   PetscCheck(left == right, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "%s", errStr);
68a4af0ceeSJacob Faibussowitsch   PetscFunctionReturn(0);
69a4af0ceeSJacob Faibussowitsch }
70a4af0ceeSJacob Faibussowitsch #endif /* PETSCDEVICETESTCOMMON_H */
71