xref: /libCEED/tests/t128-vector.c (revision cc3bdf8cd7a97c52371610b7fbb458a86c2b0cc9)
1*cc3bdf8cSJeremy L Thompson /// @file
2*cc3bdf8cSJeremy L Thompson /// Test copying into vector with borrowed pointer
3*cc3bdf8cSJeremy L Thompson /// \test Test copying into vector with borrowed pointer
4*cc3bdf8cSJeremy L Thompson #include <ceed.h>
5*cc3bdf8cSJeremy L Thompson #include <stdio.h>
6*cc3bdf8cSJeremy L Thompson 
7*cc3bdf8cSJeremy L Thompson int main(int argc, char **argv) {
8*cc3bdf8cSJeremy L Thompson   Ceed       ceed;
9*cc3bdf8cSJeremy L Thompson   CeedVector x, x_copy;
10*cc3bdf8cSJeremy L Thompson   CeedInt    len = 10;
11*cc3bdf8cSJeremy L Thompson   CeedScalar array_borrowed[len];
12*cc3bdf8cSJeremy L Thompson 
13*cc3bdf8cSJeremy L Thompson   CeedInit(argv[1], &ceed);
14*cc3bdf8cSJeremy L Thompson 
15*cc3bdf8cSJeremy L Thompson   CeedVectorCreate(ceed, len, &x);
16*cc3bdf8cSJeremy L Thompson   CeedVectorCreate(ceed, len, &x_copy);
17*cc3bdf8cSJeremy L Thompson 
18*cc3bdf8cSJeremy L Thompson   {
19*cc3bdf8cSJeremy L Thompson     CeedScalar array[len];
20*cc3bdf8cSJeremy L Thompson 
21*cc3bdf8cSJeremy L Thompson     for (CeedInt i = 0; i < len; i++) {
22*cc3bdf8cSJeremy L Thompson       array[i]          = i;
23*cc3bdf8cSJeremy L Thompson       array_borrowed[i] = 10 + i;
24*cc3bdf8cSJeremy L Thompson     }
25*cc3bdf8cSJeremy L Thompson 
26*cc3bdf8cSJeremy L Thompson     CeedVectorSetArray(x, CEED_MEM_HOST, CEED_COPY_VALUES, array);
27*cc3bdf8cSJeremy L Thompson     CeedVectorSetArray(x_copy, CEED_MEM_HOST, CEED_USE_POINTER, array_borrowed);
28*cc3bdf8cSJeremy L Thompson   }
29*cc3bdf8cSJeremy L Thompson 
30*cc3bdf8cSJeremy L Thompson   // Copy to device if preferred
31*cc3bdf8cSJeremy L Thompson   {
32*cc3bdf8cSJeremy L Thompson     CeedMemType mem_type = CEED_MEM_HOST;
33*cc3bdf8cSJeremy L Thompson 
34*cc3bdf8cSJeremy L Thompson     CeedGetPreferredMemType(ceed, &mem_type);
35*cc3bdf8cSJeremy L Thompson     if (mem_type == CEED_MEM_DEVICE) CeedVectorSyncArray(x, CEED_MEM_DEVICE);
36*cc3bdf8cSJeremy L Thompson   }
37*cc3bdf8cSJeremy L Thompson 
38*cc3bdf8cSJeremy L Thompson   // Copy and sync borrowed array
39*cc3bdf8cSJeremy L Thompson   CeedVectorCopy(x, x_copy);
40*cc3bdf8cSJeremy L Thompson   CeedVectorSyncArray(x_copy, CEED_MEM_HOST);
41*cc3bdf8cSJeremy L Thompson 
42*cc3bdf8cSJeremy L Thompson   // Check that borrowed array is the same as the original input array a
43*cc3bdf8cSJeremy L Thompson   for (CeedInt i = 0; i < len; i++) {
44*cc3bdf8cSJeremy L Thompson     if (array_borrowed[i] != i) printf("Error in copying values of CeedVector\n");
45*cc3bdf8cSJeremy L Thompson   }
46*cc3bdf8cSJeremy L Thompson 
47*cc3bdf8cSJeremy L Thompson   CeedVectorDestroy(&x);
48*cc3bdf8cSJeremy L Thompson   CeedVectorDestroy(&x_copy);
49*cc3bdf8cSJeremy L Thompson   CeedDestroy(&ceed);
50*cc3bdf8cSJeremy L Thompson   return 0;
51*cc3bdf8cSJeremy L Thompson }
52