xref: /libCEED/tests/t404-qfunction.c (revision daadeac6547c0bce0e170b8a41c931051f52e9a3)
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, sizeof(ctxData), &ctxData);
17 
18   // Update borrowed pointer
19   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
20   ctxDataCopy[4] = 6;
21   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
22   if (ctxData[4] != 6) printf("error modifying data: %f != 6.0\n", ctxData[4]);
23 
24   // Take back borrowed pointer
25   CeedQFunctionContextTakeData(ctx, CEED_MEM_HOST, &ctxDataCopy);
26   if (ctxDataCopy[4] != 6) printf("error accessing borrowed data: %f != 6.0\n", ctxDataCopy[4]);
27 
28   // Set copied data
29   ctxData[4] = 6;
30   CeedQFunctionContextSetData(ctx, CEED_MEM_HOST, CEED_COPY_VALUES, sizeof(ctxData), &ctxData);
31 
32   // Check copied data
33   CeedQFunctionContextGetData(ctx, CEED_MEM_HOST, &ctxDataCopy);
34   if (ctxDataCopy[4] != 6) printf("error accessing copied data: %f != 6.0\n", ctxDataCopy[4]);
35   CeedQFunctionContextRestoreData(ctx, &ctxDataCopy);
36 
37   CeedQFunctionContextDestroy(&ctx);
38   CeedDestroy(&ceed);
39   return 0;
40 }
41