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