[svn-r17179] I added a test of H5Tencode/decode for variable-length string type. This test is for
the bug fix of #1585 in last round of checkin. Tested on jam. I used h5committest for the same change in the trunk.
This commit is contained in:
144
test/dtypes.c
144
test/dtypes.c
@@ -4904,8 +4904,9 @@ opaque_funcs(void)
|
|||||||
* Programmer: Raymond Lu
|
* Programmer: Raymond Lu
|
||||||
* July 14, 2004
|
* July 14, 2004
|
||||||
*
|
*
|
||||||
* Modifications:
|
* Modifications: Raymond Lu
|
||||||
*
|
* July 13, 2009
|
||||||
|
* Added the test for VL string types.
|
||||||
*-------------------------------------------------------------------------
|
*-------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
@@ -4917,14 +4918,16 @@ test_encode(void)
|
|||||||
long c;
|
long c;
|
||||||
double d;
|
double d;
|
||||||
};
|
};
|
||||||
hid_t file=-1, tid1=-1, tid2=-1;
|
hid_t file=-1, tid1=-1, tid2=-1, tid3=-1;
|
||||||
hid_t decoded_tid1=-1, decoded_tid2=-1;
|
hid_t decoded_tid1=-1, decoded_tid2=-1, decoded_tid3=-1;
|
||||||
char filename[1024];
|
char filename[1024];
|
||||||
char compnd_type[]="Compound_type", enum_type[]="Enum_type";
|
char compnd_type[]="Compound_type", enum_type[]="Enum_type";
|
||||||
|
char vlstr_type[]="VLstring_type";
|
||||||
short enum_val;
|
short enum_val;
|
||||||
size_t cmpd_buf_size = 0;
|
size_t cmpd_buf_size = 0;
|
||||||
size_t enum_buf_size = 0;
|
size_t enum_buf_size = 0;
|
||||||
unsigned char *cmpd_buf=NULL, *enum_buf=NULL;
|
size_t vlstr_buf_size = 0;
|
||||||
|
unsigned char *cmpd_buf=NULL, *enum_buf=NULL, *vlstr_buf=NULL;
|
||||||
herr_t ret;
|
herr_t ret;
|
||||||
|
|
||||||
TESTING("functions of encoding and decoding datatypes");
|
TESTING("functions of encoding and decoding datatypes");
|
||||||
@@ -4935,7 +4938,7 @@ test_encode(void)
|
|||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Create compound and enumerate datatypes
|
* Create compound, enumerate, and VL string datatypes
|
||||||
*-----------------------------------------------------------------------
|
*-----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/* Create a compound datatype */
|
/* Create a compound datatype */
|
||||||
@@ -4997,8 +5000,20 @@ test_encode(void)
|
|||||||
goto error;
|
goto error;
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
|
||||||
|
/* Create a variable-length string type */
|
||||||
|
if((tid3 = H5Tcopy(H5T_C_S1)) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't copy a string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
if(H5Tset_size(tid3, H5T_VARIABLE) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't the string type to be variable-length\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Test encoding and decoding compound and enumerate datatypes
|
* Test encoding and decoding compound, enumerate, and VL string datatypes
|
||||||
*-----------------------------------------------------------------------
|
*-----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/* Encode compound type in a buffer */
|
/* Encode compound type in a buffer */
|
||||||
@@ -5093,8 +5108,44 @@ test_encode(void)
|
|||||||
goto error;
|
goto error;
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
|
||||||
|
|
||||||
|
/* Encode VL string type in a buffer */
|
||||||
|
if(H5Tencode(tid3, NULL, &vlstr_buf_size) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't encode VL string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
|
if(vlstr_buf_size>0)
|
||||||
|
vlstr_buf = (unsigned char*)calloc(1, vlstr_buf_size);
|
||||||
|
|
||||||
|
if(H5Tencode(tid3, vlstr_buf, &vlstr_buf_size) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't encode VL string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
|
/* Decode from the VL string buffer and return an object handle */
|
||||||
|
if((decoded_tid3=H5Tdecode(vlstr_buf)) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't decode VL string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
|
/* Verify that the datatype was copied exactly */
|
||||||
|
if(H5Tequal(decoded_tid3, tid3)<=0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Datatype wasn't encoded & decoded identically\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
if(!H5Tis_variable_str(decoded_tid3)) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Datatype wasn't encoded & decoded identically\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Commit and reopen the compound and enumerate datatypes
|
* Commit and reopen the compound, enumerate, VL string datatypes
|
||||||
*-----------------------------------------------------------------------
|
*-----------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/* Commit compound datatype and close it */
|
/* Commit compound datatype and close it */
|
||||||
@@ -5135,13 +5186,37 @@ test_encode(void)
|
|||||||
free(enum_buf);
|
free(enum_buf);
|
||||||
enum_buf_size = 0;
|
enum_buf_size = 0;
|
||||||
|
|
||||||
|
/* Commit enumeration datatype and close it */
|
||||||
|
if(H5Tcommit2(file, vlstr_type, tid3, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't commit vl string datatype\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
if(H5Tclose(tid3) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't close datatype\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
if(H5Tclose(decoded_tid3) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't close datatype\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
free(vlstr_buf);
|
||||||
|
vlstr_buf_size = 0;
|
||||||
|
|
||||||
/* Open the dataytpe for query */
|
/* Open the dataytpe for query */
|
||||||
if((tid1 = H5Topen2(file, compnd_type, H5P_DEFAULT)) < 0)
|
if((tid1 = H5Topen2(file, compnd_type, H5P_DEFAULT)) < 0)
|
||||||
FAIL_STACK_ERROR
|
FAIL_STACK_ERROR
|
||||||
if((tid2 = H5Topen2(file, enum_type, H5P_DEFAULT)) < 0)
|
if((tid2 = H5Topen2(file, enum_type, H5P_DEFAULT)) < 0)
|
||||||
FAIL_STACK_ERROR
|
FAIL_STACK_ERROR
|
||||||
|
if((tid3 = H5Topen2(file, vlstr_type, H5P_DEFAULT)) < 0)
|
||||||
|
FAIL_STACK_ERROR
|
||||||
|
|
||||||
|
/*-----------------------------------------------------------------------
|
||||||
|
* Test encoding and decoding compound, enumerate, and vl string datatypes
|
||||||
|
*-----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
/* Encode compound type in a buffer */
|
/* Encode compound type in a buffer */
|
||||||
if(H5Tencode(tid1, NULL, &cmpd_buf_size) < 0) {
|
if(H5Tencode(tid1, NULL, &cmpd_buf_size) < 0) {
|
||||||
H5_FAILED();
|
H5_FAILED();
|
||||||
@@ -5181,10 +5256,6 @@ test_encode(void)
|
|||||||
goto error;
|
goto error;
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
|
||||||
* Test encoding and decoding compound and enumerate datatypes
|
|
||||||
*-----------------------------------------------------------------------
|
|
||||||
*/
|
|
||||||
/* Encode enumerate type in a buffer */
|
/* Encode enumerate type in a buffer */
|
||||||
if(H5Tencode(tid2, NULL, &enum_buf_size) < 0) {
|
if(H5Tencode(tid2, NULL, &enum_buf_size) < 0) {
|
||||||
H5_FAILED();
|
H5_FAILED();
|
||||||
@@ -5227,6 +5298,41 @@ test_encode(void)
|
|||||||
goto error;
|
goto error;
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
|
||||||
|
/* Encode VL string type in a buffer */
|
||||||
|
if(H5Tencode(tid3, NULL, &vlstr_buf_size) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't encode VL string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
|
if(vlstr_buf_size>0)
|
||||||
|
vlstr_buf = (unsigned char*)calloc(1, vlstr_buf_size);
|
||||||
|
|
||||||
|
if(H5Tencode(tid3, vlstr_buf, &vlstr_buf_size) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't encode VL string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
|
/* Decode from the VL string buffer and return an object handle */
|
||||||
|
if((decoded_tid3=H5Tdecode(vlstr_buf)) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't decode VL string type\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
|
/* Verify that the datatype was copied exactly */
|
||||||
|
if(H5Tequal(decoded_tid3, tid3)<=0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Datatype wasn't encoded & decoded identically\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
if(!H5Tis_variable_str(decoded_tid3)) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Datatype wasn't encoded & decoded identically\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
/*-----------------------------------------------------------------------
|
/*-----------------------------------------------------------------------
|
||||||
* Close and release
|
* Close and release
|
||||||
*-----------------------------------------------------------------------
|
*-----------------------------------------------------------------------
|
||||||
@@ -5242,6 +5348,11 @@ test_encode(void)
|
|||||||
printf("Can't close datatype\n");
|
printf("Can't close datatype\n");
|
||||||
goto error;
|
goto error;
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
if(H5Tclose(tid3) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't close datatype\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
if(H5Tclose(decoded_tid1) < 0) {
|
if(H5Tclose(decoded_tid1) < 0) {
|
||||||
H5_FAILED();
|
H5_FAILED();
|
||||||
@@ -5253,6 +5364,11 @@ test_encode(void)
|
|||||||
printf("Can't close datatype\n");
|
printf("Can't close datatype\n");
|
||||||
goto error;
|
goto error;
|
||||||
} /* end if */
|
} /* end if */
|
||||||
|
if(H5Tclose(decoded_tid3) < 0) {
|
||||||
|
H5_FAILED();
|
||||||
|
printf("Can't close datatype\n");
|
||||||
|
goto error;
|
||||||
|
} /* end if */
|
||||||
|
|
||||||
if(H5Fclose(file) < 0) {
|
if(H5Fclose(file) < 0) {
|
||||||
H5_FAILED();
|
H5_FAILED();
|
||||||
@@ -5270,8 +5386,10 @@ test_encode(void)
|
|||||||
H5E_BEGIN_TRY {
|
H5E_BEGIN_TRY {
|
||||||
H5Tclose (tid1);
|
H5Tclose (tid1);
|
||||||
H5Tclose (tid2);
|
H5Tclose (tid2);
|
||||||
|
H5Tclose (tid3);
|
||||||
H5Tclose (decoded_tid1);
|
H5Tclose (decoded_tid1);
|
||||||
H5Tclose (decoded_tid2);
|
H5Tclose (decoded_tid2);
|
||||||
|
H5Tclose (decoded_tid3);
|
||||||
H5Fclose (file);
|
H5Fclose (file);
|
||||||
} H5E_END_TRY;
|
} H5E_END_TRY;
|
||||||
return 1;
|
return 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user