diff options
author | Scot Breitenfeld <brtnfld@hdfgroup.org> | 2015-08-11 01:22:33 (GMT) |
---|---|---|
committer | Scot Breitenfeld <brtnfld@hdfgroup.org> | 2015-08-11 01:22:33 (GMT) |
commit | 3b4696ccd16c2b98e2700a46bf7a5c76ef4a9764 (patch) | |
tree | f301ab5333168d7bfa691bee703dd076f569fc46 /hl/fortran/test/tsttable.F90 | |
parent | 415eb5512b0726716b5f8f72de3dda11ecff8091 (diff) | |
download | hdf5-3b4696ccd16c2b98e2700a46bf7a5c76ef4a9764.zip hdf5-3b4696ccd16c2b98e2700a46bf7a5c76ef4a9764.tar.gz hdf5-3b4696ccd16c2b98e2700a46bf7a5c76ef4a9764.tar.bz2 |
[svn-r27489] reverted merge of branch
Diffstat (limited to 'hl/fortran/test/tsttable.F90')
-rw-r--r-- | hl/fortran/test/tsttable.F90 | 534 |
1 files changed, 0 insertions, 534 deletions
diff --git a/hl/fortran/test/tsttable.F90 b/hl/fortran/test/tsttable.F90 deleted file mode 100644 index 74029a5..0000000 --- a/hl/fortran/test/tsttable.F90 +++ /dev/null @@ -1,534 +0,0 @@ -! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -! Copyright by The HDF Group. * -! Copyright by the Board of Trustees of the University of Illinois. * -! All rights reserved. * -! * -! This file is part of HDF5. The full HDF5 copyright notice, including * -! terms governing use, modification, and redistribution, is contained in * -! the files COPYING and Copyright.html. COPYING can be found at the root * -! of the source code distribution tree; Copyright.html can be found at the * -! root level of an installed copy of the electronic HDF5 document set and * -! is linked from the top-level documents page. It can also be found at * -! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have * -! access to either file, you may request a copy from help@hdfgroup.org. * -! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -! -! -! This file contains the FORTRAN90 tests for H5LT -! -#include <H5config_f.inc> - -PROGRAM table_test - - CALL test_table1() - -END PROGRAM table_test - - -!------------------------------------------------------------------------- -! test_table1 -!------------------------------------------------------------------------- - -SUBROUTINE test_table1() - - USE H5TB ! module of H5TB - USE HDF5 ! module of HDF5 library - - IMPLICIT NONE - - CHARACTER(len=8), PARAMETER :: filename = "f1tab.h5" ! File name - CHARACTER(LEN=5), PARAMETER :: dsetname1 = "dset1" ! Dataset name - INTEGER(HID_T) :: file_id ! File identifier - INTEGER(HSIZE_T), PARAMETER :: nfields = 4 ! nfields - INTEGER(HSIZE_T), PARAMETER :: nrecords = 5 ! nrecords - CHARACTER(LEN=10),DIMENSION(1:nfields) :: field_names ! field names - INTEGER(SIZE_T), DIMENSION(1:nfields) :: field_offset ! field offset - INTEGER(HID_T), DIMENSION(1:nfields) :: field_types ! field types - INTEGER(HSIZE_T), PARAMETER :: chunk_size = 5 ! chunk size - INTEGER, PARAMETER :: compress = 0 ! compress - INTEGER :: errcode = 0 ! Error flag - INTEGER :: i ! general purpose integer - INTEGER(SIZE_T) :: type_size ! Size of the datatype - INTEGER(SIZE_T) :: type_sizec ! Size of the character datatype - INTEGER(SIZE_T) :: type_sizei ! Size of the integer datatype - INTEGER(SIZE_T) :: type_sized ! Size of the double precision datatype - INTEGER(SIZE_T) :: type_sizer ! Size of the real datatype - INTEGER(HID_T) :: type_id_c ! Memory datatype identifier (for character field) - INTEGER(SIZE_T) :: offset ! Member's offset - INTEGER(HSIZE_T) :: start = 0 ! start record - INTEGER, DIMENSION(nrecords) :: bufi ! Data buffer - INTEGER, DIMENSION(nrecords) :: bufir ! Data buffer - REAL, DIMENSION(nrecords) :: bufr ! Data buffer - REAL, DIMENSION(nrecords) :: bufrr ! Data buffer - DOUBLE PRECISION, DIMENSION(nrecords) :: bufd ! Data buffer - DOUBLE PRECISION, DIMENSION(nrecords) :: bufdr ! Data buffer - CHARACTER(LEN=2), DIMENSION(nrecords), PARAMETER :: bufs = (/"AB","CD","EF","GH","IJ"/) ! Data buffer - CHARACTER(LEN=2), DIMENSION(nrecords) :: bufsr ! Data buffer - INTEGER(HSIZE_T) :: nfieldsr ! nfields - INTEGER(HSIZE_T) :: nrecordsr ! nrecords - CHARACTER(LEN=9), DIMENSION(1:nfields) :: field_namesr ! field names - INTEGER(SIZE_T), DIMENSION(1:nfields) :: field_offsetr ! field offset - INTEGER(SIZE_T), DIMENSION(1:nfields) :: field_sizesr ! field sizes - INTEGER(SIZE_T) :: type_sizeout = 0 ! size of the datatype - INTEGER :: maxlen = 0 ! max chararter length of a field name - INTEGER :: Cs_sizeof_double = H5_SIZEOF_DOUBLE ! C's sizeof double - INTEGER :: SIZEOF_X - LOGICAL :: Exclude_double - - ! Find size of DOUBLE PRECISION -#ifdef H5_FORTRAN_HAVE_STORAGE_SIZE - SIZEOF_X = storage_size(bufd(1))/storage_size(c_char_'a') -#else - SIZEOF_X = SIZEOF(bufd(1)) -#endif - - ! If Fortran DOUBLE PRECISION and C DOUBLE sizeofs don't match then disable - ! creating a DOUBLE RECISION field, and instead create a REAL field. This - ! is needed to handle when DOUBLE PRECISION is promoted via a compiler flag. - Exclude_double = .FALSE. - IF(Cs_sizeof_double.NE.SIZEOF_X)THEN - Exclude_double = .TRUE. - ENDIF - - ! - ! Initialize the data arrays. - ! - DO i = 1, nrecords - bufi(i) = i - bufr(i) = i - bufd(i) = i - END DO - - ! - ! Initialize FORTRAN predefined datatypes. - ! - CALL h5open_f(errcode) - - ! - ! Create a new file using default properties. - ! - CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, errcode) - - - !------------------------------------------------------------------------- - ! make table - ! initialize the table parameters - !------------------------------------------------------------------------- - - field_names(1) = "field1" - field_names(2) = "field2a" - field_names(3) = "field3ab" - field_names(4) = "field4abc" - - ! - ! calculate total size by calculating sizes of each member - ! - CALL h5tcopy_f(H5T_NATIVE_CHARACTER, type_id_c, errcode) - type_size = 2 - CALL h5tset_size_f(type_id_c, type_size, errcode) - CALL h5tget_size_f(type_id_c, type_sizec, errcode) - CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, errcode) - IF(exclude_double)THEN - CALL h5tget_size_f(H5T_NATIVE_REAL, type_sized, errcode) - ELSE - CALL h5tget_size_f(H5T_NATIVE_DOUBLE, type_sized, errcode) - ENDIF - CALL h5tget_size_f(H5T_NATIVE_REAL, type_sizer, errcode) - type_size = type_sizec + type_sizei + type_sized + type_sizer - - ! - ! type ID's - ! - field_types(1) = type_id_c - field_types(2) = H5T_NATIVE_INTEGER - IF(exclude_double)THEN - field_types(3) = H5T_NATIVE_REAL - ELSE - field_types(3) = H5T_NATIVE_DOUBLE - ENDIF - field_types(4) = H5T_NATIVE_REAL - - ! - ! offsets - ! - offset = 0 - field_offset(1) = offset - offset = offset + type_sizec ! Offset of the second memeber is 2 - field_offset(2) = offset - offset = offset + type_sizei ! Offset of the second memeber is 6 - field_offset(3) = offset - offset = offset + type_sized ! Offset of the second memeber is 14 - field_offset(4) = offset - - !------------------------------------------------------------------------- - ! make table - !------------------------------------------------------------------------- - - CALL test_begin(' Make table ') - - CALL h5tbmake_table_f(dsetname1,& - file_id,& - dsetname1,& - nfields,& - nrecords,& - type_size,& - field_names,& - field_offset,& - field_types,& - chunk_size,& - compress,& - errcode ) - - CALL passed() - - - !------------------------------------------------------------------------- - ! write field - !------------------------------------------------------------------------- - - CALL test_begin(' Read/Write field by name ') - - CALL h5tbwrite_field_name_f(file_id,dsetname1,field_names(1),start,nrecords,type_sizec,& - bufs,errcode) - - CALL h5tbwrite_field_name_f(file_id,dsetname1,field_names(2),start,nrecords,type_sizei,& - bufi,errcode) - IF(exclude_double)THEN - CALL h5tbwrite_field_name_f(file_id,dsetname1,field_names(3),start,nrecords,type_sized,& - bufr,errcode) - ELSE - CALL h5tbwrite_field_name_f(file_id,dsetname1,field_names(3),start,nrecords,type_sized,& - bufd,errcode) - ENDIF - - CALL h5tbwrite_field_name_f(file_id,dsetname1,field_names(4),start,nrecords,type_sizer,& - bufr,errcode) - - !------------------------------------------------------------------------- - ! read field - !------------------------------------------------------------------------- - - ! Read an invalid field, should fail - CALL h5tbread_field_name_f(file_id,dsetname1,'DoesNotExist',start,nrecords,type_sizec,& - bufsr,errcode) - - IF(errcode.GE.0)THEN - PRINT *, 'error in h5tbread_field_name_f' - CALL h5fclose_f(file_id, errcode) - CALL h5close_f(errcode) - STOP - ENDIF - - ! Read a valid field, should pass - CALL h5tbread_field_name_f(file_id,dsetname1,field_names(1),start,nrecords,type_sizec,& - bufsr,errcode) - IF(errcode.LT.0)THEN - PRINT *, 'error in h5tbread_field_name_f' - CALL h5fclose_f(file_id, errcode) - CALL h5close_f(errcode) - STOP - ENDIF - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufsr(i) .NE. bufs(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufsr(i), ' and ', bufs(i) - STOP - ENDIF - END DO - - CALL h5tbread_field_name_f(file_id,dsetname1,field_names(2),start,nrecords,type_sizei,& - bufir,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufir(i) .NE. bufi(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufir(i), ' and ', bufi(i) - STOP - ENDIF - END DO - - IF(exclude_double)THEN - - CALL h5tbread_field_name_f(file_id,dsetname1,field_names(3),start,nrecords,type_sized,& - bufrr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufrr(i) .NE. bufr(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufrr(i), ' and ', bufr(i) - STOP - ENDIF - END DO - - ELSE - CALL h5tbread_field_name_f(file_id,dsetname1,field_names(3),start,nrecords,type_sized,& - bufdr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufdr(i) .NE. bufd(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufdr(i), ' and ', bufd(i) - STOP - ENDIF - END DO - ENDIF - - - - CALL h5tbread_field_name_f(file_id,dsetname1,field_names(4),start,nrecords,type_sizer,& - bufrr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufrr(i) .NE. bufr(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufrr(i), ' and ', bufr(i) - STOP - ENDIF - END DO - - CALL passed() - - - !------------------------------------------------------------------------- - ! write field - !------------------------------------------------------------------------- - - CALL test_begin(' Read/Write field by index ') - - CALL h5tbwrite_field_index_f(file_id,dsetname1,1,start,nrecords,type_sizec,& - bufs,errcode) - - CALL h5tbwrite_field_index_f(file_id,dsetname1,2,start,nrecords,type_sizei,& - bufi,errcode) - - IF(exclude_double)THEN - CALL h5tbwrite_field_index_f(file_id,dsetname1,3,start,nrecords,type_sized,& - bufr,errcode) - ELSE - CALL h5tbwrite_field_index_f(file_id,dsetname1,3,start,nrecords,type_sized,& - bufd,errcode) - ENDIF - - CALL h5tbwrite_field_index_f(file_id,dsetname1,4,start,nrecords,type_sizer,& - bufr,errcode) - - - - !------------------------------------------------------------------------- - ! read field - !------------------------------------------------------------------------- - - CALL h5tbread_field_index_f(file_id,dsetname1,1,start,nrecords,type_sizec,& - bufsr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufsr(i) .NE. bufs(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufsr(i), ' and ', bufs(i) - STOP - ENDIF - END DO - - CALL h5tbread_field_index_f(file_id,dsetname1,2,start,nrecords,type_sizei,& - bufir,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufir(i) .NE. bufi(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufir(i), ' and ', bufi(i) - STOP - ENDIF - END DO - IF(exclude_double)THEN - CALL h5tbread_field_index_f(file_id,dsetname1,3,start,nrecords,type_sized,& - bufrr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufrr(i) .NE. bufr(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufrr(i), ' and ', bufr(i) - STOP - ENDIF - END DO - ELSE - CALL h5tbread_field_index_f(file_id,dsetname1,3,start,nrecords,type_sized,& - bufdr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufdr(i) .NE. bufd(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufdr(i), ' and ', bufd(i) - STOP - ENDIF - END DO - ENDIF - - CALL h5tbread_field_index_f(file_id,dsetname1,4,start,nrecords,type_sizer,& - bufrr,errcode) - - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufrr(i) .NE. bufr(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufrr(i), ' and ', bufr(i) - STOP - ENDIF - END DO - - - CALL passed() - - - !------------------------------------------------------------------------- - ! Insert field - ! we insert a field callsed "field5" with the same type and buffer as field 4 (Real) - !------------------------------------------------------------------------- - - CALL test_begin(' Insert field ') - - CALL h5tbinsert_field_f(file_id,dsetname1,"field5",field_types(4),4,bufr,errcode) - CALL h5tbread_field_index_f(file_id,dsetname1,5,start,nrecords,type_sizer,& - bufrr,errcode) - ! - ! compare read and write buffers. - ! - DO i = 1, nrecords - IF ( bufrr(i) .NE. bufr(i) ) THEN - PRINT *, 'read buffer differs from write buffer' - PRINT *, bufrr(i), ' and ', bufr(i) - STOP - ENDIF - END DO - - - CALL passed() - - !------------------------------------------------------------------------- - ! Delete field - !------------------------------------------------------------------------- - - CALL test_begin(' Delete field ') - - CALL h5tbdelete_field_f(file_id,dsetname1,"field4abc",errcode) - - CALL passed() - - - !------------------------------------------------------------------------- - ! Gets the number of records and fields - !------------------------------------------------------------------------- - - CALL test_begin(' Get table info ') - - CALL h5tbget_table_info_f(file_id,dsetname1,nfieldsr,nrecordsr,errcode ) - - IF ( nfieldsr .NE. nfields .AND. nrecordsr .NE. nrecords ) THEN - PRINT *, 'h5tbget_table_info_f return error' - STOP - ENDIF - - CALL passed() - - !------------------------------------------------------------------------- - ! Get information about fields - !------------------------------------------------------------------------- - - CALL test_begin(' Get fields info ') - - CALL h5tbget_field_info_f(file_id, dsetname1, nfields, field_namesr, field_sizesr,& - field_offsetr, type_sizeout, errcode, maxlen ) - - IF ( errcode.NE.0 ) THEN - WRITE(*,'(/,5X,"H5TBGET_FIELD_INFO_F: RETURN ERROR")') - STOP - ENDIF - - ! "field4abc" was deleted and "field5" was added. - field_names(4) = "field5" - - IF ( maxlen .NE. 8 ) THEN - WRITE(*,'(/,5X,"H5TBGET_FIELD_INFO_F: INCORRECT MAXIMUM CHARACTER LENGTH OF THE FIELD NAMES")') - WRITE(*,'(5X,"RETURNED VALUE = ", I0, ", CORRECT VALUE = ", I0)') maxlen, 8 - STOP - ENDIF - - DO i = 1, nfields - IF ( field_namesr(i) .NE. field_names(i)) THEN - WRITE(*,'(/,5X,"H5TBGET_FIELD_INFO_F: READ/WRITE FIELD NAMES DIFFER")') - WRITE(*,'(27X,A," AND ",A)') TRIM(field_namesr(i)), TRIM(field_names(i)) - STOP - ENDIF - END DO - - CALL passed() - - - !------------------------------------------------------------------------- - ! end - !------------------------------------------------------------------------- - - ! - ! Close the file. - ! - CALL h5fclose_f(file_id, errcode) - - ! - ! Close FORTRAN predefined datatypes. - ! - CALL h5close_f(errcode) - - ! - ! end function. - ! -END SUBROUTINE test_table1 - - -!------------------------------------------------------------------------- -! test_begin -!------------------------------------------------------------------------- - -SUBROUTINE test_begin(string) - CHARACTER(LEN=*), INTENT(IN) :: string - WRITE(*, fmt = '(14a)', advance = 'no') string - WRITE(*, fmt = '(40x,a)', advance = 'no') ' ' -END SUBROUTINE test_begin - -!------------------------------------------------------------------------- -! passed -!------------------------------------------------------------------------- - -SUBROUTINE passed() - WRITE(*, fmt = '(6a)') 'PASSED' -END SUBROUTINE passed - - |