Skip to content

Commit

Permalink
test development
Browse files Browse the repository at this point in the history
  • Loading branch information
edhartnett committed May 4, 2018
1 parent 5e38842 commit 1b18922
Showing 1 changed file with 115 additions and 73 deletions.
188 changes: 115 additions & 73 deletions tests/cunit/test_darray_fill.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
int dim_len[NDIM1] = {28};

/* Run test for each of the rearrangers. */
#define NUM_REARRANGERS_TO_TEST 1
#define NUM_REARRANGERS_TO_TEST 2

/* Run tests for darray functions. */
int main(int argc, char **argv)
Expand All @@ -62,8 +62,7 @@ int main(int argc, char **argv)
/* Only do something on max_ntasks tasks. */
if (my_rank < TARGET_NTASKS)
{
/* int rearranger[NUM_REARRANGERS_TO_TEST] = {PIO_REARR_BOX, PIO_REARR_SUBSET}; */
int rearranger[NUM_REARRANGERS_TO_TEST] = {PIO_REARR_SUBSET};
int rearranger[NUM_REARRANGERS_TO_TEST] = {PIO_REARR_BOX, PIO_REARR_SUBSET};
int iosysid; /* The ID for the parallel I/O system. */
int ioproc_stride = 1; /* Stride in the mpi rank between io tasks. */
int ioproc_start = 0; /* Zero based rank of first processor to be used for I/O. */
Expand All @@ -74,7 +73,37 @@ int main(int argc, char **argv)
int data[MAPLEN];
int data_in[MAPLEN];
int expected[MAPLEN];
int fill_value_int = -2;

/* Custom fill value for each type. */
signed char byte_fill = NC_FILL_BYTE;
char char_fill = NC_FILL_CHAR;
short short_fill = NC_FILL_SHORT;
int int_fill = -2;
float float_fill = NC_FILL_FLOAT;
double double_fill = NC_FILL_DOUBLE;
#ifdef _NETCDF4
unsigned char ubyte_fill = NC_FILL_UBYTE;
unsigned short ushort_fill = NC_FILL_USHORT;
unsigned int uint_fill = NC_FILL_UINT;
long long int64_fill = NC_FILL_INT64;
unsigned long long uint64_fill = NC_FILL_UINT64;
#endif /* _NETCDF4 */

/* Default fill value for each type. */
signed char byte_default_fill = NC_FILL_BYTE;
char char_default_fill = NC_FILL_CHAR;
short short_default_fill = NC_FILL_SHORT;
int int_default_fill = NC_FILL_INT;
float float_default_fill = NC_FILL_FLOAT;
double double_default_fill = NC_FILL_DOUBLE;
#ifdef _NETCDF4
unsigned char ubyte_default_fill = NC_FILL_UBYTE;
unsigned short ushort_default_fill = NC_FILL_USHORT;
unsigned int uint_default_fill = NC_FILL_UINT;
long long int64_default_fill = NC_FILL_INT64;
unsigned long long uint64_default_fill = NC_FILL_UINT64;
#endif /* _NETCDF4 */

int ret; /* Return code. */

/* Set up the compmaps. Don't forget these are 1-based
Expand All @@ -84,87 +113,100 @@ int main(int argc, char **argv)
wcompmap[i] = i % 2 ? my_rank * MAPLEN + i + 1 : 0; /* Even values missing. */
rcompmap[i] = my_rank * MAPLEN + i + 1;
data[i] = wcompmap[i];
expected[i] = i % 2 ? my_rank * MAPLEN + i + 1 : fill_value_int;
}

/* Figure out iotypes. */
if ((ret = get_iotypes(&num_flavors, flavor)))
ERR(ret);

