xref: /petsc/src/sys/objects/device/tests/ex2.c (revision 5f80ce2ab25dff0f4601e710601cbbcecf323266)
1a4af0ceeSJacob Faibussowitsch static const char help[] = "Tests creation and destruction of PetscDeviceContext.\n\n";
2a4af0ceeSJacob Faibussowitsch 
3a4af0ceeSJacob Faibussowitsch #include <petsc/private/deviceimpl.h>
4a4af0ceeSJacob Faibussowitsch #include "petscdevicetestcommon.h"
5a4af0ceeSJacob Faibussowitsch 
6a4af0ceeSJacob Faibussowitsch int main(int argc, char *argv[])
7a4af0ceeSJacob Faibussowitsch {
8a4af0ceeSJacob Faibussowitsch   PetscDeviceContext dctx = NULL,ddup = NULL;
9a4af0ceeSJacob Faibussowitsch   PetscErrorCode     ierr;
10a4af0ceeSJacob Faibussowitsch 
11a4af0ceeSJacob Faibussowitsch   ierr = PetscInitialize(&argc,&argv,NULL,help);if (ierr) return ierr;
12a4af0ceeSJacob Faibussowitsch 
13a4af0ceeSJacob Faibussowitsch   /* basic creation and destruction */
14*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextCreate(&dctx));
15*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextExists(dctx));
16*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextDestroy(&dctx));
17*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextDoesNotExist(dctx));
18a4af0ceeSJacob Faibussowitsch   /* double free is no-op */
19*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextDestroy(&dctx));
20*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextDoesNotExist(dctx));
21a4af0ceeSJacob Faibussowitsch 
22a4af0ceeSJacob Faibussowitsch   /* test global context returns a valid context */
23a4af0ceeSJacob Faibussowitsch   dctx = NULL;
24*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextGetCurrentContext(&dctx));
25*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextExists(dctx));
26a4af0ceeSJacob Faibussowitsch   /* test locally setting to null doesn't clobber the global */
27a4af0ceeSJacob Faibussowitsch   dctx = NULL;
28*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextGetCurrentContext(&dctx));
29*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextExists(dctx));
30a4af0ceeSJacob Faibussowitsch 
31a4af0ceeSJacob Faibussowitsch   /* test duplicate */
32*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextDuplicate(dctx,&ddup));
33a4af0ceeSJacob Faibussowitsch   /* both device contexts should exist */
34*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextExists(dctx));
35*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextExists(ddup));
36a4af0ceeSJacob Faibussowitsch 
37a4af0ceeSJacob Faibussowitsch   /* destroying the dup should leave the original untouched */
38*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscDeviceContextDestroy(&ddup));
39*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextDoesNotExist(ddup));
40*5f80ce2aSJacob Faibussowitsch   CHKERRQ(AssertDeviceContextExists(dctx));
41a4af0ceeSJacob Faibussowitsch 
42*5f80ce2aSJacob Faibussowitsch   CHKERRQ(PetscPrintf(PETSC_COMM_WORLD,"EXIT_SUCCESS\n"));
43a4af0ceeSJacob Faibussowitsch   ierr = PetscFinalize();
44a4af0ceeSJacob Faibussowitsch   return ierr;
45a4af0ceeSJacob Faibussowitsch }
46a4af0ceeSJacob Faibussowitsch 
47a4af0ceeSJacob Faibussowitsch /*TEST
48a4af0ceeSJacob Faibussowitsch 
49a4af0ceeSJacob Faibussowitsch  build:
50cb9b7bb0SJacob Faibussowitsch    requires: defined(PETSC_HAVE_CXX)
51a4af0ceeSJacob Faibussowitsch 
52a4af0ceeSJacob Faibussowitsch  test:
536ab378d1SJacob Faibussowitsch    TODO: broken in ci
54a4af0ceeSJacob Faibussowitsch    requires: !device
55a4af0ceeSJacob Faibussowitsch    suffix: no_device
56a4af0ceeSJacob Faibussowitsch    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]+\(\)"
57a4af0ceeSJacob Faibussowitsch 
58a4af0ceeSJacob Faibussowitsch  testset:
59a4af0ceeSJacob Faibussowitsch    output_file: ./output/ExitSuccess.out
60a4af0ceeSJacob Faibussowitsch    nsize: {{1 2 4}}
61a4af0ceeSJacob Faibussowitsch    test:
62a4af0ceeSJacob Faibussowitsch      requires: cuda
63a4af0ceeSJacob Faibussowitsch      suffix: cuda
64a4af0ceeSJacob Faibussowitsch    test:
65a4af0ceeSJacob Faibussowitsch      requires: hip
66a4af0ceeSJacob Faibussowitsch      suffix: hip
67a4af0ceeSJacob Faibussowitsch 
68a4af0ceeSJacob Faibussowitsch TEST*/
69