summaryrefslogtreecommitdiffstats
path: root/fortran/test/tH5Sselect.F90
diff options
context:
space:
mode:
Diffstat (limited to 'fortran/test/tH5Sselect.F90')
-rw-r--r--fortran/test/tH5Sselect.F90144
1 files changed, 140 insertions, 4 deletions
diff --git a/fortran/test/tH5Sselect.F90 b/fortran/test/tH5Sselect.F90
index b6d28d3..bcf254a 100644
--- a/fortran/test/tH5Sselect.F90
+++ b/fortran/test/tH5Sselect.F90
@@ -314,7 +314,146 @@ CONTAINS
END SUBROUTINE test_select_hyperslab
!
- !Subroutine to test element selection
+ ! Subroutine to test selection iterations
+ !
+
+ SUBROUTINE test_select_iter(cleanup, total_error)
+
+ IMPLICIT NONE
+ LOGICAL, INTENT(IN) :: cleanup
+ INTEGER, INTENT(INOUT) :: total_error
+
+ INTEGER, PARAMETER :: POINT1_NPOINTS = 10
+ INTEGER(SIZE_T), PARAMETER :: SEL_ITER_MAX_SEQ = 256 ! Information for testing selection iterators
+ INTEGER, PARAMETER :: rank = 2
+ INTEGER(SIZE_T), PARAMETER :: NUMP = 4
+
+ INTEGER(hsize_t), DIMENSION(2) :: dims1 = (/12, 6/) ! 2-D Dataspace dimensions
+ INTEGER(HID_T) :: sid ! Dataspace ID
+ INTEGER(HID_T) :: iter_id ! Dataspace selection iterator ID
+ INTEGER(HSIZE_T), DIMENSION(rank, POINT1_NPOINTS) :: coord1 ! Coordinates for point selection
+ INTEGER(HSIZE_T), DIMENSION(2) :: start ! Hyperslab start
+ INTEGER(HSIZE_T), DIMENSION(2) :: stride ! Hyperslab stride
+ INTEGER(HSIZE_T), DIMENSION(2) :: count ! Hyperslab block count
+ INTEGER(HSIZE_T), DIMENSION(2) :: BLOCK ! Hyperslab block size
+ INTEGER(SIZE_T) :: nseq ! # of sequences retrieved
+ INTEGER(SIZE_T) :: nbytes ! # of bytes retrieved
+ INTEGER(HSIZE_T), DIMENSION(SEL_ITER_MAX_SEQ) :: off ! Offsets for retrieved sequences
+ INTEGER(SIZE_T), DIMENSION(SEL_ITER_MAX_SEQ) :: ilen ! Lengths for retrieved sequences
+ INTEGER :: sel_type ! Selection type
+ INTEGER :: error ! Error return value
+ integer(size_t) :: i
+
+ ! Create dataspace
+ CALL H5Screate_simple_f(2, dims1, sid, error)
+ CALL check("H5Screate_simple_f", error, total_error)
+
+ ! Test iterators on various basic selection types
+ DO sel_type = H5S_SEL_NONE_F, H5S_SEL_ALL_F
+ IF(sel_type .EQ. H5S_SEL_NONE_F)THEN ! "None" selection
+ CALL H5Sselect_none_f(sid, error)
+ CALL check("H5Sselect_none_f", error, total_error)
+ ELSE IF(sel_type.EQ.H5S_SEL_POINTS_F)THEN ! Point selection
+ ! Select sequence of four points
+ coord1(1, 1) = 1
+ coord1(2, 1) = 2
+ coord1(1, 2) = 3
+ coord1(2, 2) = 4
+ coord1(1, 3) = 5
+ coord1(2, 3) = 6
+ coord1(1, 4) = 7
+ coord1(2, 4) = 8
+ CALL H5Sselect_elements_f(sid, H5S_SELECT_SET_F, rank, NUMP, coord1, error)
+ CALL check("H5Sselect_elements_f", error, total_error)
+ ELSE IF(sel_type.EQ.H5S_SEL_HYPERSLABS_F)THEN ! Hyperslab selection
+ ! Select regular hyperslab
+ start(1) = 0
+ start(2) = 0
+ stride(1) = 1
+ stride(2) = 1
+ COUNT(1) = 4
+ COUNT(2) = 4
+ BLOCK(1) = 1
+ BLOCK(2) = 1
+ CALL H5Sselect_hyperslab_f(sid, H5S_SELECT_SET_F, start, count, error, stride=stride, BLOCK=BLOCK)
+ CALL check("H5Sselect_hyperslab_f", error, total_error)
+ ELSE IF(sel_type.EQ.H5S_SEL_ALL_F)THEN ! "All" selection
+ CALL H5Sselect_all_f(sid, error)
+ CALL check("H5Sselect_all_f", error, total_error)
+ ELSE
+ CALL check("Incorrect selection option", error, total_error)
+ ENDIF
+
+ ! Create selection iterator object
+ CALL H5Ssel_iter_create_f(sid, 1_size_t, H5S_SEL_ITER_SHARE_WITH_DATASPACE_F, iter_id, error)
+ CALL check("H5Ssel_iter_create_f", error, total_error)
+
+ ! Try retrieving all sequence
+ off = -99
+ ilen = -99
+ CALL H5Ssel_iter_get_seq_list_f(iter_id, SEL_ITER_MAX_SEQ, 1024_size_t * 1024_size_t, nseq, nbytes, off, ilen, error)
+ CALL check("H5Ssel_iter_get_seq_list_f", error, total_error)
+
+ ! Check results from retrieving sequence list
+
+ IF (sel_type .EQ. H5S_SEL_NONE_F)THEN ! "None" selection
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nseq, INT(0,SIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nbytes, INT(0,SIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(1), INT(-99,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(1), INT(-99,SIZE_T), total_error)
+ ELSE IF (sel_type .EQ. H5S_SEL_POINTS_F)THEN ! Point selection
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nseq, 4_SIZE_T, total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nbytes, 4_SIZE_T, total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(NUMP+1), INT(-99,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(NUMP+1), INT(-99,SIZE_T), total_error)
+ DO i = 1, NUMP
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(i), INT((i-1)*26+12,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(i), INT(1,SIZE_T), total_error)
+ ENDDO
+ ELSE IF (sel_type .eq. H5S_SEL_HYPERSLABS_F)THEN ! Hyperslab selection
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nseq, 4_SIZE_T, total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nbytes, 16_SIZE_T, total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(NUMP+1), INT(-99,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(NUMP+1), INT(-99,SIZE_T), total_error)
+ DO i = 1, NUMP
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(i), INT((i-1)*12,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(i), INT(4,SIZE_T), total_error)
+ ENDDO
+ ELSE IF (sel_type.EQ.H5S_SEL_ALL_F)THEN ! "All" selection
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nseq, 1_SIZE_T, total_error )
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", nbytes, 72_SIZE_T, total_error )
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(1), INT(0,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(1), INT(72,SIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", off(2), INT(-99,HSIZE_T), total_error)
+ CALL VERIFY("H5Ssel_iter_get_seq_list_f", ilen(2), INT(-99,SIZE_T), total_error)
+ ELSE
+ CALL check("Incorrect selection option", error, total_error)
+ ENDIF
+
+ ! Reset iterator
+ CALL H5Ssel_iter_reset_f(iter_id, sid, error)
+ CALL check("H5Ssel_iter_reset_f", error, total_error)
+
+ ! Close selection iterator
+ CALL H5Ssel_iter_close_f(iter_id, error)
+ CALL check("H5Ssel_iter_close_f", error, total_error)
+ END DO
+
+ ! Create selection iterator object
+ CALL H5Ssel_iter_create_f(sid, 1_size_t, H5S_SEL_ITER_GET_SEQ_LIST_SORTED_F, iter_id, error)
+ CALL check("H5Ssel_iter_create_f", error, total_error)
+
+ ! Reset iterator
+ CALL H5Ssel_iter_reset_f(iter_id, sid, error)
+ CALL check("H5Ssel_iter_reset_f", error, total_error)
+
+ CALL h5sclose_f(sid, error)
+ CALL check("h5sclose_f", error, total_error)
+
+ END SUBROUTINE test_select_iter
+
+ !
+ ! Subroutine to test element selection
!
SUBROUTINE test_select_element(cleanup, total_error)
@@ -1043,9 +1182,6 @@ CONTAINS
!
DEALLOCATE(pointlist)
-
-
-
!
!Close the dataspace for the dataset.
!