summaryrefslogtreecommitdiffstats
path: root/test/dtypes.c
diff options
context:
space:
mode:
authorRaymond Lu <songyulu@hdfgroup.org>2010-08-19 15:27:56 (GMT)
committerRaymond Lu <songyulu@hdfgroup.org>2010-08-19 15:27:56 (GMT)
commite56b6f6c4019ad7dddf2325c91b134646fcb55e6 (patch)
treef18d1e2dbe3005e3359cf2eefd02c2d69b201213 /test/dtypes.c
parentee251b8395c98300e2c3b43fbddc7fe4461e6086 (diff)
downloadhdf5-e56b6f6c4019ad7dddf2325c91b134646fcb55e6.zip
hdf5-e56b6f6c4019ad7dddf2325c91b134646fcb55e6.tar.gz
hdf5-e56b6f6c4019ad7dddf2325c91b134646fcb55e6.tar.bz2
[svn-r19251] New feature(bug #1934): I made H5Tset_order support all data types with some restictions:
1. For enum type, members shouldn't be defined yet. 2. H5T_ORDER_NONE only works for reference and fixed-length string. 3. For opaque type, the order will be ignored. 4. For compound type, all restrictions above apply to the members. I'll change H5Tget_order and do another commit. There is no change to configure.in, config, and Makefile.am. There is some property change for these files when I did a merge from 1.8. Tested on jam. But I tested the 1.8 on heiwa, and amani.
Diffstat (limited to 'test/dtypes.c')
-rw-r--r--test/dtypes.c135
1 files changed, 118 insertions, 17 deletions
diff --git a/test/dtypes.c b/test/dtypes.c
index e42c243..caa5ac0 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -4859,13 +4859,8 @@ opaque_funcs(void)
TEST_ERROR
} /* end if */
- H5E_BEGIN_TRY {
- ret=H5Tset_order(type, H5T_ORDER_BE);
- } H5E_END_TRY;
- if (ret>=0) {
- printf("Operation not allowed for this type.\n");
- TEST_ERROR
- } /* end if */
+ /* No effect on opaque type */
+ if(H5Tset_order(type, H5T_ORDER_BE) < 0) TEST_ERROR
H5E_BEGIN_TRY {
sign = H5Tget_sign(type);
@@ -5846,23 +5841,18 @@ test_set_order(void)
if (H5T_ORDER_BE != H5Tget_order(dtype)) TEST_ERROR;
if (H5Tclose(dtype) < 0) TEST_ERROR
- /* Opaque - functions should fail */
+ /* Opaque - No effect on the order */
if ((dtype = H5Tcreate(H5T_OPAQUE, (size_t)96)) < 0) TEST_ERROR
- H5E_BEGIN_TRY
- ret = H5Tset_order(dtype, H5T_ORDER_LE);
- order = H5Tget_order(dtype);
- H5E_END_TRY
- if (ret >= 0) TEST_ERROR
- if (order >= 0) TEST_ERROR
+ if (H5Tset_order(dtype, H5T_ORDER_NONE) < 0) TEST_ERROR
+ if (H5Tset_order(dtype, H5T_ORDER_BE) < 0) TEST_ERROR
if (H5Tclose(dtype) < 0) TEST_ERROR
- /* Compound - functions should fail */
+ /* Compound */
if ((dtype = H5Tcreate(H5T_COMPOUND, (size_t)48)) < 0) TEST_ERROR
+ if (H5Tset_order(dtype, H5T_ORDER_BE) < 0) TEST_ERROR
H5E_BEGIN_TRY
- ret = H5Tset_order(dtype, H5T_ORDER_LE);
order = H5Tget_order(dtype);
H5E_END_TRY
- if (ret >= 0) TEST_ERROR
if (order >= 0) TEST_ERROR
if (H5Tclose(dtype) < 0) TEST_ERROR
@@ -5925,6 +5915,116 @@ error:
/*-------------------------------------------------------------------------
+ * Function: test_set_order_compound
+ *
+ * Purpose: Tests H5Tset_order/H5Tget_order for complicated compound
+ * type.
+ *
+ * Return: Success: 0
+ *
+ * Failure: number of errors
+ *
+ * Programmer: Raymond Lu
+ * 18 August 2010
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_set_order_compound(hid_t fapl)
+{
+ typedef struct { /* Struct with atomic fields */
+ int i;
+ char c;
+ short s;
+ float f;
+ } atomic_cmpd;
+
+ typedef struct { /* Struct with complex fields */
+ atomic_cmpd a;
+ hvl_t vl;
+ double b[3][4];
+ atomic_cmpd d[3][4];
+ } complex_cmpd;
+
+ hid_t file;
+ hid_t cmpd, memb_cmpd, memb_array1, memb_array2;
+ hid_t vl_id;
+ H5T_order_t order; /* Byte order */
+ hsize_t dims[2] = {3, 4}; /* Array dimenstions */
+ char filename[1024];
+ herr_t ret; /* Generic return value */
+
+ TESTING("H5Tset/get_order for compound type");
+
+ if ((memb_cmpd = H5Tcreate(H5T_COMPOUND, sizeof(atomic_cmpd))) < 0) TEST_ERROR
+ if(H5Tinsert(memb_cmpd, "i", HOFFSET(atomic_cmpd, i), H5T_NATIVE_INT) < 0) TEST_ERROR
+ if(H5Tinsert(memb_cmpd, "c", HOFFSET(atomic_cmpd, c), H5T_NATIVE_CHAR) < 0) TEST_ERROR
+ if(H5Tinsert(memb_cmpd, "s", HOFFSET(atomic_cmpd, s), H5T_NATIVE_SHORT) < 0) TEST_ERROR
+ if(H5Tinsert(memb_cmpd, "f", HOFFSET(atomic_cmpd, f), H5T_NATIVE_FLOAT) < 0) TEST_ERROR
+
+ /* Create the simple array datatype */
+ memb_array1 = H5Tarray_create2(H5T_NATIVE_DOUBLE, 2, dims);
+ memb_array2 = H5Tarray_create2(memb_cmpd, 2, dims);
+
+ /* Create a variable-length datatype */
+ if ((vl_id = H5Tvlen_create(H5T_NATIVE_UINT)) < 0) TEST_ERROR
+
+ /* Create a compound type using the types above. */
+ if ((cmpd = H5Tcreate(H5T_COMPOUND, sizeof(complex_cmpd))) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, "a", HOFFSET(complex_cmpd, a), memb_cmpd) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, "vl_type", HOFFSET(complex_cmpd, vl), vl_id) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, "b", HOFFSET(complex_cmpd, b), memb_array1) < 0) TEST_ERROR
+ if(H5Tinsert(cmpd, "d", HOFFSET(complex_cmpd, d), memb_array2) < 0) TEST_ERROR
+
+ /* Verify that the order can't be 'none'. */
+ H5E_BEGIN_TRY
+ ret = H5Tset_order(cmpd, H5T_ORDER_NONE);
+ H5E_END_TRY
+ if (ret >= 0) TEST_ERROR
+
+ /* Change the order */
+ if (H5Tset_order(cmpd, H5T_ORDER_BE) < 0) TEST_ERROR
+
+ /* Create file */
+ h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
+
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
+
+ /* Commit the data type */
+ if(H5Tcommit2(file, "compound", cmpd, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
+
+ /* Verify that committed type can't change order */
+ H5E_BEGIN_TRY
+ ret = H5Tset_order(cmpd, H5T_ORDER_LE);
+ H5E_END_TRY
+ if (ret >= 0) TEST_ERROR
+
+ if (H5Tclose(memb_cmpd) < 0) TEST_ERROR
+ if (H5Tclose(memb_array1) < 0) TEST_ERROR
+ if (H5Tclose(memb_array2) < 0) TEST_ERROR
+ if (H5Tclose(vl_id) < 0) TEST_ERROR
+ if (H5Tclose(cmpd) < 0) TEST_ERROR
+ if (H5Fclose(file) < 0) TEST_ERROR
+
+ PASSED();
+ return 0;
+
+error:
+ H5E_BEGIN_TRY
+ H5Tclose(memb_cmpd);
+ H5Tclose(memb_array1);
+ H5Tclose(memb_array2);
+ H5Tclose(vl_id);
+ H5Tclose(cmpd);
+ H5Fclose(file);
+ H5E_END_TRY;
+ return 1;
+} /* end test_set_order_compound() */
+
+
+/*-------------------------------------------------------------------------
* Function: test_named_indirect_reopen
*
* Purpose: Tests that open named datatypes can be reopened indirectly
@@ -6320,6 +6420,7 @@ main(void)
nerrors += test_latest();
nerrors += test_int_float_except();
nerrors += test_named_indirect_reopen(fapl);
+ nerrors += test_set_order_compound(fapl);
#ifndef H5_NO_DEPRECATED_SYMBOLS
nerrors += test_deprec(fapl);
#endif /* H5_NO_DEPRECATED_SYMBOLS */