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