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