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