diff options
author | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2004-09-07 16:42:56 (GMT) |
---|---|---|
committer | Pedro Vicente Nunes <pvn@hdfgroup.org> | 2004-09-07 16:42:56 (GMT) |
commit | 9abba8efdf4fbd7a5d3899e7db15b48e0fd9fae4 (patch) | |
tree | 90469c1d438bdefb0e67a8b09e7ce4fc9fe75f50 | |
parent | 0424d72fc14dd0e919f44717ba9ab747679a750f (diff) | |
download | hdf5-9abba8efdf4fbd7a5d3899e7db15b48e0fd9fae4.zip hdf5-9abba8efdf4fbd7a5d3899e7db15b48e0fd9fae4.tar.gz hdf5-9abba8efdf4fbd7a5d3899e7db15b48e0fd9fae4.tar.bz2 |
[svn-r9213] Purpose:
new test for the native types test
Description:
on the Cray SV1 an INT type was wrongly converted to a SHORT type
by the get_native_integer function
Choose the type based on the precision; this is to support cases
like the Cray SV1, where the size of short is 8 but precision is 32
(e.g an INT (size 8, prec 64) would be converted to a SHORT
(size 8, prec 32) if the size was the deciding factor)
Solution:
Platforms tested:
linux
solaris
aix
Misc. update:
-rw-r--r-- | test/ntypes.c | 207 |
1 files changed, 206 insertions, 1 deletions
diff --git a/test/ntypes.c b/test/ntypes.c index 1427f85..4fe6842 100644 --- a/test/ntypes.c +++ b/test/ntypes.c @@ -28,6 +28,8 @@ const char *FILENAME[] = { #define DIM0 100 #define DIM1 200 +#define DIM3 20 + int ipoints2[DIM0][DIM1], icheck2[DIM0][DIM1]; short spoints2[DIM0][DIM1], scheck2[DIM0][DIM1]; @@ -2341,6 +2343,208 @@ error: /*------------------------------------------------------------------------- + * Function: test_ninteger + * + * Purpose: Test the native integer function; made to check the case + * like the Cray SV1, where the size of short is 8 but precision is 32 + * + * Return: Success: 0 + * Failure: -1 + * + * Programmer: pvn@ncsa.uiuc.edu + * September 3, 2004 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static herr_t +test_ninteger(void) +{ + hid_t fid1; /* file ID */ + hid_t fid2; /* file ID */ + hid_t did1; /* dataset ID */ + hid_t did2; /* dataset ID */ + hid_t sid1; /* dataspace ID */ + hid_t dcpl1; /* dataset creation property list ID */ + hid_t dcpl2; /* dataset creation property list ID */ + hid_t tid1; /* file datatype */ + hid_t tid2; /* file datatype */ + hid_t nid1; /* native datatype */ + hid_t nid2; /* native datatype */ + size_t prec1; /* precision */ + size_t prec2; /* precision */ + hsize_t dims[1]={DIM3}; /* dataspace dimensions */ + size_t nsize; /* size of native type */ + hsize_t nelmts; /* number of elements in dataset */ + int rank=1; /* rank of dataset */ + int buf[DIM3]; + int chk[DIM3]; + int i; + + for (i=0; i<DIM3; i++){ + buf[i]=i; + } + + TESTING("native integer "); + + /*------------------------------------------------------------------------- + * step1: create a file + *------------------------------------------------------------------------- + */ + /* create a file using default properties */ + if ((fid1=H5Fcreate("tstint1.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) + goto error; + + /* create a data space */ + if ((sid1 = H5Screate_simple(rank,dims,NULL))<0) goto error; + + /* create dcpl */ + if((dcpl1 = H5Pcreate(H5P_DATASET_CREATE))<0) goto error; + + /* create a dataset */ + if ((did1 = H5Dcreate(fid1,"dset",H5T_NATIVE_INT,sid1,dcpl1)) <0) goto error; + + /* write */ + if(H5Dwrite(did1,H5T_NATIVE_INT,H5S_ALL,H5S_ALL,H5P_DEFAULT,buf)<0) + goto error; + + /* close */ + if (H5Sclose (sid1)<0) goto error; + if (H5Pclose (dcpl1)<0) goto error; + if (H5Dclose (did1)<0) goto error; + if (H5Fclose (fid1)<0) goto error; + + /*------------------------------------------------------------------------- + * step 2: open and create another file copying the data from file1 + *------------------------------------------------------------------------- + */ + + /* open */ + if ((fid1=H5Fopen("tstint1.h5",H5F_ACC_RDONLY,H5P_DEFAULT))<0) + goto error; + + /* open dataset */ + if ((did1=H5Dopen(fid1,"dset"))<0) + goto error; + + if ((sid1=H5Dget_space(did1))<0) + goto error; + + /* get dcpl */ + if ((dcpl1=H5Dget_create_plist(did1))<0) + goto error; + + /* get file datatype */ + if ((tid1=H5Dget_type (did1))<0) + goto error; + + /* get native datatype */ + if ((nid1=H5Tget_native_type(tid1,H5T_DIR_DEFAULT))<0) + goto error; + + /* get size */ + if ((nsize=H5Tget_size(nid1))==0) + goto error; + + /* get rank */ + if ((rank=H5Sget_simple_extent_ndims(sid1))<0) + goto error; + HDmemset(dims, 0, sizeof dims); + + /* get dimension */ + if (H5Sget_simple_extent_dims(sid1,dims,NULL)<0) + goto error; + nelmts=1; + for (i=0; i<rank; i++) + nelmts*=dims[i]; + + /* read */ + if (H5Dread(did1,nid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,chk)<0) + goto error; + + /* create a file using default properties */ + if ((fid2=H5Fcreate("tstint2.h5",H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0) + goto error; + + /* create a dataset using the native type */ + if ((did2 = H5Dcreate(fid2,"dset",nid1,sid1,dcpl1)) <0) goto error; + + /* write */ + if(H5Dwrite(did2,nid1,H5S_ALL,H5S_ALL,H5P_DEFAULT,chk)<0) + goto error; + + /* get dcpl */ + if ((dcpl2=H5Dget_create_plist(did2))<0) + goto error; + + /* get file datatype */ + if ((tid2=H5Dget_type (did2))<0) + goto error; + + /* get native datatype */ + if ((nid2=H5Tget_native_type(tid2,H5T_DIR_DEFAULT))<0) + goto error; + + /* check */ + if ((prec1=H5Tget_precision(nid1))!=(prec2=H5Tget_precision(nid2))) { + printf(" Precision differ.\n"); + goto error; + } + + /* compare dataset creation property lists */ + if(H5Pequal(dcpl1,dcpl2)<=0) { + printf(" Property lists differ.\n"); + goto error; + } + + /* check */ + for (i = 0; i < DIM3; i++) { + if (buf[i] != chk[i]) { + H5_FAILED(); + printf(" Read different values than written.\n"); + printf(" At index %d\n", i); + goto error; + } + } + + /* close */ + if (H5Sclose (sid1)<0) goto error; + if (H5Pclose (dcpl1)<0) goto error; + if (H5Pclose (dcpl2)<0) goto error; + if (H5Tclose (tid1)<0) goto error; + if (H5Tclose (tid2)<0) goto error; + if (H5Tclose (nid1)<0) goto error; + if (H5Tclose (nid2)<0) goto error; + if (H5Dclose (did1)<0) goto error; + if (H5Dclose (did2)<0) goto error; + if (H5Fclose (fid1)<0) goto error; + if (H5Fclose (fid2)<0) goto error; + + + PASSED(); + return 0; + +error: + H5E_BEGIN_TRY { + H5Pclose(dcpl1); + H5Pclose(dcpl2); + H5Tclose(tid1); + H5Tclose(tid2); + H5Tclose(nid1); + H5Tclose(nid2); + H5Dclose(did1); + H5Dclose(did2); + H5Sclose(sid1); + H5Fclose(fid1); + H5Fclose(fid2); + } H5E_END_TRY; + return -1; +} /* end test_ninteger() */ + + + +/*------------------------------------------------------------------------- * Function: main * * Purpose: Test H5Tget_native_type for different datatype @@ -2364,7 +2568,7 @@ main(void) h5_fixname(FILENAME[0], fapl, filename, sizeof filename); if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) - goto error; + goto error; nerrors += test_atomic_dtype(file)<0 ?1:0; nerrors += test_compound_dtype(file)<0 ?1:0; @@ -2381,6 +2585,7 @@ main(void) nerrors += test_refer_dtype2(file)<0 ?1:0; nerrors += test_opaque_dtype(file)<0 ?1:0; nerrors += test_bitfield_dtype(file)<0 ?1:0; + nerrors += test_ninteger()<0 ?1:0; if (H5Fclose(file)<0) goto error; if (nerrors) goto error; |