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; 10: PetscInitialize(&argc, &argv, NULL, help); 12: /* basic creation and destruction */ 13: PetscDeviceContextCreate(&dctx); 14: AssertDeviceContextExists(dctx); 15: PetscDeviceContextDestroy(&dctx); 16: AssertDeviceContextDoesNotExist(dctx); 17: /* double free is no-op */ 18: PetscDeviceContextDestroy(&dctx); 19: AssertDeviceContextDoesNotExist(dctx); 21: /* test global context returns a valid context */ 22: dctx = NULL; 23: PetscDeviceContextGetCurrentContext(&dctx); 24: AssertDeviceContextExists(dctx); 25: /* test locally setting to null doesn't clobber the global */ 26: dctx = NULL; 27: PetscDeviceContextGetCurrentContext(&dctx); 28: AssertDeviceContextExists(dctx); 30: /* test duplicate */ 31: PetscDeviceContextDuplicate(dctx, &ddup); 32: /* both device contexts should exist */ 33: AssertDeviceContextExists(dctx); 34: AssertDeviceContextExists(ddup); 36: /* destroying the dup should leave the original untouched */ 37: PetscDeviceContextDestroy(&ddup); 38: AssertDeviceContextDoesNotExist(ddup); 39: AssertDeviceContextExists(dctx); 41: PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"); 42: PetscFinalize(); 43: return 0; 44: } 46: /*TEST 48: build: 49: requires: defined(PETSC_HAVE_CXX) 51: testset: 52: output_file: ./output/ExitSuccess.out 53: nsize: {{1 2 4}} 54: args: -device_enable {{lazy eager}} 55: test: 56: requires: !device 57: suffix: host_no_device 58: test: 59: requires: device 60: args: -root_device_context_device_type host 61: suffix: host_with_device 62: test: 63: requires: cuda 64: args: -root_device_context_device_type cuda 65: suffix: cuda 66: test: 67: requires: hip 68: args: -root_device_context_device_type hip 69: suffix: hip 71: TEST*/