1: static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n"; 3: #include "petscdevicetestcommon.h" 5: int main(int argc, char *argv[]) 6: { 7: PetscDeviceContext dctx = NULL, ddup = NULL; 9: PetscFunctionBeginUser; 10: PetscCall(PetscInitialize(&argc, &argv, NULL, help)); 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)); 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)); 30: /* test duplicate */ 31: PetscCall(PetscDeviceContextDuplicate(dctx, &ddup)); 32: /* both device contexts should exist */ 33: PetscCall(AssertDeviceContextExists(dctx)); 34: PetscCall(AssertDeviceContextExists(ddup)); 36: /* destroying the dup should leave the original untouched */ 37: PetscCall(PetscDeviceContextDestroy(&ddup)); 38: PetscCall(AssertDeviceContextDoesNotExist(ddup)); 39: PetscCall(AssertDeviceContextExists(dctx)); 41: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n")); 42: PetscCall(PetscFinalize()); 43: return 0; 44: } 46: /*TEST 48: testset: 49: requires: cxx 50: output_file: ./output/ExitSuccess.out 51: nsize: {{1 2 4}} 52: args: -device_enable {{lazy eager}} 53: test: 54: requires: !device 55: suffix: host_no_device 56: test: 57: requires: device 58: args: -root_device_context_device_type host 59: suffix: host_with_device 60: test: 61: requires: cuda 62: args: -root_device_context_device_type cuda 63: suffix: cuda 64: test: 65: requires: hip 66: args: -root_device_context_device_type hip 67: suffix: hip 68: test: 69: requires: sycl 70: args: -root_device_context_device_type sycl 71: suffix: sycl 73: testset: 74: requires: !cxx 75: output_file: ./output/ExitSuccess.out 76: suffix: no_cxx 78: TEST*/