19d488d03SJeremy L Thompson /// @file 29d488d03SJeremy L Thompson /// Test CeedVectorSetArray to remove array access 39d488d03SJeremy L Thompson /// \test Test CeedVectorSetArray to remove array access 49d488d03SJeremy L Thompson #include <ceed.h> 59d488d03SJeremy L Thompson #include <math.h> 69d488d03SJeremy L Thompson 79d488d03SJeremy L Thompson int main(int argc, char **argv) { 89d488d03SJeremy L Thompson Ceed ceed; 99d488d03SJeremy L Thompson CeedVector x; 10*4fee36f0SJeremy L Thompson const CeedInt len = 10; 11*4fee36f0SJeremy L Thompson CeedScalar array[len]; 129d488d03SJeremy L Thompson 139d488d03SJeremy L Thompson CeedInit(argv[1], &ceed); 149d488d03SJeremy L Thompson 15*4fee36f0SJeremy L Thompson CeedVectorCreate(ceed, len, &x); 16*4fee36f0SJeremy L Thompson for (CeedInt i = 0; i < len; i++) array[i] = 0; 17*4fee36f0SJeremy L Thompson array[3] = -3.14; 18*4fee36f0SJeremy L Thompson CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, array); 199d488d03SJeremy L Thompson 209d488d03SJeremy L Thompson // Taking array should return a 21*4fee36f0SJeremy L Thompson { 22*4fee36f0SJeremy L Thompson CeedScalar *array; 23*4fee36f0SJeremy L Thompson 24*4fee36f0SJeremy L Thompson CeedVectorTakeArray(x, CEED_MEM_HOST, &array); 25*4fee36f0SJeremy L Thompson if (fabs(array[3] + 3.14) > 10. * CEED_EPSILON) printf("Error taking array, array[3] = %f\n", (CeedScalar)array[3]); 26*4fee36f0SJeremy L Thompson } 279d488d03SJeremy L Thompson 289d488d03SJeremy L Thompson // Getting array should not modify a 29*4fee36f0SJeremy L Thompson { 30*4fee36f0SJeremy L Thompson CeedScalar *writable_array; 319d488d03SJeremy L Thompson 32*4fee36f0SJeremy L Thompson CeedVectorGetArrayWrite(x, CEED_MEM_HOST, &writable_array); 33*4fee36f0SJeremy L Thompson writable_array[5] = -3.14; 34*4fee36f0SJeremy L Thompson CeedVectorRestoreArray(x, &writable_array); 35*4fee36f0SJeremy L Thompson } 36*4fee36f0SJeremy L Thompson if (fabs(array[5] + 3.14) < 10. * CEED_EPSILON) printf("Error protecting array, array[3] = %f\n", (CeedScalar)array[3]); 379d488d03SJeremy L Thompson 389d488d03SJeremy L Thompson CeedVectorDestroy(&x); 39e076c219SJed Brown 40e076c219SJed Brown // Test with a size zero vector 41e076c219SJed Brown CeedVectorCreate(ceed, 0, &x); 42e076c219SJed Brown CeedVectorSetArray(x, CEED_MEM_HOST, CEED_USE_POINTER, NULL); 43*4fee36f0SJeremy L Thompson { 44*4fee36f0SJeremy L Thompson const CeedScalar *read_array; 45*4fee36f0SJeremy L Thompson 46*4fee36f0SJeremy L Thompson CeedVectorGetArrayRead(x, CEED_MEM_HOST, &read_array); 47*4fee36f0SJeremy L Thompson if (read_array) printf("CeedVectorGetArrayRead returned non-NULL for zero-sized Vector\n"); 48*4fee36f0SJeremy L Thompson CeedVectorRestoreArrayRead(x, &read_array); 49*4fee36f0SJeremy L Thompson } 50*4fee36f0SJeremy L Thompson { 51*4fee36f0SJeremy L Thompson CeedScalar *array; 52*4fee36f0SJeremy L Thompson 53*4fee36f0SJeremy L Thompson CeedVectorTakeArray(x, CEED_MEM_HOST, &array); 54*4fee36f0SJeremy L Thompson if (array) printf("CeedVectorTakeArray returned non-NULL for zero-sized Vector\n"); 55*4fee36f0SJeremy L Thompson } 56e076c219SJed Brown CeedVectorDestroy(&x); 57e076c219SJed Brown 589d488d03SJeremy L Thompson CeedDestroy(&ceed); 599d488d03SJeremy L Thompson return 0; 609d488d03SJeremy L Thompson } 61