xref: /petsc/src/sys/objects/device/tests/ex2.c (revision 661006243e0904bc232e219bc5c02c8d300d1d6d)
1 static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n";
2 
3 #include "petscdevicetestcommon.h"
4 
5 int main(int argc, char *argv[])
6 {
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  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
70 
71 TEST*/
72