xref: /petsc/src/sys/objects/device/tests/ex2.c (revision 0e6b6b5985dd9b1172860d21fb88bd3966bf7c54)
1a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n";
2a4af0ceeSJacob Faibussowitsch 
3a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h"
4a4af0ceeSJacob Faibussowitsch 
59371c9d4SSatish Balay int main(int argc, char *argv[]) {
6a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx = NULL, ddup = NULL;
7a4af0ceeSJacob Faibussowitsch 
8327415f7SBarry Smith   PetscFunctionBeginUser;
99566063dSJacob Faibussowitsch   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
10a4af0ceeSJacob Faibussowitsch 
11a4af0ceeSJacob Faibussowitsch   /* basic creation and destruction */
129566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextCreate(&dctx));
139566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextExists(dctx));
149566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextDestroy(&dctx));
159566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextDoesNotExist(dctx));
16a4af0ceeSJacob Faibussowitsch   /* double free is no-op */
179566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextDestroy(&dctx));
189566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextDoesNotExist(dctx));
19a4af0ceeSJacob Faibussowitsch 
20a4af0ceeSJacob Faibussowitsch   /* test global context returns a valid context */
21a4af0ceeSJacob Faibussowitsch   dctx = NULL;
229566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
239566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextExists(dctx));
24a4af0ceeSJacob Faibussowitsch   /* test locally setting to null doesn't clobber the global */
25a4af0ceeSJacob Faibussowitsch   dctx = NULL;
269566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextGetCurrentContext(&dctx));
279566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextExists(dctx));
28a4af0ceeSJacob Faibussowitsch 
29a4af0ceeSJacob Faibussowitsch   /* test duplicate */
309566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextDuplicate(dctx, &ddup));
31a4af0ceeSJacob Faibussowitsch   /* both device contexts should exist */
329566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextExists(dctx));
339566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextExists(ddup));
34a4af0ceeSJacob Faibussowitsch 
35a4af0ceeSJacob Faibussowitsch   /* destroying the dup should leave the original untouched */
369566063dSJacob Faibussowitsch   PetscCall(PetscDeviceContextDestroy(&ddup));
379566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextDoesNotExist(ddup));
389566063dSJacob Faibussowitsch   PetscCall(AssertDeviceContextExists(dctx));
39a4af0ceeSJacob Faibussowitsch 
409566063dSJacob Faibussowitsch   PetscCall(PetscPrintf(PETSC_COMM_WORLD, "EXIT_SUCCESS\n"));
419566063dSJacob Faibussowitsch   PetscCall(PetscFinalize());
42b122ec5aSJacob Faibussowitsch   return 0;
43a4af0ceeSJacob Faibussowitsch }
44a4af0ceeSJacob Faibussowitsch 
45a4af0ceeSJacob Faibussowitsch /*TEST
46a4af0ceeSJacob Faibussowitsch 
47a4af0ceeSJacob Faibussowitsch  build:
48cb9b7bb0SJacob Faibussowitsch    requires: defined(PETSC_HAVE_CXX)
49a4af0ceeSJacob Faibussowitsch 
50a4af0ceeSJacob Faibussowitsch  testset:
51a4af0ceeSJacob Faibussowitsch    output_file: ./output/ExitSuccess.out
52a4af0ceeSJacob Faibussowitsch    nsize: {{1 2 4}}
53*0e6b6b59SJacob Faibussowitsch    args: -device_enable {{lazy eager}}
54*0e6b6b59SJacob Faibussowitsch    test:
55*0e6b6b59SJacob Faibussowitsch      requires: !device
56*0e6b6b59SJacob Faibussowitsch      suffix: host_no_device
57*0e6b6b59SJacob Faibussowitsch    test:
58*0e6b6b59SJacob Faibussowitsch      requires: device
59*0e6b6b59SJacob Faibussowitsch      args: -root_device_context_device_type host
60*0e6b6b59SJacob Faibussowitsch      suffix: host_with_device
61a4af0ceeSJacob Faibussowitsch    test:
62a4af0ceeSJacob Faibussowitsch      requires: cuda
63*0e6b6b59SJacob Faibussowitsch      args: -root_device_context_device_type cuda
64a4af0ceeSJacob Faibussowitsch      suffix: cuda
65a4af0ceeSJacob Faibussowitsch    test:
66a4af0ceeSJacob Faibussowitsch      requires: hip
67*0e6b6b59SJacob Faibussowitsch      args: -root_device_context_device_type hip
68a4af0ceeSJacob Faibussowitsch      suffix: hip
69a4af0ceeSJacob Faibussowitsch 
70a4af0ceeSJacob Faibussowitsch TEST*/
71