xref: /libCEED/tests/t404-qfunction.c (revision 891038deaa55d3f0c57599b0bbe43569c9f61de7)
1*891038deSjeremylt /// @file
2*891038deSjeremylt /// Test creation, setting, and taking data for QFunctionContext
3*891038deSjeremylt /// \test Test creation, setting, and taking data for QFunctionContext
4*891038deSjeremylt #include <ceed.h>
5*891038deSjeremylt #include <math.h>
6*891038deSjeremylt 
7*891038deSjeremylt int main(int argc, char **argv) {
8*891038deSjeremylt   Ceed ceed;
9*891038deSjeremylt   CeedQFunctionContext ctx;
10*891038deSjeremylt   CeedScalar ctxData[5] = {1, 2, 3, 4, 5}, *ctxDataCopy;
11*891038deSjeremylt 
12*891038deSjeremylt   CeedInit(argv[1], &ceed);
13*891038deSjeremylt 
14*891038deSjeremylt   CeedQFunctionContextCreate(ceed, &ctx);
15*891038deSjeremylt   CeedQFunctionContextSetData(ctx, CEED_MEM_HOST, CEED_USE_POINTER,
16*891038deSjeremylt                               sizeof(ctxData), &ctxData);
17*891038deSjeremylt 
18*891038deSjeremylt   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
19*891038deSjeremylt   ctxDataCopy[4] = 6;
20*891038deSjeremylt   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
21*891038deSjeremylt   if (fabs(ctxData[4] - 6) > 1.e-14)
22*891038deSjeremylt     // LCOV_EXCL_START
23*891038deSjeremylt     printf("error modifying data: %f != 6.0\n", ctxData[4]);
24*891038deSjeremylt   // LCOV_EXCL_STOP
25*891038deSjeremylt 
26*891038deSjeremylt   // Verify that taking the data revokes access
27*891038deSjeremylt   CeedQFunctionContextTakeData(ctx, CEED_MEM_HOST, &ctxDataCopy);
28*891038deSjeremylt   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
29*891038deSjeremylt 
30*891038deSjeremylt   // LCOV_EXCL_START
31*891038deSjeremylt   CeedQFunctionContextDestroy(&ctx);
32*891038deSjeremylt   CeedDestroy(&ceed);
33*891038deSjeremylt   return 0;
34*891038deSjeremylt   // LCOV_EXCL_STOP
35*891038deSjeremylt }
36