summaryrefslogtreecommitdiffstats
path: root/hl/test/test_ds.c
diff options
context:
space:
mode:
Diffstat (limited to 'hl/test/test_ds.c')
-rw-r--r--hl/test/test_ds.c220
1 files changed, 193 insertions, 27 deletions
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c
index fa1c3de..4fc268a 100644
--- a/hl/test/test_ds.c
+++ b/hl/test/test_ds.c
@@ -11,32 +11,25 @@
* *
****************************************************************************/
-
-
#include "H5DS.h"
#include "H5LT.h"
#include <stdlib.h>
#include <string.h>
#include "H5IM.h"
-
/* operator functions */
static herr_t verifiy_scale(hid_t dset, unsigned dim, hid_t scale, void *visitor_data);
static herr_t read_scale(hid_t dset, unsigned dim, hid_t scale, void *visitor_data);
static herr_t match_dim_scale(hid_t did, unsigned dim, hid_t dsid, void *visitor_data);
static herr_t op_bogus(hid_t did, unsigned dim, hid_t dsid, void *visitor_data);
-
-
/* prototypes */
static int test_simple(void);
static int test_errors(void);
static int test_rank(void);
+static int test_types(void);
static int test_iterators(void);
-
-
-
#define RANK 2
#define DIM_DATA 12
#define DIM1_SIZE 3
@@ -46,13 +39,12 @@ static int test_iterators(void);
#define DIM1 1
#define DIM2 2
-#define DS_1_NAME "ds_a_1"
-#define DS_11_NAME "ds_a_11"
-#define DS_2_NAME "ds_a_2"
-#define DS_21_NAME "ds_a_21"
-#define DS_22_NAME "ds_a_22"
-#define DS_3_NAME "ds_a_3"
-
+#define DS_1_NAME "ds_a_1"
+#define DS_11_NAME "ds_a_11"
+#define DS_2_NAME "ds_a_2"
+#define DS_21_NAME "ds_a_21"
+#define DS_22_NAME "ds_a_22"
+#define DS_3_NAME "ds_a_3"
#define SCALE_1_NAME "Latitude set 0"
#define SCALE_11_NAME "Latitude set 1"
@@ -60,13 +52,15 @@ static int test_iterators(void);
#define SCALE_21_NAME "Longitude set 1"
#define SCALE_22_NAME "Longitude set 2"
-#define DIM0_LABEL "Latitude"
-#define DIM1_LABEL "Longitude"
+#define DIM0_LABEL "Latitude"
+#define DIM1_LABEL "Longitude"
+
+#define FILE1 "test_ds1.h5"
+#define FILE2 "test_ds2.h5"
+#define FILE3 "test_ds3.h5"
+#define FILE4 "test_ds4.h5"
+#define FILE5 "test_ds5.h5"
-#define FILE1 "test_ds1.h5"
-#define FILE2 "test_ds2.h5"
-#define FILE3 "test_ds3.h5"
-#define FILE4 "test_ds4.h5"
/*-------------------------------------------------------------------------
* the main program
@@ -80,6 +74,7 @@ int main(void)
nerrors += test_errors()<0 ?1:0;
nerrors += test_rank()<0 ?1:0;
nerrors += test_iterators()<0 ?1:0;
+ nerrors += test_types()<0 ?1:0;
if (nerrors) goto error;
printf("All dimension scales tests passed.\n");
@@ -2263,7 +2258,7 @@ out:
/*-------------------------------------------------------------------------
- * test several rank and types
+ * test several ranks
*-------------------------------------------------------------------------
*/
@@ -2311,7 +2306,6 @@ static int test_rank(void)
/* make a 3D scale dataset */
if (H5LTmake_dataset_int(fid,"ds_a_2",3,dims3,NULL)<0)
goto out;
-
/*-------------------------------------------------------------------------
* attach
@@ -2364,13 +2358,11 @@ static int test_rank(void)
if (H5Dclose(dsid)<0)
goto out;
}
-
if (H5Dclose(did)<0)
goto out;
PASSED();
-
/*-------------------------------------------------------------------------
* attach, set, get names, labels
*-------------------------------------------------------------------------
@@ -2452,9 +2444,182 @@ static int test_rank(void)
PASSED();
+/*-------------------------------------------------------------------------
+ * close
+ *-------------------------------------------------------------------------
+ */
+ if (H5Fclose(fid)<0)
+ goto out;
+
+ return 0;
+
+ /* error zone, gracefully close */
+out:
+ H5E_BEGIN_TRY {
+ H5Dclose(did);
+ H5Dclose(dsid);
+ H5Fclose(fid);
+ } H5E_END_TRY;
+ H5_FAILED();
+ return FAIL;
+}
+
+
+/*-------------------------------------------------------------------------
+ * attach scales with several datatypes
+ *-------------------------------------------------------------------------
+ */
+
+static int test_types(void)
+{
+ hid_t fid; /* file ID */
+ hid_t did; /* dataset ID */
+ hid_t dsid; /* DS dataset ID */
+ int rank = RANK; /* rank of data dataset */
+ int rankds = 1; /* rank of DS dataset */
+ hsize_t dims[RANK] = {DIM1_SIZE,DIM2_SIZE}; /* size of data dataset */
+ int buf[DIM_DATA] = {1,2,3,4,5,6,7,8,9,10,11,12}; /* data of data dataset */
+ hsize_t s1_dim[1] = {DIM1_SIZE}; /* size of DS 1 dataset */
+ hsize_t s2_dim[1] = {DIM2_SIZE}; /* size of DS 2 dataset */
+ float s1_float[DIM1_SIZE] = {10,20,30}; /* data of DS 1 dataset */
+ unsigned short s2_ushort[DIM2_SIZE] = {10,20,30,40}; /* data of DS 2 dataset */
+ char *s1_str = "ABC";
+ char *s2_str = "ABCD";
+
+ printf("Testing scales with several datatypes\n");
+
+/*-------------------------------------------------------------------------
+ * create a file for the test
+ *-------------------------------------------------------------------------
+ */
+ /* create a file using default properties */
+ if ((fid=H5Fcreate(FILE5,H5F_ACC_TRUNC,H5P_DEFAULT,H5P_DEFAULT))<0)
+ goto out;
+
+/*-------------------------------------------------------------------------
+ * create datasets: 1 "data" dataset and 2 dimension scales
+ *-------------------------------------------------------------------------
+ */
+
+ /* make a dataset */
+ if (H5LTmake_dataset_int(fid,"dset_a",rank,dims,buf)<0)
+ goto out;
+
+ /* make a DS dataset for the first dimension */
+ if (H5LTmake_dataset_float(fid,DS_1_NAME,rankds,s1_dim,s1_float)<0)
+ goto out;
+
+ /* make a DS dataset for the second dimension */
+ if (H5LTmake_dataset(fid,DS_2_NAME,rankds,s2_dim,H5T_NATIVE_USHORT,s2_ushort)<0)
+ goto out;
+
+/*-------------------------------------------------------------------------
+ * floating point and short scales
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING2("floating point and short scales");
+
+ /* get the dataset id for "dset_a" */
+ if ((did = H5Dopen(fid,"dset_a"))<0)
+ goto out;
+
+ /* get the DS dataset id */
+ if ((dsid = H5Dopen(fid,DS_1_NAME))<0)
+ goto out;
+ /* attach the DS_1_NAME dimension scale to "dset_a" at dimension 0 */
+ if (H5DSattach_scale(did,dsid,DIM0)<0)
+ goto out;
+ /* set name */
+ if (H5DSset_scale(dsid,SCALE_1_NAME)<0)
+ goto out;
+ /* close DS id */
+ if (H5Dclose(dsid)<0)
+ goto out;
+ /* get the DS dataset id */
+ if ((dsid = H5Dopen(fid,DS_2_NAME))<0)
+ goto out;
+ /* attach the DS_2_NAME dimension scale to "dset_a" at dimension 1 */
+ if (H5DSattach_scale(did,dsid,DIM1)<0)
+ goto out;
+ /* set name */
+ if (H5DSset_scale(dsid,SCALE_2_NAME)<0)
+ goto out;
+ /* close DS id */
+ if (H5Dclose(dsid)<0)
+ goto out;
+ /* set a label */
+ if (H5DSset_label(did,DIM0,DIM0_LABEL)<0)
+ goto out;
+ if (H5DSset_label(did,DIM1,DIM1_LABEL)<0)
+ goto out;
+ /* close */
+ if (H5Dclose(did)<0)
+ goto out;
+
+ PASSED();
+
+/*-------------------------------------------------------------------------
+ * create datasets: 1 "data" dataset and 2 dimension scales
+ *-------------------------------------------------------------------------
+ */
+
+ /* make a dataset */
+ if (H5LTmake_dataset_int(fid,"dset_b",rank,dims,buf)<0)
+ goto out;
+ /* make a DS dataset for the first dimension */
+ if (H5LTmake_dataset_string(fid,"ds_b_1",s1_str)<0)
+ goto out;
+ /* make a DS dataset for the second dimension */
+ if (H5LTmake_dataset_string(fid,"ds_b_2",s2_str)<0)
+ goto out;
+
+/*-------------------------------------------------------------------------
+ * floating point and short scales
+ *-------------------------------------------------------------------------
+ */
+
+ TESTING2("string scales");
+
+ /* get the dataset id for "dset_b" */
+ if ((did = H5Dopen(fid,"dset_b"))<0)
+ goto out;
+ /* get the DS dataset id */
+ if ((dsid = H5Dopen(fid,"ds_b_1"))<0)
+ goto out;
+ /* attach the DS_1_NAME dimension scale to "dset_b" at dimension 0 */
+ if (H5DSattach_scale(did,dsid,DIM0)<0)
+ goto out;
+ /* set name */
+ if (H5DSset_scale(dsid,SCALE_1_NAME)<0)
+ goto out;
+ /* close DS id */
+ if (H5Dclose(dsid)<0)
+ goto out;
+ /* get the DS dataset id */
+ if ((dsid = H5Dopen(fid,"ds_b_2"))<0)
+ goto out;
+ /* attach the DS_2_NAME dimension scale to "dset_b" at dimension 1 */
+ if (H5DSattach_scale(did,dsid,DIM1)<0)
+ goto out;
+ /* set name */
+ if (H5DSset_scale(dsid,SCALE_2_NAME)<0)
+ goto out;
+ /* close DS id */
+ if (H5Dclose(dsid)<0)
+ goto out;
+ /* set a label */
+ if (H5DSset_label(did,DIM0,DIM0_LABEL)<0)
+ goto out;
+ if (H5DSset_label(did,DIM1,DIM1_LABEL)<0)
+ goto out;
+ /* close */
+ if (H5Dclose(did)<0)
+ goto out;
+ PASSED();
/*-------------------------------------------------------------------------
* close
@@ -2468,10 +2633,11 @@ static int test_rank(void)
/* error zone, gracefully close */
out:
H5E_BEGIN_TRY {
- H5Dclose(did);
- H5Dclose(dsid);
H5Fclose(fid);
} H5E_END_TRY;
H5_FAILED();
return FAIL;
}
+
+
+