xref: /libCEED/tests/t404-qfunction.c (revision c9c2c07970382857cc7b4a28d359710237b91a3e)
1 /// @file
2 /// Test creation, setting, and taking data for QFunctionContext
3 /// \test Test creation, setting, and taking data for QFunctionContext
4 #include <ceed.h>
5 #include <math.h>
6 
7 int main(int argc, char **argv) {
8   Ceed ceed;
9   CeedQFunctionContext ctx;
10   CeedScalar ctxData[5] = {1, 2, 3, 4, 5}, *ctxDataCopy;
11 
12   CeedInit(argv[1], &ceed);
13 
14   // Set borrowed pointer
15   CeedQFunctionContextCreate(ceed, &ctx);
16   CeedQFunctionContextSetData(ctx, CEED_MEM_HOST, CEED_USE_POINTER,
17                               sizeof(ctxData), &ctxData);
18 
19   // Update borrowed pointer
20   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
21   ctxDataCopy[4] = 6;
22   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
23   if (ctxData[4] != 6)
24     // LCOV_EXCL_START
25     printf("error modifying data: %f != 6.0\n", ctxData[4]);
26   // LCOV_EXCL_STOP
27 
28   // Take back borrowed pointer
29   CeedQFunctionContextTakeData(ctx, CEED_MEM_HOST, &ctxDataCopy);
30   if (ctxDataCopy[4] != 6)
31     // LCOV_EXCL_START
32     printf("error accessing borrowed data: %f != 6.0\n", ctxDataCopy[4]);
33   // LCOV_EXCL_STOP
34 
35   // Set copied data
36   ctxData[4] = 6;
37   CeedQFunctionContextSetData(ctx, CEED_MEM_HOST, CEED_COPY_VALUES,
38                               sizeof(ctxData), &ctxData);
39 
40   // Check copied data
41   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
42   if (ctxDataCopy[4] != 6)
43     // LCOV_EXCL_START
44     printf("error accessing copied data: %f != 6.0\n", ctxDataCopy[4]);
45   // LCOV_EXCL_STOP
46   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
47 
48   CeedQFunctionContextDestroy(&ctx);
49   CeedDestroy(&ceed);
50   return 0;
51 }
52