for (int r = 0; r < NUM_REARRANGERS_TO_TEST; r++)
for (int fv = 0; fv < NUM_TEST_CASES_FILLVALUE; fv++)
{
/* Initialize the PIO IO system. This specifies how
* many and which processors are involved in I/O. */
if ((ret = PIOc_Init_Intracomm(test_comm, NUM_IO_PROCS, ioproc_stride, ioproc_start,
rearranger[r], &iosysid)))
return ret;

/* /\* Initialize decompositions. *\/ */
if ((ret = PIOc_InitDecomp(iosysid, PIO_INT, NDIM1, dim_len, maplen, wcompmap,
&wioid, &rearranger[r], NULL, NULL)))
return ret;
if ((ret = PIOc_InitDecomp(iosysid, PIO_INT, NDIM1, dim_len, maplen, rcompmap,
&rioid, &rearranger[r], NULL, NULL)))
return ret;

int ncid, dimid, varid;
char filename[NC_MAX_NAME + 1];

/* Use PIO to create the example file in each of the four
* available ways. */
for (int fmt = 0; fmt < num_flavors; fmt++)
#define NUM_TYPES 1
int test_type[NUM_TYPES] = {PIO_INT};
for (int t = 0; t < NUM_TYPES; t++)
{
/* Put together filename. */
sprintf(filename, "%s_%d.nc", TEST_NAME, flavor[fmt]);

/* Determine what result we should expect. */
for (int i = 0; i < MAPLEN; i++)
expected[i] = i % 2 ? my_rank * MAPLEN + i + 1 : int_fill;

/* Create file. */
if ((ret = PIOc_createfile(iosysid, &ncid, &flavor[fmt], filename, NC_CLOBBER)))
return ret;

/* Define metadata. */
if ((ret = PIOc_def_dim(ncid, DIM_NAME, dim_len[0], &dimid)))
return ret;
if ((ret = PIOc_def_var(ncid, VAR_NAME, PIO_INT, NDIM1, &dimid, &varid)))
return ret;
if ((ret = PIOc_put_att_int(ncid, varid, FILL_VALUE_NAME, PIO_INT, 1, &fill_value_int)))
return ret;
if ((ret = PIOc_enddef(ncid)))
return ret;

/* Write some data. */
if ((ret = PIOc_write_darray(ncid, varid, wioid, MAPLEN, data, &fill_value_int)))
return ret;
if ((ret = PIOc_sync(ncid)))
return ret;

/* Read the data. */
if ((ret = PIOc_read_darray(ncid, varid, rioid, MAPLEN, data_in)))
return ret;

/* Check results. */
for (int j = 0; j < MAPLEN; j++)
for (int r = 0; r < NUM_REARRANGERS_TO_TEST; r++)
{
if (data_in[j] != expected[j])
return ERR_AWFUL;
printf("data_in[%d] = %d\n", j, data_in[j]);
}
/* Initialize the PIO IO system. This specifies how
* many and which processors are involved in I/O. */
if ((ret = PIOc_Init_Intracomm(test_comm, NUM_IO_PROCS, ioproc_stride, ioproc_start,
rearranger[r], &iosysid)))
return ret;

/* /\* Initialize decompositions. *\/ */
if ((ret = PIOc_InitDecomp(iosysid, test_type[t], NDIM1, dim_len, maplen, wcompmap,
&wioid, &rearranger[r], NULL, NULL)))
return ret;
if ((ret = PIOc_InitDecomp(iosysid, test_type[t], NDIM1, dim_len, maplen, rcompmap,
&rioid, &rearranger[r], NULL, NULL)))
return ret;

int ncid, dimid, varid;
char filename[NC_MAX_NAME + 1];

/* Use PIO to create the example file in each of the four
* available ways. */
for (int fmt = 0; fmt < num_flavors; fmt++)
{
/* Put together filename. */
sprintf(filename, "%s_%d_%d.nc", TEST_NAME, flavor[fmt], rearranger[r]);

/* Close file. */
if ((ret = PIOc_closefile(ncid)))
return ret;
} /* next iotype */
/* Create file. */
if ((ret = PIOc_createfile(iosysid, &ncid, &flavor[fmt], filename, NC_CLOBBER)))
return ret;

/* Define metadata. */
if ((ret = PIOc_def_dim(ncid, DIM_NAME, dim_len[0], &dimid)))
return ret;
if ((ret = PIOc_def_var(ncid, VAR_NAME, test_type[t], NDIM1, &dimid, &varid)))
return ret;
if ((ret = PIOc_put_att_int(ncid, varid, FILL_VALUE_NAME, test_type[t],
1, &int_fill)))
return ret;
if ((ret = PIOc_enddef(ncid)))
return ret;

/* Write some data. */
if ((ret = PIOc_write_darray(ncid, varid, wioid, MAPLEN, data, &int_fill)))
return ret;
if ((ret = PIOc_sync(ncid)))
return ret;

/* Read the data. */
if ((ret = PIOc_read_darray(ncid, varid, rioid, MAPLEN, data_in)))
return ret;

/* Check results. */
for (int j = 0; j < MAPLEN; j++)
{
if (data_in[j] != expected[j])
return ERR_AWFUL;
printf("data_in[%d] = %d\n", j, data_in[j]);
}

/* Free decompositions. */
if ((ret = PIOc_freedecomp(iosysid, wioid)))
return ret;
if ((ret = PIOc_freedecomp(iosysid, rioid)))
return ret;

/* Finalize PIO system. */
if ((ret = PIOc_finalize(iosysid)))
return ret;

} /* next rearranger */
/* Close file. */
if ((ret = PIOc_closefile(ncid)))
return ret;
} /* next iotype */

/* Free decompositions. */
if ((ret = PIOc_freedecomp(iosysid, wioid)))
return ret;
if ((ret = PIOc_freedecomp(iosysid, rioid)))
return ret;

/* Finalize PIO system. */
if ((ret = PIOc_finalize(iosysid)))
return ret;

} /* next rearranger */
} /* next type */
} /* next fill value test case */
} /* endif my_rank < TARGET_NTASKS */

/* Finalize the MPI library. */
Expand Down

0 comments on commit 1b18922

Please sign in to comment.