xref: /libCEED/tests/t404-qfunction.c (revision 0f58c348267158b87d81b5a8b1a981eb0caf8b99)
1891038deSjeremylt /// @file
2891038deSjeremylt /// Test creation, setting, and taking data for QFunctionContext
3891038deSjeremylt /// \test Test creation, setting, and taking data for QFunctionContext
4891038deSjeremylt #include <ceed.h>
5891038deSjeremylt #include <math.h>
6891038deSjeremylt 
7891038deSjeremylt int main(int argc, char **argv) {
8891038deSjeremylt   Ceed ceed;
9891038deSjeremylt   CeedQFunctionContext ctx;
10891038deSjeremylt   CeedScalar ctxData[5] = {1, 2, 3, 4, 5}, *ctxDataCopy;
11891038deSjeremylt 
12891038deSjeremylt   CeedInit(argv[1], &ceed);
13891038deSjeremylt 
14*0f58c348SJeremy L Thompson   // Set borrowed pointer
15891038deSjeremylt   CeedQFunctionContextCreate(ceed, &ctx);
16891038deSjeremylt   CeedQFunctionContextSetData(ctx, CEED_MEM_HOST, CEED_USE_POINTER,
17891038deSjeremylt                               sizeof(ctxData), &ctxData);
18891038deSjeremylt 
19*0f58c348SJeremy L Thompson   // Update borrowed pointer
20891038deSjeremylt   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
21891038deSjeremylt   ctxDataCopy[4] = 6;
22891038deSjeremylt   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
2328bfd0b7SJeremy L Thompson   if (ctxData[4] != 6)
24891038deSjeremylt     // LCOV_EXCL_START
25891038deSjeremylt     printf("error modifying data: %f != 6.0\n", ctxData[4]);
26891038deSjeremylt   // LCOV_EXCL_STOP
27891038deSjeremylt 
28*0f58c348SJeremy L Thompson   // Take back borrowed pointer
29891038deSjeremylt   CeedQFunctionContextTakeData(ctx, CEED_MEM_HOST, &ctxDataCopy);
30*0f58c348SJeremy L Thompson   if (ctxDataCopy[4] != 6)
31*0f58c348SJeremy L Thompson     // LCOV_EXCL_START
32*0f58c348SJeremy L Thompson     printf("error accessing borrowed data: %f != 6.0\n", ctxDataCopy[4]);
33*0f58c348SJeremy L Thompson   // LCOV_EXCL_STOP
34*0f58c348SJeremy L Thompson 
35*0f58c348SJeremy L Thompson   // Set copied data
36*0f58c348SJeremy L Thompson   ctxData[4] = 6;
37*0f58c348SJeremy L Thompson   CeedQFunctionContextSetData(ctx, CEED_MEM_HOST, CEED_COPY_VALUES,
38*0f58c348SJeremy L Thompson                               sizeof(ctxData), &ctxData);
39*0f58c348SJeremy L Thompson 
40*0f58c348SJeremy L Thompson   // Check copied data
41*0f58c348SJeremy L Thompson   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
42*0f58c348SJeremy L Thompson   if (ctxDataCopy[4] != 6)
43*0f58c348SJeremy L Thompson     // LCOV_EXCL_START
44*0f58c348SJeremy L Thompson     printf("error accessing copied data: %f != 6.0\n", ctxDataCopy[4]);
45*0f58c348SJeremy L Thompson   // LCOV_EXCL_STOP
46*0f58c348SJeremy L Thompson   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
47*0f58c348SJeremy L Thompson 
48891038deSjeremylt   CeedQFunctionContextDestroy(&ctx);
49891038deSjeremylt   CeedDestroy(&ceed);
50891038deSjeremylt   return 0;
51891038deSjeremylt }
52