summaryrefslogtreecommitdiffstats
path: root/fortran/test/fortranlib_test_1_8.f90
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/test/fortranlib_test_1_8.f90')
-rw-r--r--fortran/test/fortranlib_test_1_8.f90646
1 files changed, 49 insertions, 597 deletions
diff --git a/fortran/test/fortranlib_test_1_8.f90 b/fortran/test/fortranlib_test_1_8.f90
index acfd1af..4ff3e0f 100644
--- a/fortran/test/fortranlib_test_1_8.f90
+++ b/fortran/test/fortranlib_test_1_8.f90
@@ -23,33 +23,11 @@ PROGRAM fortranlibtest
IMPLICIT NONE
INTEGER :: total_error = 0
- INTEGER :: error
- INTEGER :: mounting_total_error = 0
- INTEGER :: reopen_total_error = 0
- INTEGER :: fclose_total_error = 0
- INTEGER :: fspace_total_error = 0
- INTEGER :: dataset_total_error = 0
- INTEGER :: extend_dataset_total_error = 0
- INTEGER :: refobj_total_error = 0
- INTEGER :: refreg_total_error = 0
- INTEGER :: dataspace_total_error = 0
- INTEGER :: hyperslab_total_error = 0
- INTEGER :: element_total_error = 0
- INTEGER :: basic_select_total_error = 0
- INTEGER :: total_error_compoundtest = 0
- INTEGER :: basic_datatype_total_error = 0
- INTEGER :: enum_total_error = 0
- INTEGER :: external_total_error = 0
- INTEGER :: multi_file_total_error = 0
- INTEGER :: attribute_total_error = 0
- INTEGER :: group_total_error = 0
+ INTEGER :: error
+ INTEGER :: ret_total_error
INTEGER :: majnum, minnum, relnum
- CHARACTER(LEN=8) error_string
- CHARACTER(LEN=8) :: success = ' PASSED '
- CHARACTER(LEN=8) :: failure = '*FAILED*'
- CHARACTER(LEN=4) :: e_format ='(8a)'
LOGICAL :: cleanup = .TRUE.
- ! LOGICAL :: cleanup = .FALSE.
+! LOGICAL :: cleanup = .FALSE.
CALL h5open_f(error)
WRITE(*,*) ' ========================== '
@@ -68,65 +46,49 @@ PROGRAM fortranlibtest
ENDIF
WRITE(*,*)
- error_string = failure
- CALL file_space(cleanup, fspace_total_error)
- IF (fspace_total_error == 0) error_string = success
- WRITE(*, fmt = '(21a)', advance = 'no') ' Testing file free space'
- WRITE(*, fmt = '(52x,a)', advance = 'no') ' '
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + fspace_total_error
-
- ! write(*,*)
- ! write(*,*) '========================================='
- ! write(*,*) 'Testing ATTRIBUTE interface '
- ! write(*,*) '========================================='
-
- error_string = failure
- CALL attribute_test_1_8(cleanup, attribute_total_error)
- WRITE(*, fmt = '(15a)', advance = 'no') ' Testing attributes'
- WRITE(*, fmt = '(57x,a)', advance = 'no') ' '
- IF (attribute_total_error == 0) error_string = success
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + attribute_total_error
-
- CALL group_test(cleanup, group_total_error)
- WRITE(*, fmt = '(15a)', advance = 'no') ' Testing groups'
- WRITE(*, fmt = '(61x,a)', advance = 'no') ' '
- IF (group_total_error == 0) error_string = success
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + group_total_error
-
- CALL test_h5o(cleanup, group_total_error )
- WRITE(*, fmt = '(15a)', advance = 'no') ' Testing object interface'
- WRITE(*, fmt = '(51x,a)', advance = 'no') ' '
- IF (group_total_error == 0) error_string = success
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + group_total_error
-
- CALL dtransform(cleanup, group_total_error)
- WRITE(*, fmt = '(15a)', advance = 'no') ' Testing data transform'
- WRITE(*, fmt = '(53x,a)', advance = 'no') ' '
- IF (group_total_error == 0) error_string = success
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + group_total_error
-
- CALL test_genprop_basic_class(cleanup, group_total_error)
- WRITE(*, fmt = '(30a)', advance = 'no') ' Testing basic generic properties'
- WRITE(*, fmt = '(43x,a)', advance = 'no') ' '
- IF (group_total_error == 0) error_string = success
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + group_total_error
-
- CALL test_h5s_encode(cleanup, group_total_error)
- WRITE(*, fmt = '(15a)', advance = 'no') ' Testing dataspace encoding and decoding'
- WRITE(*, fmt = '(36x,a)', advance = 'no') ' '
- IF (group_total_error == 0) error_string = success
- WRITE(*, fmt = e_format) error_string
- total_error = total_error + group_total_error
+ ret_total_error = 0
+ CALL file_space(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing file free space', &
+ total_error)
-! CALL test_hard_query(group_total_error)
+ ret_total_error = 0
+ CALL attribute_test_1_8(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing attributes', &
+ total_error)
+
+ ret_total_error = 0
+ CALL group_test(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing groups', &
+ total_error)
- total_error = total_error + group_total_error
+ ret_total_error = 0
+ CALL test_h5o(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing object interface', &
+ total_error)
+
+ ret_total_error = 0
+ CALL dtransform(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing data transform', &
+ total_error)
+
+ ret_total_error = 0
+ CALL test_genprop_basic_class(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing basic generic properties', &
+ total_error)
+
+ ret_total_error = 0
+ CALL test_h5s_encode(cleanup, ret_total_error)
+ CALL write_test_status(ret_total_error, &
+ ' Testing dataspace encoding and decoding', &
+ total_error)
+
+! CALL test_hard_query(group_total_error)
WRITE(*,*)
@@ -150,8 +112,8 @@ SUBROUTINE dtransform(cleanup, total_error)
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
- INTEGER(HID_T) :: dxpl_id_c_to_f, dxpl_id_c_to_f_copy
- INTEGER(HID_T) :: dxpl_id_simple, dxpl_id_polynomial, dxpl_id_polynomial_copy, dxpl_id_utrans_inv, file_id
+ INTEGER(HID_T) :: dxpl_id_c_to_f
+ INTEGER(HID_T) :: file_id
CHARACTER(LEN=15), PARAMETER :: c_to_f = "(9/5.0)*x + 123"
INTEGER :: error
@@ -217,7 +179,6 @@ SUBROUTINE test_genprop_basic_class(cleanup, total_error)
INTEGER(HID_T) :: cid1 !/* Generic Property class ID */
INTEGER(HID_T) :: cid2 !/* Generic Property class ID */
- INTEGER(HID_T) :: cid3 !/* Generic Property class ID */
CHARACTER(LEN=7) :: CLASS1_NAME = "Class 1"
CHARACTER(LEN=7) :: name ! /* Name of class */
@@ -305,10 +266,10 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
LOGICAL, INTENT(IN) :: cleanup
INTEGER, INTENT(INOUT) :: total_error
- INTEGER(hid_t) :: sid1, sid2, sid3! /* Dataspace ID */
- INTEGER(hid_t) :: decoded_sid1, decoded_sid2, decoded_sid3
+ INTEGER(hid_t) :: sid1, sid3! /* Dataspace ID */
+ INTEGER(hid_t) :: decoded_sid1, decoded_sid3
INTEGER :: rank !/* LOGICAL rank of dataspace */
- INTEGER(size_t) :: sbuf_size=0, null_size=0, scalar_size=0
+ INTEGER(size_t) :: sbuf_size=0, scalar_size=0
! Make sure the size is large, need variable length in fortran 2003
CHARACTER(LEN=288) :: sbuf
@@ -406,41 +367,6 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
CALL h5sclose_f(decoded_sid1, error)
CALL check("h5sclose_f", error, total_error)
-!!$
-!!$ ret = H5Sclose(decoded_sid1);
-!!$ CHECK(ret, FAIL, "H5Sclose");
-!!$
-!!$ /*-------------------------------------------------------------------------
-!!$ * Test encoding and decoding of null dataspace.
-!!$ *-------------------------------------------------------------------------
-!!$ */
-!!$ sid2 = H5Screate(H5S_NULL);
-!!$ CHECK(sid2, FAIL, "H5Screate");
-!!$
-!!$ /* Encode null data space in a buffer */
-!!$ ret = H5Sencode(sid2, NULL, &null_size);
-!!$ CHECK(ret, FAIL, "H5Sencode");
-!!$
-!!$ if(null_size>0)
-!!$ null_sbuf = (unsigned char*)HDcalloc((size_t)1, null_size);
-!!$
-!!$ ret = H5Sencode(sid2, null_sbuf, &null_size);
-!!$ CHECK(ret, FAIL, "H5Sencode");
-!!$
-!!$ /* Decode from the dataspace buffer and return an object handle */
-!!$ decoded_sid2=H5Sdecode(null_sbuf);
-!!$ CHECK(decoded_sid2, FAIL, "H5Sdecode");
-!!$
-!!$ /* Verify decoded dataspace */
-!!$ space_type = H5Sget_simple_extent_type(decoded_sid2);
-!!$ VERIFY(space_type, H5S_NULL, "H5Sget_simple_extent_type");
-!!$
-!!$ ret = H5Sclose(sid2);
-!!$ CHECK(ret, FAIL, "H5Sclose");
-!!$
-!!$ ret = H5Sclose(decoded_sid2);
-!!$ CHECK(ret, FAIL, "H5Sclose");
-!!$
! /*-------------------------------------------------------------------------
! * Test encoding and decoding of scalar dataspace.
! *-------------------------------------------------------------------------
@@ -491,477 +417,3 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
END SUBROUTINE test_h5s_encode
-!/*-------------------------------------------------------------------------
-! * Function: test_hard_query
-! *
-! * Purpose: Tests H5Tcompiler_conv() for querying whether a conversion is
-! * a hard one.
-! *
-! * Return: Success: 0
-! *
-! * Failure: number of errors
-! *
-! * Programmer: Raymond Lu
-! * Friday, Sept 2, 2005
-! *
-! * Modifications:
-! *
-! *-------------------------------------------------------------------------
-! */
-
-!!$SUBROUTINE test_hard_query(total_error)
-!!$
-!!$ USE HDF5 ! This module contains all necessary modules
-!!$
-!!$ IMPLICIT NONE
-!!$ INTEGER, INTENT(INOUT) :: total_error
-!!$
-!!$ INTEGER :: error
-!!$ LOGICAL :: flag
-!!$
-!!$ WRITE(*,*) "query functions of compiler conversion"
-!!$
-!!$ ! /* Verify the conversion from int to float is a hard conversion. */
-!!$
-!!$ CALL H5Tcompiler_conv_f(H5T_INTEGER_F, H5T_FLOAT_F, flag, error)
-!!$ CALL check("H5Tcompiler_conv", error, total_error)
-!!$ CALL VerifyLogical("H5Tcompiler_conv", flag, .TRUE.,total_error)
-
-!!$ if((ret = H5Tcompiler_conv(H5T_NATIVE_INT, H5T_NATIVE_FLOAT))!=TRUE) {
-!!$ H5_FAILED();
-!!$ printf("Can't query conversion function\n");
-!!$ goto error;
-!!$ }
-
-!!$ /* Unregister the hard conversion from int to float. Verify the conversion
-!!$ * is a soft conversion. */
-!!$ H5Tunregister(H5T_PERS_HARD, NULL, H5T_NATIVE_INT, H5T_NATIVE_FLOAT, H5T_conv_int_float);
-!!$ if((ret = H5Tcompiler_conv(H5T_NATIVE_INT, H5T_NATIVE_FLOAT))!=FALSE) {
-!!$ H5_FAILED();
-!!$ printf("Can't query conversion function\n");
-!!$ goto error;
-!!$ }
-!!$
-!!$ /* Register the hard conversion from int to float. Verify the conversion
-!!$ * is a hard conversion. */
-!!$ H5Tregister(H5T_PERS_HARD, "int_flt", H5T_NATIVE_INT, H5T_NATIVE_FLOAT, H5T_conv_int_float);
-!!$ if((ret = H5Tcompiler_conv(H5T_NATIVE_INT, H5T_NATIVE_FLOAT))!=TRUE) {
-!!$ H5_FAILED();
-!!$ printf("Can't query conversion function\n");
-!!$ goto error;
-!!$ }
-!!$
-!!$ PASSED();
-!!$ reset_hdf5();
-!!$
-!!$ return 0;
-!!$
-!!$END SUBROUTINE test_hard_query
-
-
-!/*-------------------------------------------------------------------------
-! * Function: test_encode
-! *
-! * Purpose: Tests functions of encoding and decoding datatype.
-! *
-! * Return: Success: 0
-! *
-! * Failure: number of errors
-! *
-! * Programmer: Raymond Lu
-! * July 14, 2004
-! *
-! * Modifications:
-! *
-! *-------------------------------------------------------------------------
-! */
-
-!!$SUBROUTINE test_encode(total_error)
-!!$
-!!$ USE HDF5 ! This module contains all necessary modules
-!!$ struct s1 {
-!!$ int a;
-!!$ float b;
-!!$ long c;
-!!$ double d;
-!!$ };
-!!$ IMPLICIT NONE
-!!$ INTEGER, INTENT(INOUT) :: total_error
-!!$ INTEGER(SIZE_T), PARAMETER :: sizechar = 1024
-!!$ INTEGER :: error
-!!$ INTEGER(hid_t) :: file=-1, tid1=-1, tid2=-1
-!!$ INTEGER(hid_t) :: decoded_tid1=-1, decoded_tid2=-1
-!!$ CHARACTER(LEN=1024) :: filename = 'encode.h5'
-!!$ char compnd_type[]="Compound_type", enum_type[]="Enum_type";
-!!$ short enum_val;
-!!$ size_t cmpd_buf_size = 0;
-!!$ size_t enum_buf_size = 0;
-!!$ unsigned char *cmpd_buf=NULL, *enum_buf=NULL;
-!!$ herr_t ret;
-!!$ INTEGER(HID_T) :: dt5_id ! Memory datatype identifier
-!!$
-!!$ INTEGER(SIZE_T) :: type_sizec ! Size of the character datatype
-!!$
-!!$ WRITE(*,*) "functions of encoding and decoding datatypes"
-!!$
-!!$ !/* Create File */
-!!$
-!!$ CALL H5Fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
-!!$ CALL check("H5Fcreate_f", error, total_error)
-!!$
-!!$ !/*-----------------------------------------------------------------------
-!!$ ! * Create compound and enumerate datatypes
-!!$ ! *-----------------------------------------------------------------------
-!!$ ! */
-!!$
-!!$ ! /* Create a compound datatype */
-!!$ CALL h5tcopy_f(H5T_NATIVE_CHARACTER, dt5_id, error)
-!!$ CALL check("h5tcopy_f", error, total_error)
-!!$ sizechar = 2
-!!$ CALL h5tset_size_f(dt5_id, sizechar, error)
-!!$ CALL check("h5tset_size_f", error, total_error)
-!!$ CALL h5tget_size_f(dt5_id, type_sizec, error)
-!!$ CALL check("h5tget_size_f", error, total_error)
-!!$
-!!$ CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizec, error)
-!!$ CALL check("h5tget_size_f", error, total_error)
-!!$ CALL h5tcreate_f(H5T_COMPOUND_F, type_sizec, dtype_id, error)
-!!$
-!!$
-!!$ if((tid1=H5Tcreate(H5T_COMPOUND, sizeof(struct s1))) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't create datatype!\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tinsert(tid1, "a", HOFFSET(struct s1, a), H5T_NATIVE_INT) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field 'a'\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tinsert(tid1, "b", HOFFSET(struct s1, b), H5T_NATIVE_FLOAT) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field 'b'\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tinsert(tid1, "c", HOFFSET(struct s1, c), H5T_NATIVE_LONG) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field 'c'\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tinsert(tid1, "d", HOFFSET(struct s1, d), H5T_NATIVE_DOUBLE) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field 'd'\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Create a enumerate datatype */
-!!$ if((tid2=H5Tcreate(H5T_ENUM, sizeof(short))) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't create enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tenum_insert(tid2, "RED", (enum_val=0,&enum_val)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field into enumeration type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tenum_insert(tid2, "GREEN", (enum_val=1,&enum_val)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field into enumeration type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tenum_insert(tid2, "BLUE", (enum_val=2,&enum_val)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field into enumeration type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tenum_insert(tid2, "ORANGE", (enum_val=3,&enum_val)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field into enumeration type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tenum_insert(tid2, "YELLOW", (enum_val=4,&enum_val)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't insert field into enumeration type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /*-----------------------------------------------------------------------
-!!$ * Test encoding and decoding compound and enumerate datatypes
-!!$ *-----------------------------------------------------------------------
-!!$ */
-!!$ /* Encode compound type in a buffer */
-!!$ if(H5Tencode(tid1, NULL, &cmpd_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode compound type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ if(cmpd_buf_size>0)
-!!$ cmpd_buf = (unsigned char*)calloc(1, cmpd_buf_size);
-!!$
-!!$ /* Try decoding bogus buffer */
-!!$ H5E_BEGIN_TRY {
-!!$ ret = H5Tdecode(cmpd_buf);
-!!$ } H5E_END_TRY;
-!!$ if(ret!=FAIL) {
-!!$ H5_FAILED();
-!!$ printf("Decoded bogus buffer!\n");
-!!$ goto error;
-!!$ }
-!!$
-!!$ if(H5Tencode(tid1, cmpd_buf, &cmpd_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode compound type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Decode from the compound buffer and return an object handle */
-!!$ if((decoded_tid1 = H5Tdecode(cmpd_buf)) < 0)
-!!$ FAIL_PUTS_ERROR("Can't decode compound type\n")
-!!$
-!!$ /* Verify that the datatype was copied exactly */
-!!$ if(H5Tequal(decoded_tid1, tid1)<=0) {
-!!$ H5_FAILED();
-!!$ printf("Datatype wasn't encoded & decoded identically\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Query member number and member index by name, for compound type. */
-!!$ if(H5Tget_nmembers(decoded_tid1)!=4) {
-!!$ H5_FAILED();
-!!$ printf("Can't get member number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tget_member_index(decoded_tid1, "c")!=2) {
-!!$ H5_FAILED();
-!!$ printf("Can't get correct index number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$
-!!$ /* Encode enumerate type in a buffer */
-!!$ if(H5Tencode(tid2, NULL, &enum_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ if(enum_buf_size>0)
-!!$ enum_buf = (unsigned char*)calloc(1, enum_buf_size);
-!!$
-!!$ if(H5Tencode(tid2, enum_buf, &enum_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Decode from the enumerate buffer and return an object handle */
-!!$ if((decoded_tid2=H5Tdecode(enum_buf)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't decode enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Verify that the datatype was copied exactly */
-!!$ if(H5Tequal(decoded_tid2, tid2)<=0) {
-!!$ H5_FAILED();
-!!$ printf("Datatype wasn't encoded & decoded identically\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Query member number and member index by name, for enumeration type. */
-!!$ if(H5Tget_nmembers(decoded_tid2)!=5) {
-!!$ H5_FAILED();
-!!$ printf("Can't get member number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tget_member_index(decoded_tid2, "ORANGE") != 3) {
-!!$ H5_FAILED();
-!!$ printf("Can't get correct index number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /*-----------------------------------------------------------------------
-!!$ * Commit and reopen the compound and enumerate datatypes
-!!$ *-----------------------------------------------------------------------
-!!$ */
-!!$ /* Commit compound datatype and close it */
-!!$ if(H5Tcommit2(file, compnd_type, tid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't commit compound datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tclose(tid1) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tclose(decoded_tid1) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ free(cmpd_buf);
-!!$ cmpd_buf_size = 0;
-!!$
-!!$ /* Commit enumeration datatype and close it */
-!!$ if(H5Tcommit2(file, enum_type, tid2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't commit compound datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tclose(tid2) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tclose(decoded_tid2) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ free(enum_buf);
-!!$ enum_buf_size = 0;
-!!$
-!!$ /* Open the dataytpe for query */
-!!$ if((tid1 = H5Topen2(file, compnd_type, H5P_DEFAULT)) < 0)
-!!$ FAIL_STACK_ERROR
-!!$ if((tid2 = H5Topen2(file, enum_type, H5P_DEFAULT)) < 0)
-!!$ FAIL_STACK_ERROR
-!!$
-!!$
-!!$ /* Encode compound type in a buffer */
-!!$ if(H5Tencode(tid1, NULL, &cmpd_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode compound type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ if(cmpd_buf_size>0)
-!!$ cmpd_buf = (unsigned char*)calloc(1, cmpd_buf_size);
-!!$
-!!$ if(H5Tencode(tid1, cmpd_buf, &cmpd_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode compound type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Decode from the compound buffer and return an object handle */
-!!$ if((decoded_tid1 = H5Tdecode(cmpd_buf)) < 0)
-!!$ FAIL_PUTS_ERROR("Can't decode compound type\n")
-!!$
-!!$ /* Verify that the datatype was copied exactly */
-!!$ if(H5Tequal(decoded_tid1, tid1)<=0) {
-!!$ H5_FAILED();
-!!$ printf("Datatype wasn't encoded & decoded identically\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Query member number and member index by name, for compound type. */
-!!$ if(H5Tget_nmembers(decoded_tid1)!=4) {
-!!$ H5_FAILED();
-!!$ printf("Can't get member number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tget_member_index(decoded_tid1, "c")!=2) {
-!!$ H5_FAILED();
-!!$ printf("Can't get correct index number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /*-----------------------------------------------------------------------
-!!$ * Test encoding and decoding compound and enumerate datatypes
-!!$ *-----------------------------------------------------------------------
-!!$ */
-!!$ /* Encode enumerate type in a buffer */
-!!$ if(H5Tencode(tid2, NULL, &enum_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ if(enum_buf_size>0)
-!!$ enum_buf = (unsigned char*)calloc(1, enum_buf_size);
-!!$
-!!$ if(H5Tencode(tid2, enum_buf, &enum_buf_size) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't encode enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Decode from the enumerate buffer and return an object handle */
-!!$ if((decoded_tid2=H5Tdecode(enum_buf)) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't decode enumerate type\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Verify that the datatype was copied exactly */
-!!$ if(H5Tequal(decoded_tid2, tid2)<=0) {
-!!$ H5_FAILED();
-!!$ printf("Datatype wasn't encoded & decoded identically\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /* Query member number and member index by name, for enumeration type. */
-!!$ if(H5Tget_nmembers(decoded_tid2)!=5) {
-!!$ H5_FAILED();
-!!$ printf("Can't get member number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tget_member_index(decoded_tid2, "ORANGE")!=3) {
-!!$ H5_FAILED();
-!!$ printf("Can't get correct index number\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ /*-----------------------------------------------------------------------
-!!$ * Close and release
-!!$ *-----------------------------------------------------------------------
-!!$ */
-!!$ /* Close datatype and file */
-!!$ if(H5Tclose(tid1) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tclose(tid2) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ if(H5Tclose(decoded_tid1) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$ if(H5Tclose(decoded_tid2) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close datatype\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ if(H5Fclose(file) < 0) {
-!!$ H5_FAILED();
-!!$ printf("Can't close file\n");
-!!$ goto error;
-!!$ } /* end if */
-!!$
-!!$ free(cmpd_buf);
-!!$ free(enum_buf);
-!!$
-!!$ PASSED();
-!!$ return 0;
-!!$
-!!$ error:
-!!$ H5E_BEGIN_TRY {
-!!$ H5Tclose (tid1);
-!!$ H5Tclose (tid2);
-!!$ H5Tclose (decoded_tid1);
-!!$ H5Tclose (decoded_tid2);
-!!$ H5Fclose (file);
-!!$ } H5E_END_TRY;
-!!$ return 1;
-!!$}