1a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n"; 2a4af0ceeSJacob Faibussowitsch 3a4af0ceeSJacob Faibussowitsch #include <petsc/private/deviceimpl.h> 4a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h" 5a4af0ceeSJacob Faibussowitsch 6a4af0ceeSJacob Faibussowitsch int main(int argc, char *argv[]) 7a4af0ceeSJacob Faibussowitsch { 8a4af0ceeSJacob Faibussowitsch PetscDeviceContext dctx = NULL,ddup = NULL; 9a4af0ceeSJacob Faibussowitsch PetscErrorCode ierr; 10a4af0ceeSJacob Faibussowitsch 11a4af0ceeSJacob Faibussowitsch ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr; 12a4af0ceeSJacob Faibussowitsch 13a4af0ceeSJacob Faibussowitsch /* basic creation and destruction */ 14a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextCreate(&dctx);CHKERRQ(ierr); 15a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 16a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&dctx);CHKERRQ(ierr); 17a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextDoesNotExist(dctx);CHKERRQ(ierr); 18a4af0ceeSJacob Faibussowitsch /* double free is no-op */ 19a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&dctx);CHKERRQ(ierr); 20a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextDoesNotExist(dctx);CHKERRQ(ierr); 21a4af0ceeSJacob Faibussowitsch 22a4af0ceeSJacob Faibussowitsch /* test global context returns a valid context */ 23a4af0ceeSJacob Faibussowitsch dctx = NULL; 24a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetCurrentContext(&dctx);CHKERRQ(ierr); 25a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 26a4af0ceeSJacob Faibussowitsch /* test locally setting to null doesn't clobber the global */ 27a4af0ceeSJacob Faibussowitsch dctx = NULL; 28a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextGetCurrentContext(&dctx);CHKERRQ(ierr); 29a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 30a4af0ceeSJacob Faibussowitsch 31a4af0ceeSJacob Faibussowitsch /* test duplicate */ 32a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDuplicate(dctx,&ddup);CHKERRQ(ierr); 33a4af0ceeSJacob Faibussowitsch /* both device contexts should exist */ 34a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 35a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(ddup);CHKERRQ(ierr); 36a4af0ceeSJacob Faibussowitsch 37a4af0ceeSJacob Faibussowitsch /* destroying the dup should leave the original untouched */ 38a4af0ceeSJacob Faibussowitsch ierr = PetscDeviceContextDestroy(&ddup);CHKERRQ(ierr); 39a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextDoesNotExist(ddup);CHKERRQ(ierr); 40a4af0ceeSJacob Faibussowitsch ierr = AssertDeviceContextExists(dctx);CHKERRQ(ierr); 41a4af0ceeSJacob Faibussowitsch 42a4af0ceeSJacob Faibussowitsch ierr = PetscPrintf(PETSC_COMM_WORLD,"EXIT_SUCCESS\n");CHKERRQ(ierr); 43a4af0ceeSJacob Faibussowitsch ierr = PetscFinalize(); 44a4af0ceeSJacob Faibussowitsch return ierr; 45a4af0ceeSJacob Faibussowitsch } 46a4af0ceeSJacob Faibussowitsch 47a4af0ceeSJacob Faibussowitsch /*TEST 48a4af0ceeSJacob Faibussowitsch 49a4af0ceeSJacob Faibussowitsch build: 50*cb9b7bb0SJacob Faibussowitsch requires: defined(PETSC_HAVE_CXX) 51a4af0ceeSJacob Faibussowitsch 52a4af0ceeSJacob Faibussowitsch test: 53a4af0ceeSJacob Faibussowitsch requires: !device 54a4af0ceeSJacob Faibussowitsch suffix: no_device 55a4af0ceeSJacob Faibussowitsch filter: Error: grep -E -o -e ".*No support for this operation for this object type" -e ".*PETSc is not configured with device support.*" -e "^\[0\]PETSC ERROR:.*[0-9]{1} [A-z]+\(\)" 56a4af0ceeSJacob Faibussowitsch 57a4af0ceeSJacob Faibussowitsch testset: 58a4af0ceeSJacob Faibussowitsch output_file: ./output/ExitSuccess.out 59a4af0ceeSJacob Faibussowitsch nsize: {{1 2 4}} 60a4af0ceeSJacob Faibussowitsch test: 61a4af0ceeSJacob Faibussowitsch requires: cuda 62a4af0ceeSJacob Faibussowitsch suffix: cuda 63a4af0ceeSJacob Faibussowitsch test: 64a4af0ceeSJacob Faibussowitsch requires: hip 65a4af0ceeSJacob Faibussowitsch suffix: hip 66a4af0ceeSJacob Faibussowitsch 67a4af0ceeSJacob Faibussowitsch TEST*/ 68