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