1: static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n";
3: #include <petsc/private/deviceimpl.h>
4: #include "petscdevicetestcommon.h"
6: int main(int argc, char *argv[])
7: {
8: 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: 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]+\(\)"
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
67: TEST*/