summaryrefslogtreecommitdiffstats
path: root/test/unlink.c
diff options
context:
space:
mode:
authorQuincey Koziol <koziol@hdfgroup.org>2006-10-02 10:24:03 (GMT)
committerQuincey Koziol <koziol@hdfgroup.org>2006-10-02 10:24:03 (GMT)
commita6f6462541cc57364586f770131e2ea074d63492 (patch)
tree0debf502fb7d66f9f470edb935a62223945960d4 /test/unlink.c
parent9bc29ea538b9ce2013a8cde5be230c18cf052009 (diff)
downloadhdf5-a6f6462541cc57364586f770131e2ea074d63492.zip
hdf5-a6f6462541cc57364586f770131e2ea074d63492.tar.gz
hdf5-a6f6462541cc57364586f770131e2ea074d63492.tar.bz2
[svn-r12700] Alert:
File format is not stable, don't keep files produced! Description: First stage of checkins modifying the format of groups to support creation order. Implement "dense" storage for links in groups. Try to clarify some of the symbols for the H5L API. Add the H5Pset_latest_format() flag for FAPLs, to choose to use the newest file format options (including "dense" link storage in groups) Add the H5Pset_track_creation_order() flag for GCPLs, to enable creation order tracking in groups (although no index on creation order yet). Remove --enable-group-revision configure flag, as file format issues are now handled in a backwardly/forwardly compatible way. Clean up lots of compiler warnings and other minor formatting issues. Tested on: FreeBSD/32 4.11 (sleipnir) w/threadsafe Linux/32 2.4 (heping) w/FORTRAN & C++ Linux/64 2.4 (mir) w/enable-v1.6 compa Mac OSX/32 10.4.8 (amazon) AIX 5.3 (copper) w/parallel & FORTRAN
Diffstat (limited to 'test/unlink.c')
-rw-r--r--test/unlink.c1377
1 files changed, 686 insertions, 691 deletions
diff --git a/test/unlink.c b/test/unlink.c
index 1ad3790..908ea1d 100644
--- a/test/unlink.c
+++ b/test/unlink.c
@@ -77,7 +77,9 @@ const char *FILENAME[] = {
#define SLASHES_ROOTLINK_NAME "Root///"
#define FULL_GROUP_NUM_KEEP 2
#define FULL_GROUP_NUM_DELETE_COMPACT 2
-#define FULL_GROUP_NUM_DELETE_DENSE 16
+#define FULL_GROUP_NUM_DELETE_DENSE 16
+#define FULL_GROUP_EST_NUM_ENTRIES 8
+#define FULL_GROUP_EST_ENTRY_LEN 9
/*-------------------------------------------------------------------------
@@ -104,38 +106,35 @@ test_one(hid_t file)
herr_t status;
/* Create a test group */
- if ((work=H5Gcreate(file, "/test_one", 0))<0) goto error;
+ if((work=H5Gcreate(file, "/test_one", (size_t)0)) < 0) goto error;
/* Delete by absolute name */
TESTING("unlink by absolute name");
- if ((grp=H5Gcreate(work, "foo", 0))<0) goto error;
- if (H5Gclose(grp)<0) goto error;
- if (H5Gunlink(file, "/test_one/foo")<0) goto error;
+ if((grp=H5Gcreate(work, "foo", (size_t)0)) < 0) TEST_ERROR
+ if(H5Gclose(grp) < 0) TEST_ERROR
+ if(H5Gunlink(file, "/test_one/foo") < 0) TEST_ERROR
PASSED();
/* Delete by local name */
TESTING("unlink by local name");
- if ((grp=H5Gcreate(work, "foo", 0))<0) goto error;
- if (H5Gclose(grp)<0) goto error;
- if (H5Gunlink(work, "foo")<0) goto error;
+ if((grp=H5Gcreate(work, "foo", (size_t)0)) < 0) TEST_ERROR
+ if(H5Gclose(grp) < 0) TEST_ERROR
+ if(H5Gunlink(work, "foo") < 0) TEST_ERROR
PASSED();
/* Delete directly - should fail */
TESTING("unlink without a name");
- if ((grp=H5Gcreate(work, "foo", 0))<0) goto error;
+ if((grp=H5Gcreate(work, "foo", (size_t)0)) < 0) TEST_ERROR
H5E_BEGIN_TRY {
status = H5Gunlink(grp, ".");
} H5E_END_TRY;
- if (status>=0) {
- H5_FAILED();
- puts(" Unlinking object w/o a name should have failed.");
- goto error;
- }
- if (H5Gclose(grp)<0) goto error;
+ if(status>=0)
+ FAIL_PUTS_ERROR(" Unlinking object w/o a name should have failed.")
+ if(H5Gclose(grp) < 0) TEST_ERROR
PASSED();
/* Cleanup */
- if (H5Gclose(work)<0) goto error;
+ if(H5Gclose(work) < 0) goto error;
return 0;
error:
@@ -172,19 +171,19 @@ test_many(hid_t file)
char name[32];
/* Create a test group */
- if ((work=H5Gcreate(file, "/test_many", 0))<0) goto error;
- if ((grp = H5Gcreate(work, "/test_many_foo", 0))<0) goto error;
- if (H5Gclose(grp)<0) goto error;
+ if((work=H5Gcreate(file, "/test_many", (size_t)0)) < 0) goto error;
+ if((grp = H5Gcreate(work, "/test_many_foo", (size_t)0)) < 0) goto error;
+ if(H5Gclose(grp) < 0) goto error;
/* Create a bunch of names and unlink them in order */
TESTING("forward unlink");
for (i=0; i<how_many; i++) {
sprintf(name, "obj_%05d", i);
- if (H5Glink(work, H5L_LINK_HARD, "/test_many_foo", name)<0) goto error;
+ if (H5Glink(work, H5L_TYPE_HARD, "/test_many_foo", name) < 0) TEST_ERROR
}
for (i=0; i<how_many; i++) {
sprintf(name, "obj_%05d", i);
- if (H5Gunlink(work, name)<0) goto error;
+ if (H5Gunlink(work, name) < 0) TEST_ERROR
}
PASSED();
@@ -192,11 +191,11 @@ test_many(hid_t file)
TESTING("backward unlink");
for (i=0; i<how_many; i++) {
sprintf(name, "obj_%05d", i);
- if (H5Glink(work, H5L_LINK_HARD, "/test_many_foo", name)<0) goto error;
+ if (H5Glink(work, H5L_TYPE_HARD, "/test_many_foo", name) < 0) TEST_ERROR
}
for (i=how_many-1; i>=0; --i) {
sprintf(name, "obj_%05d", i);
- if (H5Gunlink(work, name)<0) goto error;
+ if (H5Gunlink(work, name) < 0) TEST_ERROR
}
PASSED();
@@ -204,7 +203,7 @@ test_many(hid_t file)
TESTING("inward unlink");
for (i=0; i<how_many; i++) {
sprintf(name, "obj_%05d", i);
- if (H5Glink(work, H5L_LINK_HARD, "/test_many_foo", name)<0) goto error;
+ if (H5Glink(work, H5L_TYPE_HARD, "/test_many_foo", name) < 0) TEST_ERROR
}
for (i=0; i<how_many; i++) {
if (i%2) {
@@ -212,7 +211,7 @@ test_many(hid_t file)
} else {
sprintf(name, "obj_%05d", i/2);
}
- if (H5Gunlink(work, name)<0) goto error;
+ if (H5Gunlink(work, name) < 0) TEST_ERROR
}
PASSED();
@@ -220,7 +219,7 @@ test_many(hid_t file)
TESTING("outward unlink");
for (i=0; i<how_many; i++) {
sprintf(name, "obj_%05d", i);
- if (H5Glink(work, H5L_LINK_HARD, "/test_many_foo", name)<0) goto error;
+ if (H5Glink(work, H5L_TYPE_HARD, "/test_many_foo", name) < 0) TEST_ERROR
}
for (i=how_many-1; i>=0; --i) {
if (i%2) {
@@ -228,13 +227,13 @@ test_many(hid_t file)
} else {
sprintf(name, "obj_%05d", i/2);
}
- if (H5Gunlink(work, name)<0) goto error;
+ if (H5Gunlink(work, name) < 0) TEST_ERROR
}
PASSED();
/* Cleanup */
- if (H5Gclose(work)<0) goto error;
+ if (H5Gclose(work) < 0) goto error;
return 0;
error:
@@ -268,12 +267,12 @@ test_symlink(hid_t file)
TESTING("symlink removal");
/* Create a test group and symlink */
- if ((work=H5Gcreate(file, "/test_symlink", 0))<0) TEST_ERROR;
- if (H5Glink(work, H5L_LINK_SOFT, "link_value", "link")<0) TEST_ERROR;
- if (H5Gunlink(work, "link")<0) TEST_ERROR;
+ if ((work=H5Gcreate(file, "/test_symlink", (size_t)0)) < 0) TEST_ERROR
+ if (H5Glink(work, H5L_TYPE_SOFT, "link_value", "link") < 0) TEST_ERROR
+ if (H5Gunlink(work, "link") < 0) TEST_ERROR
/* Cleanup */
- if (H5Gclose(work)<0) TEST_ERROR;
+ if (H5Gclose(work) < 0) TEST_ERROR
PASSED();
return 0;
@@ -308,24 +307,24 @@ test_rename(hid_t file)
/* Create a test group and rename something */
TESTING("object renaming");
- if ((work=H5Gcreate(file, "/test_rename", 0))<0) goto error;
- if ((foo=H5Gcreate(work, "foo", 0))<0) goto error;
- if (H5Gmove(work, "foo", "bar")<0) goto error;
- if ((inner=H5Gcreate(foo, "inner", 0))<0) goto error;
- if (H5Gclose(inner)<0) goto error;
- if (H5Gclose(foo)<0) goto error;
- if ((inner=H5Gopen(work, "bar/inner"))<0) goto error;
- if (H5Gclose(inner)<0) goto error;
+ if ((work=H5Gcreate(file, "/test_rename", (size_t)0)) < 0) TEST_ERROR
+ if ((foo=H5Gcreate(work, "foo", (size_t)0)) < 0) TEST_ERROR
+ if (H5Gmove(work, "foo", "bar") < 0) TEST_ERROR
+ if ((inner=H5Gcreate(foo, "inner", (size_t)0)) < 0) TEST_ERROR
+ if (H5Gclose(inner) < 0) TEST_ERROR
+ if (H5Gclose(foo) < 0) TEST_ERROR
+ if ((inner=H5Gopen(work, "bar/inner")) < 0) TEST_ERROR
+ if (H5Gclose(inner) < 0) TEST_ERROR
PASSED();
/* Try renaming a symlink */
TESTING("symlink renaming");
- if (H5Glink(work, H5L_LINK_SOFT, "link_value", "link_one")<0) goto error;
- if (H5Gmove(work, "link_one", "link_two")<0) goto error;
+ if (H5Glink(work, H5L_TYPE_SOFT, "link_value", "link_one") < 0) TEST_ERROR
+ if (H5Gmove(work, "link_one", "link_two") < 0) TEST_ERROR
PASSED();
/* Cleanup */
- if (H5Gclose(work)<0) goto error;
+ if (H5Gclose(work) < 0) goto error;
return 0;
error:
@@ -355,61 +354,52 @@ test_rename(hid_t file)
*-------------------------------------------------------------------------
*/
static int
-test_new_move(void)
+test_new_move(hid_t fapl)
{
- hid_t fapl, file_a, file_b=(-1);
+ hid_t file_a, file_b=(-1);
hid_t grp_1=(-1), grp_2=(-1), grp_move=(-1), moved_grp=(-1);
char filename[1024];
TESTING("new move");
/* Create a second file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
- if ((file_a=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
- goto error;
+ if((file_a = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
h5_fixname(FILENAME[2], fapl, filename, sizeof filename);
- if ((file_b=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
- goto error;
+ if((file_b = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create groups in first file */
- if((grp_1=H5Gcreate(file_a, "group1", 0))<0) goto error;
- if((grp_2=H5Gcreate(file_a, "group2", 0))<0) goto error;
- if((grp_move=H5Gcreate(grp_1, "group_move", 0))<0) goto error;
+ if((grp_1 = H5Gcreate(file_a, "group1", (size_t)0)) < 0) TEST_ERROR
+ if((grp_2 = H5Gcreate(file_a, "group2", (size_t)0)) < 0) TEST_ERROR
+ if((grp_move = H5Gcreate(grp_1, "group_move", (size_t)0)) < 0) TEST_ERROR
/* Create hard and soft links. */
- if(H5Glink2(grp_1, "group_move", H5L_LINK_HARD, H5G_SAME_LOC, "hard")<0)
- goto error;
- if(H5Glink2(grp_1, "/group1/group_move", H5L_LINK_SOFT, grp_2, "soft")<0)
- goto error;
+ if(H5Glink2(grp_1, "group_move", H5L_TYPE_HARD, H5G_SAME_LOC, "hard") < 0) TEST_ERROR
+ if(H5Glink2(grp_1, "/group1/group_move", H5L_TYPE_SOFT, grp_2, "soft") < 0) TEST_ERROR
/* Move a group within the file. Both of source and destination use
* H5G_SAME_LOC. Should fail. */
H5E_BEGIN_TRY {
- if(H5Gmove2(H5G_SAME_LOC, "group_move", H5G_SAME_LOC, "group_new_name")
- !=FAIL) goto error;
+ if(H5Gmove2(H5G_SAME_LOC, "group_move", H5G_SAME_LOC, "group_new_name") !=FAIL) TEST_ERROR
} H5E_END_TRY;
/* Move a group across files. Should fail. */
H5E_BEGIN_TRY {
- if(H5Gmove2(grp_1, "group_move", file_b, "group_new_name")!=FAIL)
- goto error;
+ if(H5Gmove2(grp_1, "group_move", file_b, "group_new_name")!=FAIL) TEST_ERROR
} H5E_END_TRY;
/* Move a group across groups in the same file. */
- if(H5Gmove2(grp_1, "group_move", grp_2, "group_new_name")<0)
- goto error;
+ if(H5Gmove2(grp_1, "group_move", grp_2, "group_new_name") < 0) TEST_ERROR
/* Open the group just moved to the new location. */
- if((moved_grp = H5Gopen(grp_2, "group_new_name"))<0)
- goto error;
+ if((moved_grp = H5Gopen(grp_2, "group_new_name")) < 0) TEST_ERROR
- H5Gclose(grp_1);
- H5Gclose(grp_2);
- H5Gclose(grp_move);
- H5Gclose(moved_grp);
- H5Fclose(file_a);
- H5Fclose(file_b);
+ if(H5Gclose(grp_1) < 0) TEST_ERROR
+ if(H5Gclose(grp_2) < 0) TEST_ERROR
+ if(H5Gclose(grp_move) < 0) TEST_ERROR
+ if(H5Gclose(moved_grp) < 0) TEST_ERROR
+ if(H5Fclose(file_a) < 0) TEST_ERROR
+ if(H5Fclose(file_b) < 0) TEST_ERROR
PASSED();
return 0;
@@ -444,9 +434,9 @@ test_new_move(void)
*-------------------------------------------------------------------------
*/
static int
-check_new_move(void)
+check_new_move(hid_t fapl)
{
- hid_t fapl, file;
+ hid_t file;
H5G_stat_t sb_hard1, sb_hard2;
char filename[1024];
char linkval[1024];
@@ -454,43 +444,27 @@ check_new_move(void)
TESTING("check new move function");
/* Open file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[1], fapl, filename, sizeof filename);
- if ((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) {
- goto error;
- }
+ if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
/* Get hard link info */
- if(H5Gget_objinfo(file, "/group2/group_new_name", TRUE, &sb_hard1)<0)
- goto error;
- if(H5Gget_objinfo(file, "/group1/hard", TRUE, &sb_hard2)<0)
- goto error;
+ if(H5Gget_objinfo(file, "/group2/group_new_name", TRUE, &sb_hard1) < 0) TEST_ERROR
+ if(H5Gget_objinfo(file, "/group1/hard", TRUE, &sb_hard2) < 0) TEST_ERROR
/* Check hard links */
- if(H5G_GROUP!=sb_hard1.type || H5G_GROUP!=sb_hard2.type) {
- H5_FAILED();
- puts(" Unexpected object type, should have been a group");
- goto error;
- }
- if (HDmemcmp(&sb_hard1.objno, &sb_hard2.objno, sizeof(sb_hard1.objno))) {
- H5_FAILED();
- puts(" Hard link test failed. Link seems not to point to the ");
- puts(" expected file location.");
- goto error;
- }
+ if(H5G_GROUP!=sb_hard1.type || H5G_GROUP!=sb_hard2.type)
+ FAIL_PUTS_ERROR(" Unexpected object type, should have been a group")
+ if(HDmemcmp(&sb_hard1.objno, &sb_hard2.objno, sizeof(sb_hard1.objno)))
+ FAIL_PUTS_ERROR(" Hard link test failed. Link seems not to point to the expected file location.")
/* Check soft links */
- if (H5Gget_linkval(file, "group2/soft", sizeof linkval, linkval)<0) {
- goto error;
- }
- if (strcmp(linkval, "/group1/group_move")) {
- H5_FAILED();
- puts(" Soft link test failed. Wrong link value");
- goto error;
- }
+ if(H5Gget_linkval(file, "group2/soft", sizeof linkval, linkval) < 0) TEST_ERROR
+ if(HDstrcmp(linkval, "/group1/group_move"))
+ FAIL_PUTS_ERROR(" Soft link test failed. Wrong link value")
/* Cleanup */
- if(H5Fclose(file)<0) goto error;
+ if(H5Fclose(file) < 0) TEST_ERROR
+
PASSED();
return 0;
@@ -515,9 +489,8 @@ check_new_move(void)
*-------------------------------------------------------------------------
*/
static int
-test_filespace(void)
+test_filespace(hid_t fapl)
{
- hid_t fapl; /* File access property list */
hid_t fapl_nocache; /* File access property list with raw data cache turned off */
hid_t contig_dcpl; /* Dataset creation property list for contiguous dataset */
hid_t early_chunk_dcpl; /* Dataset creation property list for chunked dataset & early allocation */
@@ -553,91 +526,90 @@ test_filespace(void)
puts("Testing file space gets reused:");
/* Open file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[4], fapl, filename, sizeof filename);
/* Create FAPL with raw data cache disabled */
/* Create file access property list with raw data cache disabled */
- if ((fapl_nocache=H5Pcopy(fapl))<0) TEST_ERROR;
+ if ((fapl_nocache=H5Pcopy(fapl)) < 0) TEST_ERROR
/* Get the cache settings */
- if(H5Pget_cache(fapl_nocache,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0)<0) TEST_ERROR;
+ if(H5Pget_cache(fapl_nocache,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0) < 0) TEST_ERROR
/* Disable the raw data cache */
rdcc_nelmts=0;
rdcc_nbytes=0;
- if(H5Pset_cache(fapl_nocache,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)<0) TEST_ERROR;
+ if(H5Pset_cache(fapl_nocache,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0) < 0) TEST_ERROR
/* Create empty file for size comparisons later */
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of an empty file */
- if((empty_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((empty_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Create common objects for datasets */
/* Create dataset creation property list for contigous storage */
- if ((contig_dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+ if ((contig_dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0) TEST_ERROR
/* Make certain that space is allocated early */
- if(H5Pset_alloc_time(contig_dcpl, H5D_ALLOC_TIME_EARLY) < 0) TEST_ERROR;
+ if(H5Pset_alloc_time(contig_dcpl, H5D_ALLOC_TIME_EARLY) < 0) TEST_ERROR
/* Create dataset creation property list for chunked storage & early allocation */
- if ((early_chunk_dcpl=H5Pcopy(contig_dcpl))<0) TEST_ERROR;
+ if ((early_chunk_dcpl=H5Pcopy(contig_dcpl)) < 0) TEST_ERROR
/* Set chunk dimensions */
- if(H5Pset_chunk(early_chunk_dcpl, FILESPACE_NDIMS, chunk_dims) < 0) TEST_ERROR;
+ if(H5Pset_chunk(early_chunk_dcpl, FILESPACE_NDIMS, chunk_dims) < 0) TEST_ERROR
/* Create dataset creation property list for chunked storage & late allocation */
- if ((late_chunk_dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+ if ((late_chunk_dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0) TEST_ERROR
/* Set chunk dimensions */
- if(H5Pset_chunk(late_chunk_dcpl, FILESPACE_NDIMS, chunk_dims) < 0) TEST_ERROR;
+ if(H5Pset_chunk(late_chunk_dcpl, FILESPACE_NDIMS, chunk_dims) < 0) TEST_ERROR
/* Create dataset creation property list for compressed, chunked storage & early allocation */
- if ((comp_dcpl=H5Pcopy(early_chunk_dcpl))<0) TEST_ERROR;
+ if ((comp_dcpl=H5Pcopy(early_chunk_dcpl)) < 0) TEST_ERROR
/* Enable compression & set level */
- if(H5Pset_deflate(comp_dcpl, FILESPACE_DEFLATE_LEVEL) < 0) TEST_ERROR;
+ if(H5Pset_deflate(comp_dcpl, FILESPACE_DEFLATE_LEVEL) < 0) TEST_ERROR
/* Create dataset creation property list for compact storage */
- if ((compact_dcpl=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+ if ((compact_dcpl=H5Pcreate(H5P_DATASET_CREATE)) < 0) TEST_ERROR
/* Set to compact storage */
- if(H5Pset_layout(compact_dcpl, H5D_COMPACT) < 0) TEST_ERROR;
+ if(H5Pset_layout(compact_dcpl, H5D_COMPACT) < 0) TEST_ERROR
/* Create dataspace for datasets */
- if((space = H5Screate_simple(FILESPACE_NDIMS, dims, NULL))<0) TEST_ERROR;
+ if((space = H5Screate_simple(FILESPACE_NDIMS, dims, NULL)) < 0) TEST_ERROR
/* Create buffer for writing dataset */
- if((data = HDmalloc(sizeof(int)*FILESPACE_DIM0*FILESPACE_DIM1*FILESPACE_DIM2))==NULL) TEST_ERROR;
+ if((data = HDmalloc(sizeof(int)*FILESPACE_DIM0*FILESPACE_DIM1*FILESPACE_DIM2))==NULL) TEST_ERROR
/* Create single dataset (with contiguous storage & late allocation), remove it & verify file size */
TESTING(" contiguous dataset with late allocation");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -645,23 +617,23 @@ test_filespace(void)
TESTING(" contiguous dataset with early allocation");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -669,23 +641,23 @@ test_filespace(void)
TESTING(" chunked dataset with late allocation");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, late_chunk_dcpl))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, late_chunk_dcpl)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -693,23 +665,23 @@ test_filespace(void)
TESTING(" chunked dataset with early allocation");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, early_chunk_dcpl))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, early_chunk_dcpl)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -717,23 +689,23 @@ test_filespace(void)
TESTING(" compressed, chunked dataset");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, comp_dcpl))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, comp_dcpl)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -744,10 +716,10 @@ test_filespace(void)
TESTING(" re-writing compressed, chunked dataset");
/* Create file (using FAPL with disabled raw data cache) */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_nocache))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_nocache)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, comp_dcpl))<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, comp_dcpl)) < 0) TEST_ERROR
/* Alternate re-writing dataset with compressible & random data */
for(u=0; u<FILESPACE_REWRITE; u++) {
@@ -756,30 +728,30 @@ test_filespace(void)
*tmp_data++ = v*u;
/* Write the buffer to the dataset */
- if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data)<0) TEST_ERROR;
+ if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0) TEST_ERROR
/* Set buffer to different random numbers each time */
for (v=0, tmp_data=data; v<(FILESPACE_DIM0*FILESPACE_DIM1*FILESPACE_DIM2); v++)
*tmp_data++ = (int)HDrandom();
/* Write the buffer to the dataset */
- if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data)<0) TEST_ERROR;
+ if (H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, data) < 0) TEST_ERROR
} /* end for */
/* Close dataset */
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -787,23 +759,23 @@ test_filespace(void)
TESTING(" compact dataset");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, compact_dcpl))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, compact_dcpl)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -814,59 +786,59 @@ test_filespace(void)
TESTING(" object header continuations");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create datasets to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
- if((dataset2 = H5Dcreate (file, DATASET2NAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
+ if((dataset = H5Dcreate(file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl)) < 0) TEST_ERROR
+ if((dataset2 = H5Dcreate(file, DATASET2NAME, H5T_NATIVE_INT, space, contig_dcpl)) < 0) TEST_ERROR
/* Create a dataspace for the attributes */
- if((attr_space = H5Screate_simple(FILESPACE_ATTR_NDIMS, attr_dims, NULL))<0) TEST_ERROR;
+ if((attr_space = H5Screate_simple(FILESPACE_ATTR_NDIMS, attr_dims, NULL)) < 0) TEST_ERROR
/* Alternate adding attributes to each one */
- for(u=0; u<FILESPACE_NATTR; u++) {
+ for(u = 0; u < FILESPACE_NATTR; u++) {
/* Set the name of the attribute to create */
sprintf(objname,"%s %u",ATTRNAME,u);
/* Create an attribute on the first dataset */
- if((attr = H5Acreate (dataset, objname, H5T_NATIVE_INT, attr_space, H5P_DEFAULT))<0) TEST_ERROR;
+ if((attr = H5Acreate(dataset, objname, H5T_NATIVE_INT, attr_space, H5P_DEFAULT)) < 0) TEST_ERROR
/* Don't worry about writing the attribute - it will have a fill value */
/* Close the attribute on the first dataset */
- if(H5Aclose (attr)<0) TEST_ERROR;
+ if(H5Aclose(attr) < 0) TEST_ERROR
/* Create an attribute on the second dataset */
- if((attr = H5Acreate (dataset2, objname, H5T_NATIVE_INT, attr_space, H5P_DEFAULT))<0) TEST_ERROR;
+ if((attr = H5Acreate(dataset2, objname, H5T_NATIVE_INT, attr_space, H5P_DEFAULT)) < 0) TEST_ERROR
/* Don't worry about writing the attribute - it will have a fill value */
/* Close the attribute on the second dataset */
- if(H5Aclose (attr)<0) TEST_ERROR;
+ if(H5Aclose(attr) < 0) TEST_ERROR
/* Flush the file (to fix the sizes of object header buffers, etc) */
- if(H5Fflush(file,H5F_SCOPE_GLOBAL)<0) TEST_ERROR;
+ if(H5Fflush(file,H5F_SCOPE_GLOBAL) < 0) TEST_ERROR
} /* end for */
/* Close the dataspace for the attributes */
- if(H5Sclose (attr_space)<0) TEST_ERROR;
+ if(H5Sclose(attr_space) < 0) TEST_ERROR
/* Close datasets */
- if(H5Dclose (dataset)<0) TEST_ERROR;
- if(H5Dclose (dataset2)<0) TEST_ERROR;
+ if(H5Dclose(dataset) < 0) TEST_ERROR
+ if(H5Dclose(dataset2) < 0) TEST_ERROR
/* Remove the datasets */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
- if(H5Gunlink (file, DATASET2NAME)<0) TEST_ERROR;
+ if(H5Gunlink(file, DATASETNAME) < 0) TEST_ERROR
+ if(H5Gunlink(file, DATASET2NAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size = h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -874,26 +846,26 @@ test_filespace(void)
TESTING(" named datatype");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create datatype to commit */
- if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+ if((type = H5Tcopy (H5T_NATIVE_INT)) < 0) TEST_ERROR
/* Create a single named datatype to remove */
- if(H5Tcommit (file, TYPENAME, type)<0) TEST_ERROR;
- if(H5Tclose (type)<0) TEST_ERROR;
+ if(H5Tcommit (file, TYPENAME, type) < 0) TEST_ERROR
+ if(H5Tclose (type) < 0) TEST_ERROR
/* Remove the named datatype */
- if(H5Gunlink (file, TYPENAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, TYPENAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -901,23 +873,23 @@ test_filespace(void)
TESTING(" single group");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single group to remove */
- if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
- if(H5Gclose (group)<0) TEST_ERROR;
+ if((group = H5Gcreate (file, GROUPNAME, (size_t)0)) < 0) TEST_ERROR
+ if(H5Gclose (group) < 0) TEST_ERROR
/* Remove the group */
- if(H5Gunlink (file, GROUPNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, GROUPNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -925,32 +897,30 @@ test_filespace(void)
TESTING(" multiple groups");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a many groups to remove */
- for(u=0; u<UNLINK_NGROUPS; u++) {
- sprintf(objname,"%s %u",GROUPNAME,u);
- if((group = H5Gcreate (file, objname, 0))<0) TEST_ERROR;
- if(H5Gclose (group)<0) TEST_ERROR;
+ for(u = 0; u < UNLINK_NGROUPS; u++) {
+ sprintf(objname, "%s %u", GROUPNAME, u);
+ if((group = H5Gcreate(file, objname, (size_t)0)) < 0) TEST_ERROR
+ if(H5Gclose (group) < 0) TEST_ERROR
} /* end for */
/* Remove the all the groups */
/* (Remove them in reverse order just to make file size calculation easier -QAK) */
- for(u=UNLINK_NGROUPS; u>0; u--) {
- sprintf(objname,"%s %u",GROUPNAME,(u-1));
- if(H5Gunlink (file, objname)<0) TEST_ERROR;
+ for(u = UNLINK_NGROUPS; u > 0; u--) {
+ sprintf(objname, "%s %u", GROUPNAME, (u - 1));
+ if(H5Gunlink(file, objname) < 0) TEST_ERROR
} /* end for */
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
-#ifdef H5_GROUP_REVISION
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
-#endif /* H5_GROUP_REVISION */
+ if(file_size != empty_size) TEST_ERROR
PASSED();
@@ -958,28 +928,28 @@ test_filespace(void)
TESTING(" simple group hierarchy");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a small group hierarchy to remove */
- if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
- if((group2 = H5Gcreate (group, GROUP2NAME, 0))<0) TEST_ERROR;
- if(H5Gclose (group2)<0) TEST_ERROR;
- if(H5Gclose (group)<0) TEST_ERROR;
+ if((group = H5Gcreate(file, GROUPNAME, (size_t)0)) < 0) TEST_ERROR
+ if((group2 = H5Gcreate (group, GROUP2NAME, (size_t)0)) < 0) TEST_ERROR
+ if(H5Gclose (group2) < 0) TEST_ERROR
+ if(H5Gclose (group) < 0) TEST_ERROR
/* Remove the second group */
- if(H5Gunlink (file, GROUPNAME "/" GROUP2NAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, GROUPNAME "/" GROUP2NAME) < 0) TEST_ERROR
/* Remove the first group */
- if(H5Gunlink (file, GROUPNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, GROUPNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -987,34 +957,34 @@ test_filespace(void)
TESTING(" complex group hierarchy");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a complex group hierarchy to remove */
for(u=0; u<FILESPACE_TOP_GROUPS; u++) {
/* Create group */
sprintf(objname,"%s %u",GROUPNAME,u);
- if((group = H5Gcreate (file, objname, 0))<0) TEST_ERROR;
+ if((group = H5Gcreate (file, objname, (size_t)0)) < 0) TEST_ERROR
/* Create nested groups inside top groups */
for(v=0; v<FILESPACE_NESTED_GROUPS; v++) {
/* Create group */
sprintf(objname,"%s %u",GROUP2NAME,v);
- if((group2 = H5Gcreate (group, objname, 0))<0) TEST_ERROR;
+ if((group2 = H5Gcreate (group, objname, (size_t)0)) < 0) TEST_ERROR
/* Create datasets inside nested groups */
for(w=0; w<FILESPACE_NDATASETS; w++) {
/* Create & close a dataset */
sprintf(objname,"%s %u",DATASETNAME,w);
- if((dataset = H5Dcreate (group2, objname, H5T_NATIVE_INT, space, H5P_DEFAULT))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (group2, objname, H5T_NATIVE_INT, space, H5P_DEFAULT)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
} /* end for */
/* Close nested group */
- if(H5Gclose (group2)<0) TEST_ERROR;
+ if(H5Gclose (group2) < 0) TEST_ERROR
} /* end for */
/* Close top group */
- if(H5Gclose (group)<0) TEST_ERROR;
+ if(H5Gclose (group) < 0) TEST_ERROR
} /* end for */
/* Remove complex group hierarchy */
@@ -1022,47 +992,45 @@ test_filespace(void)
for(u=FILESPACE_TOP_GROUPS; u>0; u--) {
/* Open group */
sprintf(objname,"%s %u",GROUPNAME,(u-1));
- if((group = H5Gopen (file, objname))<0) TEST_ERROR;
+ if((group = H5Gopen (file, objname)) < 0) TEST_ERROR
/* Open nested groups inside top groups */
for(v=0; v<FILESPACE_NESTED_GROUPS; v++) {
/* Create group */
sprintf(objname,"%s %u",GROUP2NAME,v);
- if((group2 = H5Gopen (group, objname))<0) TEST_ERROR;
+ if((group2 = H5Gopen (group, objname)) < 0) TEST_ERROR
/* Remove datasets inside nested groups */
for(w=0; w<FILESPACE_NDATASETS; w++) {
/* Remove dataset */
sprintf(objname,"%s %u",DATASETNAME,w);
- if(H5Gunlink (group2, objname)<0) TEST_ERROR;
+ if(H5Gunlink (group2, objname) < 0) TEST_ERROR
} /* end for */
/* Close nested group */
- if(H5Gclose (group2)<0) TEST_ERROR;
+ if(H5Gclose (group2) < 0) TEST_ERROR
/* Remove nested group */
sprintf(objname,"%s %u",GROUP2NAME,v);
- if(H5Gunlink (group, objname)<0) TEST_ERROR;
+ if(H5Gunlink (group, objname) < 0) TEST_ERROR
} /* end for */
/* Close top group */
- if(H5Gclose (group)<0) TEST_ERROR;
+ if(H5Gclose (group) < 0) TEST_ERROR
/* Remove top group */
sprintf(objname,"%s %u",GROUPNAME,(u-1));
- if(H5Gunlink (file, objname)<0) TEST_ERROR;
+ if(H5Gunlink (file, objname) < 0) TEST_ERROR
} /* end for */
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
-#ifdef H5_GROUP_REVISION
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
-#endif /* H5_GROUP_REVISION */
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -1070,11 +1038,11 @@ test_filespace(void)
TESTING(" duplicate dataset");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single dataset to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT))<0) TEST_ERROR;
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, H5P_DEFAULT)) < 0) TEST_ERROR
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Create another dataset with same name */
H5E_BEGIN_TRY {
@@ -1082,20 +1050,20 @@ test_filespace(void)
} H5E_END_TRY;
if (dataset>=0) {
H5Dclose(dataset);
- TEST_ERROR;
+ TEST_ERROR
} /* end if */
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -1103,32 +1071,32 @@ test_filespace(void)
TESTING(" duplicate group");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a single group to remove */
- if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
- if(H5Gclose (group)<0) TEST_ERROR;
+ if((group = H5Gcreate (file, GROUPNAME, (size_t)0)) < 0) TEST_ERROR
+ if(H5Gclose (group) < 0) TEST_ERROR
/* Create another group with same name */
H5E_BEGIN_TRY {
- group = H5Gcreate (file, GROUPNAME, 0);
+ group = H5Gcreate (file, GROUPNAME, (size_t)0);
} H5E_END_TRY;
if (group>=0) {
H5Gclose(group);
- TEST_ERROR;
+ TEST_ERROR
} /* end if */
/* Remove the group */
- if(H5Gunlink (file, GROUPNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, GROUPNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -1136,36 +1104,36 @@ test_filespace(void)
TESTING(" duplicate named datatype");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create datatype to commit */
- if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+ if((type = H5Tcopy (H5T_NATIVE_INT)) < 0) TEST_ERROR
/* Create a single named datatype to remove */
- if(H5Tcommit (file, TYPENAME, type)<0) TEST_ERROR;
- if(H5Tclose (type)<0) TEST_ERROR;
+ if(H5Tcommit (file, TYPENAME, type) < 0) TEST_ERROR
+ if(H5Tclose (type) < 0) TEST_ERROR
/* Create datatype to commit */
- if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
+ if((type = H5Tcopy (H5T_NATIVE_INT)) < 0) TEST_ERROR
/* Create another named datatype with same name */
H5E_BEGIN_TRY {
status = H5Tcommit (file, TYPENAME, type);
} H5E_END_TRY;
- if (status>=0) TEST_ERROR;
- if(H5Tclose (type)<0) TEST_ERROR;
+ if (status>=0) TEST_ERROR
+ if(H5Tclose (type) < 0) TEST_ERROR
/* Remove the named datatype */
- if(H5Gunlink (file, TYPENAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, TYPENAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -1173,21 +1141,21 @@ test_filespace(void)
TESTING(" duplicate attribute");
/* Create file */
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create datasets to remove */
- if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl))<0) TEST_ERROR;
+ if((dataset = H5Dcreate (file, DATASETNAME, H5T_NATIVE_INT, space, contig_dcpl)) < 0) TEST_ERROR
/* Create a dataspace for the attributes */
- if((attr_space = H5Screate_simple(FILESPACE_ATTR_NDIMS, attr_dims, NULL))<0) TEST_ERROR;
+ if((attr_space = H5Screate_simple(FILESPACE_ATTR_NDIMS, attr_dims, NULL)) < 0) TEST_ERROR
/* Create an attribute on the dataset */
- if((attr = H5Acreate (dataset, ATTRNAME, H5T_NATIVE_INT, attr_space, H5P_DEFAULT))<0) TEST_ERROR;
+ if((attr = H5Acreate (dataset, ATTRNAME, H5T_NATIVE_INT, attr_space, H5P_DEFAULT)) < 0) TEST_ERROR
/* Don't worry about writing the attribute - it will have a fill value */
/* Close the attribute on the dataset */
- if(H5Aclose (attr)<0) TEST_ERROR;
+ if(H5Aclose (attr) < 0) TEST_ERROR
/* Create another attribute with same name */
H5E_BEGIN_TRY {
@@ -1195,26 +1163,26 @@ test_filespace(void)
} H5E_END_TRY;
if (attr>=0) {
H5Aclose(attr);
- TEST_ERROR;
+ TEST_ERROR
} /* end if */
/* Close the dataspace for the attributes */
- if(H5Sclose (attr_space)<0) TEST_ERROR;
+ if(H5Sclose (attr_space) < 0) TEST_ERROR
/* Close dataset */
- if(H5Dclose (dataset)<0) TEST_ERROR;
+ if(H5Dclose (dataset) < 0) TEST_ERROR
/* Remove the dataset */
- if(H5Gunlink (file, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink (file, DATASETNAME) < 0) TEST_ERROR
/* Close file */
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Get the size of the file */
- if((file_size=h5_get_file_size(filename))==0) TEST_ERROR;
+ if((file_size=h5_get_file_size(filename))==0) TEST_ERROR
/* Verify the file is correct size */
- if(file_size!=empty_size) TEST_ERROR;
+ if(file_size!=empty_size) TEST_ERROR
PASSED();
@@ -1224,16 +1192,15 @@ test_filespace(void)
HDfree(data);
/* Close property lists */
- if(H5Pclose(fapl)<0) TEST_ERROR;
- if(H5Pclose(fapl_nocache)<0) TEST_ERROR;
- if(H5Pclose(contig_dcpl)<0) TEST_ERROR;
- if(H5Pclose(early_chunk_dcpl)<0) TEST_ERROR;
- if(H5Pclose(late_chunk_dcpl)<0) TEST_ERROR;
- if(H5Pclose(comp_dcpl)<0) TEST_ERROR;
- if(H5Pclose(compact_dcpl)<0) TEST_ERROR;
+ if(H5Pclose(fapl_nocache) < 0) TEST_ERROR
+ if(H5Pclose(contig_dcpl) < 0) TEST_ERROR
+ if(H5Pclose(early_chunk_dcpl) < 0) TEST_ERROR
+ if(H5Pclose(late_chunk_dcpl) < 0) TEST_ERROR
+ if(H5Pclose(comp_dcpl) < 0) TEST_ERROR
+ if(H5Pclose(compact_dcpl) < 0) TEST_ERROR
/* Close dataspace */
- if(H5Sclose(space)<0) TEST_ERROR;
+ if(H5Sclose(space) < 0) TEST_ERROR
/* Indicate success */
/* Don't print final "PASSED", since we aren't on the correct line anymore */
@@ -1274,48 +1241,37 @@ static int test_create_unlink(const char *msg, hid_t fapl)
/* Create file */
h5_fixname(FILENAME[3], fapl, filename, sizeof filename);
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0)
- {
- H5_FAILED();
- puts(" Creating file failed");
- goto error;
- }
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0)
+ FAIL_PUTS_ERROR(" Creating file failed")
/* Create a many groups to remove */
for(u=0; u<UNLINK_NGROUPS; u++) {
sprintf(groupname,"%s %u",GROUPNAME,u);
- if((group = H5Gcreate (file, groupname, 0))<0)
- {
+ if((group = H5Gcreate (file, groupname, (size_t)0)) < 0) {
H5_FAILED();
- printf("group %s creation failed\n",groupname);
+ printf("group %s creation failed\n", groupname);
goto error;
- }
- if(H5Gclose (group)<0)
- {
+ } /* end if */
+ if(H5Gclose (group) < 0) {
H5_FAILED();
- printf("closing group %s failed\n",groupname);
+ printf("closing group %s failed\n", groupname);
goto error;
- }
+ } /* end if */
} /* end for */
/* Remove the all the groups */
for(u=0; u<UNLINK_NGROUPS; u++) {
sprintf(groupname,"%s %u",GROUPNAME,u);
- if(H5Gunlink (file, groupname)<0)
- {
+ if(H5Gunlink(file, groupname) < 0) {
H5_FAILED();
- printf("Unlinking group %s failed\n",groupname);
+ printf("Unlinking group %s failed\n", groupname);
goto error;
- }
+ } /* end if */
} /* end for */
/* Close file */
- if(H5Fclose(file)<0)
- {
- H5_FAILED();
- printf("Closing file failed\n");
- goto error;
- }
+ if(H5Fclose(file) < 0)
+ FAIL_PUTS_ERROR("Closing file failed")
PASSED();
return 0;
@@ -1341,9 +1297,8 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_link_slashes(void)
+test_link_slashes(hid_t fapl)
{
- hid_t fapl; /* File access property list */
hid_t fid; /* File ID */
hid_t gid,gid2; /* Group ID */
char filename[1024];
@@ -1351,41 +1306,40 @@ test_link_slashes(void)
TESTING("creating links with multiple slashes");
/* Create file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[5], fapl, filename, sizeof filename);
/* Create a file */
- if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) TEST_ERROR;
+ if((fid=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
/* Create a group in the root group */
- if((gid = H5Gcreate(fid, SLASHES_GROUP_NAME, 0))<0) TEST_ERROR;
+ if((gid = H5Gcreate(fid, SLASHES_GROUP_NAME, (size_t)0)) < 0) TEST_ERROR
/* Create a nested group in the root group */
- if((gid2 = H5Gcreate(gid, SLASHES_GROUP_NAME, 0))<0) TEST_ERROR;
+ if((gid2 = H5Gcreate(gid, SLASHES_GROUP_NAME, (size_t)0)) < 0) TEST_ERROR
/* Close the nested group */
- if(H5Gclose(gid2)<0) TEST_ERROR;
+ if(H5Gclose(gid2) < 0) TEST_ERROR
/* Create a hard link to the nested group */
- if(H5Glink2(gid, SLASHES_GROUP_NAME, H5L_LINK_HARD, H5G_SAME_LOC, SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+ if(H5Glink2(gid, SLASHES_GROUP_NAME, H5L_TYPE_HARD, H5G_SAME_LOC, SLASHES_HARDLINK_NAME) < 0) TEST_ERROR
/* Create a soft link with a relative path to the nested group */
- if(H5Glink2(gid, SLASHES_GROUP_NAME, H5L_LINK_SOFT, H5G_SAME_LOC, SLASHES_SOFTLINK_NAME)<0) TEST_ERROR;
+ if(H5Glink2(gid, SLASHES_GROUP_NAME, H5L_TYPE_SOFT, H5G_SAME_LOC, SLASHES_SOFTLINK_NAME) < 0) TEST_ERROR
/* Create a soft link with the full path to the nested group */
- if(H5Glink2(gid, "////"SLASHES_GROUP_NAME""SLASHES_GROUP_NAME, H5L_LINK_SOFT, H5G_SAME_LOC, SLASHES_SOFTLINK2_NAME)<0) TEST_ERROR;
+ if(H5Glink2(gid, "////"SLASHES_GROUP_NAME""SLASHES_GROUP_NAME, H5L_TYPE_SOFT, H5G_SAME_LOC, SLASHES_SOFTLINK2_NAME) < 0) TEST_ERROR
/* Create a soft link to the root group */
- if(H5Glink2(gid, "////", H5L_LINK_SOFT, H5G_SAME_LOC, SLASHES_ROOTLINK_NAME)<0) TEST_ERROR;
+ if(H5Glink2(gid, "////", H5L_TYPE_SOFT, H5G_SAME_LOC, SLASHES_ROOTLINK_NAME) < 0) TEST_ERROR
/* Close the group */
- if(H5Gclose(gid)<0) TEST_ERROR;
+ if(H5Gclose(gid) < 0) TEST_ERROR
/* Create a hard link to the existing group */
- if(H5Glink2(fid, SLASHES_GROUP_NAME, H5L_LINK_HARD, H5G_SAME_LOC, SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+ if(H5Glink2(fid, SLASHES_GROUP_NAME, H5L_TYPE_HARD, H5G_SAME_LOC, SLASHES_HARDLINK_NAME) < 0) TEST_ERROR
/* Close the file */
- if(H5Fclose(fid)<0) TEST_ERROR;
+ if(H5Fclose(fid) < 0) TEST_ERROR
PASSED();
return 0;
@@ -1411,9 +1365,8 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_unlink_slashes(void)
+test_unlink_slashes(hid_t fapl)
{
- hid_t fapl; /* File access property list */
hid_t fid; /* File ID */
hid_t gid; /* Group ID */
char filename[1024];
@@ -1421,41 +1374,40 @@ test_unlink_slashes(void)
TESTING("deleting links with multiple slashes");
/* Create file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[5], fapl, filename, sizeof filename);
/* Open the file */
- if((fid=H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT))<0) TEST_ERROR;
+ if((fid=H5Fopen(filename, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR
/* Open the top level group */
- if((gid = H5Gopen(fid, SLASHES_GROUP_NAME))<0) TEST_ERROR;
+ if((gid = H5Gopen(fid, SLASHES_GROUP_NAME)) < 0) TEST_ERROR
/* Delete the root link */
- if(H5Gunlink(gid,SLASHES_ROOTLINK_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(gid,SLASHES_ROOTLINK_NAME) < 0) TEST_ERROR
/* Delete the soft link with the full path */
- if(H5Gunlink(gid,SLASHES_SOFTLINK2_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(gid,SLASHES_SOFTLINK2_NAME) < 0) TEST_ERROR
/* Delete the soft link with the relative path */
- if(H5Gunlink(gid,SLASHES_SOFTLINK_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(gid,SLASHES_SOFTLINK_NAME) < 0) TEST_ERROR
/* Delete the hard link */
- if(H5Gunlink(gid,SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(gid,SLASHES_HARDLINK_NAME) < 0) TEST_ERROR
/* Delete the group itself */
- if(H5Gunlink(gid,SLASHES_GROUP_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(gid,SLASHES_GROUP_NAME) < 0) TEST_ERROR
/* Close the group */
- if(H5Gclose(gid)<0) TEST_ERROR;
+ if(H5Gclose(gid) < 0) TEST_ERROR
/* Delete the hard link */
- if(H5Gunlink(fid,SLASHES_HARDLINK_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(fid,SLASHES_HARDLINK_NAME) < 0) TEST_ERROR
/* Delete the group itself */
- if(H5Gunlink(fid,SLASHES_GROUP_NAME)<0) TEST_ERROR;
+ if(H5Gunlink(fid,SLASHES_GROUP_NAME) < 0) TEST_ERROR
/* Close the file */
- if(H5Fclose(fid)<0) TEST_ERROR;
+ if(H5Fclose(fid) < 0) TEST_ERROR
PASSED();
return 0;
@@ -1472,20 +1424,20 @@ static int delete_node (hid_t pid, hid_t id)
char name[256]; /* Name of object to close */
/* Get the name of the object to delete */
- if(H5Iget_name(id, name, sizeof(name))<0) return (-1);
+ if(H5Iget_name(id, name, sizeof(name)) < 0) return (-1);
/* Close the object */
- if(H5Gclose (id)<0) return(-1);
+ if(H5Gclose (id) < 0) return(-1);
/* Unlink the object */
- if(H5Gunlink (pid, name)<0) return(-1);
+ if(H5Gunlink (pid, name) < 0) return(-1);
/* If this object is the right-most child, try opening the previous object */
if(HDstrcmp(name,"/Zone81")==0) {
hid_t gid;
- if((gid = H5Gopen (pid, "/Zone80"))<0) return(-1);
- if(H5Gclose(gid)<0) return(-1);
+ if((gid = H5Gopen (pid, "/Zone80")) < 0) return(-1);
+ if(H5Gclose(gid) < 0) return(-1);
} /* end if */
/* Indicate success */
@@ -1522,29 +1474,29 @@ test_unlink_rightleaf(hid_t fid)
/* Allocate space for the group IDs */
gids = (hid_t *) HDmalloc (ngroups * sizeof(hid_t));
- if(gids==NULL) TEST_ERROR;
+ if(gids==NULL) TEST_ERROR
- if((rootid = H5Gopen (fid, "/"))<0) TEST_ERROR;
+ if((rootid = H5Gopen (fid, "/")) < 0) TEST_ERROR
/* Create all the groups */
for (n = 0; n < ngroups; n++) {
sprintf(name, "Zone%d", n + 1);
- if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+ if((gids[n] = H5Gcreate (rootid, name, (size_t)0)) < 0) TEST_ERROR
} /* end for */
/* Unlink & re-create each group */
for (n = 0; n < ngroups; n++) {
- if(delete_node (rootid, gids[n])<0) TEST_ERROR;
+ if(delete_node (rootid, gids[n]) < 0) TEST_ERROR
sprintf(name, "Zone%d", n + 1);
- if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+ if((gids[n] = H5Gcreate (rootid, name, (size_t)0)) < 0) TEST_ERROR
} /* end for */
/* Close all the groups */
for (n = 0; n < ngroups; n++)
- if(H5Gclose(gids[n])<0) TEST_ERROR;
+ if(H5Gclose(gids[n]) < 0) TEST_ERROR
/* Close root group ID */
- if(H5Gclose(rootid)<0) TEST_ERROR;
+ if(H5Gclose(rootid) < 0) TEST_ERROR
/* Free memory */
HDfree(gids);
@@ -1586,29 +1538,29 @@ test_unlink_rightnode(hid_t fid)
/* Allocate space for the group IDs */
gids = (hid_t *) HDmalloc (ngroups * sizeof(hid_t));
- if(gids==NULL) TEST_ERROR;
+ if(gids==NULL) TEST_ERROR
- if((rootid = H5Gopen (fid, "/"))<0) TEST_ERROR;
+ if((rootid = H5Gopen (fid, "/")) < 0) TEST_ERROR
/* Create all the groups */
for (n = 0; n < ngroups; n++) {
sprintf(name, "ZoneB%d", n + 1);
- if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+ if((gids[n] = H5Gcreate (rootid, name, (size_t)0)) < 0) TEST_ERROR
} /* end for */
/* Close all the groups */
for (n = 0; n < ngroups; n++)
- if(H5Gclose(gids[n])<0) TEST_ERROR;
+ if(H5Gclose(gids[n]) < 0) TEST_ERROR
/* Unlink specific objects to trigger deletion of right leaf in non-leaf node */
- if(H5Gunlink(fid,"/ZoneB77")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneB78")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneB79")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneB8")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneB80")<0) TEST_ERROR;
+ if(H5Gunlink(fid,"/ZoneB77") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneB78") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneB79") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneB8") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneB80") < 0) TEST_ERROR
/* Close root group ID */
- if(H5Gclose(rootid)<0) TEST_ERROR;
+ if(H5Gclose(rootid) < 0) TEST_ERROR
/* Free memory */
HDfree(gids);
@@ -1650,172 +1602,172 @@ test_unlink_middlenode(hid_t fid)
/* Allocate space for the group IDs */
gids = (hid_t *) HDmalloc (ngroups * sizeof(hid_t));
- if(gids==NULL) TEST_ERROR;
+ if(gids==NULL) TEST_ERROR
- if((rootid = H5Gopen (fid, "/"))<0) TEST_ERROR;
+ if((rootid = H5Gopen (fid, "/")) < 0) TEST_ERROR
/* Create all the groups */
for (n = 0; n < ngroups; n++) {
sprintf(name, "ZoneC%d", n + 1);
- if((gids[n] = H5Gcreate (rootid, name, 0))<0) TEST_ERROR;
+ if((gids[n] = H5Gcreate (rootid, name, (size_t)0)) < 0) TEST_ERROR
} /* end for */
/* Close all the groups */
for (n = 0; n < ngroups; n++)
- if(H5Gclose(gids[n])<0) TEST_ERROR;
+ if(H5Gclose(gids[n]) < 0) TEST_ERROR
/* Unlink specific objects to trigger deletion of all leafs in "interior" non-leaf node */
- if(H5Gunlink(fid,"/ZoneC11")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC110")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC111")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC112")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC113")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC114")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC115")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC116")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC117")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC118")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC119")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC12")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC120")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC121")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC122")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC123")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC124")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC125")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC126")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC127")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC128")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC129")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC13")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC130")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC131")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC132")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC133")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC134")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC135")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC136")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC137")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC138")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC139")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC14")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC140")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC141")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC142")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC143")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC144")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC145")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC146")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC147")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC148")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC149")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC15")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC150")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC151")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC152")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC153")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC154")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC155")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC156")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC157")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC158")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC159")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC16")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC160")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC161")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC162")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC163")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC164")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC165")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC166")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC167")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC168")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC169")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC17")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC170")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC171")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC172")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC173")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC174")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC175")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC176")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC177")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC178")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC179")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC18")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC180")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC19")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC2")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC20")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC21")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC22")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC23")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC24")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC25")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC26")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC27")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC28")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC29")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC3")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC30")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC31")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC32")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC33")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC34")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC35")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC36")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC37")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC38")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC39")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC4")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC40")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC41")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC42")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC43")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC44")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC45")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC46")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC47")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC48")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC49")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC5")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC50")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC51")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC52")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC53")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC54")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC55")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC56")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC57")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC58")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC59")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC6")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC60")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC61")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC62")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC63")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC64")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC65")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC66")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC67")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC68")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC69")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC7")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC70")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC71")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC72")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC73")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC74")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC75")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC76")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC77")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC78")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC79")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC8")<0) TEST_ERROR;
- if(H5Gunlink(fid,"/ZoneC80")<0) TEST_ERROR;
+ if(H5Gunlink(fid,"/ZoneC11") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC110") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC111") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC112") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC113") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC114") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC115") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC116") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC117") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC118") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC119") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC12") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC120") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC121") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC122") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC123") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC124") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC125") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC126") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC127") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC128") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC129") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC13") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC130") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC131") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC132") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC133") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC134") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC135") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC136") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC137") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC138") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC139") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC14") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC140") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC141") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC142") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC143") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC144") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC145") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC146") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC147") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC148") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC149") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC15") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC150") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC151") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC152") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC153") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC154") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC155") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC156") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC157") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC158") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC159") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC16") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC160") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC161") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC162") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC163") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC164") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC165") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC166") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC167") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC168") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC169") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC17") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC170") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC171") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC172") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC173") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC174") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC175") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC176") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC177") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC178") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC179") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC18") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC180") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC19") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC2") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC20") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC21") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC22") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC23") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC24") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC25") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC26") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC27") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC28") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC29") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC3") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC30") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC31") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC32") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC33") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC34") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC35") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC36") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC37") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC38") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC39") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC4") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC40") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC41") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC42") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC43") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC44") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC45") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC46") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC47") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC48") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC49") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC5") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC50") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC51") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC52") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC53") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC54") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC55") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC56") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC57") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC58") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC59") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC6") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC60") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC61") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC62") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC63") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC64") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC65") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC66") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC67") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC68") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC69") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC7") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC70") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC71") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC72") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC73") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC74") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC75") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC76") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC77") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC78") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC79") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC8") < 0) TEST_ERROR
+ if(H5Gunlink(fid,"/ZoneC80") < 0) TEST_ERROR
/* Close root group ID */
- if(H5Gclose(rootid)<0) TEST_ERROR;
+ if(H5Gclose(rootid) < 0) TEST_ERROR
/* Free memory */
HDfree(gids);
@@ -1845,48 +1797,46 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_resurrect_dataset(void)
+test_resurrect_dataset(hid_t fapl)
{
- hid_t f=-1, s=-1, d=-1, fapl=-1;
+ hid_t f=-1, s=-1, d=-1;
char filename[1024];
TESTING("resurrecting dataset after deletion");
/* Create file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[6], fapl, filename, sizeof filename);
/* Create the file */
- if((f = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if((f = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a dataset in the file */
- if((s = H5Screate(H5S_SCALAR))<0) TEST_ERROR;
- if((d = H5Dcreate(f, DATASETNAME, H5T_NATIVE_INT, s, H5P_DEFAULT))<0) TEST_ERROR;
- if(H5Sclose(s)<0) TEST_ERROR;
+ if((s = H5Screate(H5S_SCALAR)) < 0) TEST_ERROR
+ if((d = H5Dcreate(f, DATASETNAME, H5T_NATIVE_INT, s, H5P_DEFAULT)) < 0) TEST_ERROR
+ if(H5Sclose(s) < 0) TEST_ERROR
/* Unlink the dataset while it's open (will mark it for deletion when closed) */
- if(H5Gunlink(f, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink(f, DATASETNAME) < 0) TEST_ERROR
/* Check that dataset name is NULL */
- if(H5Iget_name(d, NULL, 0) != 0) TEST_ERROR;
+ if(H5Iget_name(d, NULL, (size_t)0) != 0) TEST_ERROR
/* Re-link the dataset to the group hierarchy (shouldn't get deleted now) */
- if(H5Glink2(d, ".", H5L_LINK_HARD, f, DATASET2NAME)<0) TEST_ERROR;
+ if(H5Glink2(d, ".", H5L_TYPE_HARD, f, DATASET2NAME) < 0) TEST_ERROR
/* Close things */
- if(H5Dclose(d)<0) TEST_ERROR;
- if(H5Fclose(f)<0) TEST_ERROR;
+ if(H5Dclose(d) < 0) TEST_ERROR
+ if(H5Fclose(f) < 0) TEST_ERROR
/* Re-open the file */
- if((f=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+ if((f=H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
/* Attempt to open the dataset under the new name */
- if((d=H5Dopen(f,DATASET2NAME))<0) TEST_ERROR;
+ if((d=H5Dopen(f,DATASET2NAME)) < 0) TEST_ERROR
/* Close things */
- if(H5Dclose(d)<0) TEST_ERROR;
- if(H5Fclose(f)<0) TEST_ERROR;
- if(H5Pclose(fapl)<0) TEST_ERROR;
+ if(H5Dclose(d) < 0) TEST_ERROR
+ if(H5Fclose(f) < 0) TEST_ERROR
PASSED();
return 0;
@@ -1896,7 +1846,6 @@ error:
H5Sclose(s);
H5Dclose(d);
H5Fclose(f);
- H5Pclose(fapl);
} H5E_END_TRY;
return 1;
} /* end test_resurrect_dataset() */
@@ -1919,46 +1868,45 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_resurrect_datatype(void)
+test_resurrect_datatype(hid_t fapl)
{
- hid_t file=-1, type=-1, fapl=-1;
+ hid_t file=-1, type=-1;
char filename[1024];
TESTING("resurrecting datatype after deletion");
/* Create file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[7], fapl, filename, sizeof filename);
/* Create the file */
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a named datatype in the file */
- if((type = H5Tcopy (H5T_NATIVE_INT))<0) TEST_ERROR;
- if(H5Tcommit (file, TYPENAME, type)<0) TEST_ERROR;
+ if((type = H5Tcopy (H5T_NATIVE_INT)) < 0) TEST_ERROR
+ if(H5Tcommit (file, TYPENAME, type) < 0) TEST_ERROR
/* Unlink the datatype while it's open (will mark it for deletion when closed) */
- if(H5Gunlink(file, TYPENAME)<0) TEST_ERROR;
+ if(H5Gunlink(file, TYPENAME) < 0) TEST_ERROR
/* Check that datatype name is NULL */
- if(H5Iget_name(type, NULL, 0) != 0) TEST_ERROR;
+ if(H5Iget_name(type, NULL, (size_t)0) != 0) TEST_ERROR
/* Re-link the datatype to the group hierarchy (shouldn't get deleted now) */
- if(H5Glink2(type, ".", H5L_LINK_HARD, file, TYPE2NAME) < 0) TEST_ERROR;
+ if(H5Glink2(type, ".", H5L_TYPE_HARD, file, TYPE2NAME) < 0) TEST_ERROR
/* Close things */
- if(H5Tclose(type)<0) TEST_ERROR;
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Tclose(type) < 0) TEST_ERROR
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Re-open the file */
- if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+ if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
/* Attempt to open the datatype under the new name */
- if((type=H5Topen(file,TYPE2NAME))<0) TEST_ERROR;
+ if((type=H5Topen(file,TYPE2NAME)) < 0) TEST_ERROR
/* Close things */
- if(H5Tclose(type)<0) TEST_ERROR;
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Tclose(type) < 0) TEST_ERROR
+ if(H5Fclose(file) < 0) TEST_ERROR
PASSED();
return 0;
@@ -1989,45 +1937,44 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_resurrect_group(void)
+test_resurrect_group(hid_t fapl)
{
- hid_t file=-1, group=-1, fapl=-1;
+ hid_t file=-1, group=-1;
char filename[1024];
TESTING("resurrecting group after deletion");
/* Create file */
- fapl = h5_fileaccess();
h5_fixname(FILENAME[8], fapl, filename, sizeof filename);
/* Create the file */
- if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create a group in the file */
- if((group = H5Gcreate (file, GROUPNAME, 0))<0) TEST_ERROR;
+ if((group = H5Gcreate (file, GROUPNAME, (size_t)0)) < 0) TEST_ERROR
/* Unlink the group while it's open (will mark it for deletion when closed) */
- if(H5Gunlink(file, GROUPNAME)<0) TEST_ERROR;
+ if(H5Gunlink(file, GROUPNAME) < 0) TEST_ERROR
/* Check that group's name is NULL */
- if(H5Iget_name(group, NULL, 0) != 0) TEST_ERROR;
+ if(H5Iget_name(group, NULL, (size_t)0) != 0) TEST_ERROR
/* Re-link the group into the group hierarchy (shouldn't get deleted now) */
- if(H5Glink2(group, ".", H5L_LINK_HARD, file, GROUP2NAME)<0) TEST_ERROR;
+ if(H5Glink2(group, ".", H5L_TYPE_HARD, file, GROUP2NAME) < 0) TEST_ERROR
/* Close things */
- if(H5Gclose(group)<0) TEST_ERROR;
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Gclose(group) < 0) TEST_ERROR
+ if(H5Fclose(file) < 0) TEST_ERROR
/* Re-open the file */
- if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl))<0) TEST_ERROR;
+ if((file=H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
/* Attempt to open the datatype under the new name */
- if((group=H5Gopen(file,GROUP2NAME))<0) TEST_ERROR;
+ if((group=H5Gopen(file,GROUP2NAME)) < 0) TEST_ERROR
/* Close things */
- if(H5Gclose(group)<0) TEST_ERROR;
- if(H5Fclose(file)<0) TEST_ERROR;
+ if(H5Gclose(group) < 0) TEST_ERROR
+ if(H5Fclose(file) < 0) TEST_ERROR
PASSED();
return 0;
@@ -2057,9 +2004,8 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_unlink_chunked_dataset(void)
+test_unlink_chunked_dataset(hid_t fapl)
{
- hid_t fapl_id=-1;
hid_t file_id=-1;
hid_t dset_id=-1;
hid_t space_id=-1;
@@ -2072,50 +2018,46 @@ test_unlink_chunked_dataset(void)
TESTING("unlinking chunked dataset");
/* Create file */
- fapl_id = h5_fileaccess();
- h5_fixname(FILENAME[9], fapl_id, filename, sizeof filename);
+ h5_fixname(FILENAME[9], fapl, filename, sizeof filename);
/* Create the file */
- if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id))<0) TEST_ERROR;
+ if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create the dataspace */
- if((space_id=H5Screate_simple(FILESPACE_NDIMS,dims,max_dims))<0) TEST_ERROR;
+ if((space_id=H5Screate_simple(FILESPACE_NDIMS,dims,max_dims)) < 0) TEST_ERROR
/* Create the dataset creation filter */
- if((dcpl_id=H5Pcreate(H5P_DATASET_CREATE))<0) TEST_ERROR;
+ if((dcpl_id=H5Pcreate(H5P_DATASET_CREATE)) < 0) TEST_ERROR
/* Set to chunked storage */
- if(H5Pset_chunk(dcpl_id,FILESPACE_NDIMS,chunk_dims)<0) TEST_ERROR;
+ if(H5Pset_chunk(dcpl_id,FILESPACE_NDIMS,chunk_dims) < 0) TEST_ERROR
/* Set to early space allocation */
- if(H5Pset_alloc_time(dcpl_id,H5D_ALLOC_TIME_EARLY)<0) TEST_ERROR;
+ if(H5Pset_alloc_time(dcpl_id,H5D_ALLOC_TIME_EARLY) < 0) TEST_ERROR
/* Create the dataset */
- if((dset_id = H5Dcreate(file_id,DATASETNAME,H5T_NATIVE_INT,space_id,dcpl_id))<0) TEST_ERROR;
+ if((dset_id = H5Dcreate(file_id,DATASETNAME,H5T_NATIVE_INT,space_id,dcpl_id)) < 0) TEST_ERROR
/* Close the dataspace */
- if(H5Sclose(space_id)<0) TEST_ERROR;
+ if(H5Sclose(space_id) < 0) TEST_ERROR
/* Close the dataset creation property list */
- if(H5Pclose(dcpl_id)<0) TEST_ERROR;
+ if(H5Pclose(dcpl_id) < 0) TEST_ERROR
/* Close the dataset */
- if(H5Dclose(dset_id)<0) TEST_ERROR;
+ if(H5Dclose(dset_id) < 0) TEST_ERROR
/* Close the file */
- if(H5Fclose(file_id)<0) TEST_ERROR;
+ if(H5Fclose(file_id) < 0) TEST_ERROR
/* Re-open the file */
- if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id))<0) TEST_ERROR;
+ if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
/* Delete the dataset */
- if(H5Gunlink(file_id, DATASETNAME)<0) TEST_ERROR;
+ if(H5Gunlink(file_id, DATASETNAME) < 0) TEST_ERROR
/* Close the file */
- if(H5Fclose(file_id)<0) TEST_ERROR;
-
- /* Close the file access property list */
- if(H5Pclose(fapl_id)<0) TEST_ERROR;
+ if(H5Fclose(file_id) < 0) TEST_ERROR
PASSED();
return 0;
@@ -2126,12 +2068,10 @@ error:
H5Sclose(space_id);
H5Dclose(dset_id);
H5Fclose(file_id);
- H5Pclose(fapl_id);
} H5E_END_TRY;
return 1;
} /* end test_unlink_chunked_dataset() */
-#ifdef H5_GROUP_REVISION
/*-------------------------------------------------------------------------
* Function: test_full_group_compact
@@ -2147,9 +2087,8 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_full_group_compact(void)
+test_full_group_compact(hid_t fapl)
{
- hid_t fapl_id = -1;
hid_t file_id = -1;
hid_t gid = -1, gid2 = -1; /* Group IDs */
H5G_stat_t sb; /* Stat buffer for object */
@@ -2162,12 +2101,11 @@ test_full_group_compact(void)
TESTING("unlinking non-empty compact group");
- /* Create file */
- fapl_id = h5_fileaccess();
- h5_fixname(FILENAME[10], fapl_id, filename, sizeof filename);
+ /* Create filename */
+ h5_fixname(FILENAME[10], fapl, filename, sizeof filename);
/* Create the file */
- if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id))<0) TEST_ERROR
+ if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create group to link objects to */
if((gid = H5Gcreate(file_id, "/keep", (size_t)0)) < 0) TEST_ERROR
@@ -2189,22 +2127,22 @@ test_full_group_compact(void)
if((keep_size = h5_get_file_size(filename)) == 0) TEST_ERROR
/* Re-open the file */
- if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) < 0) TEST_ERROR
+ if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
/* Create group to delete */
- if((gid = H5Gcreate(file_id, "/delete", (size_t)0)) < 0) goto error;
+ if((gid = H5Gcreate(file_id, "/delete", (size_t)0)) < 0) TEST_ERROR
/* Create external link (doesn't matter if it dangles) */
if(H5Lcreate_external("foo.h5", "/dst", gid, "external", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
/* Create soft link (doesn't matter if it dangles) */
- if(H5Glink2(file_id, "/foo", H5L_LINK_SOFT, gid, "soft") < 0) TEST_ERROR
+ if(H5Glink2(file_id, "/foo", H5L_TYPE_SOFT, gid, "soft") < 0) TEST_ERROR
/* Create hard links to objects in group to keep */
for(u = 0; u < FULL_GROUP_NUM_KEEP; u++) {
sprintf(objname, "/keep/keep %u\n", u);
sprintf(objname2, "keep %u\n", u);
- if(H5Glink2(file_id, objname, H5L_LINK_HARD, gid, objname2) < 0) TEST_ERROR
+ if(H5Glink2(file_id, objname, H5L_TYPE_HARD, gid, objname2) < 0) TEST_ERROR
} /* end for */
/* Create several objects to delete */
@@ -2215,9 +2153,9 @@ test_full_group_compact(void)
} /* end for */
/* Check on group's status */
- if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR;
- if(H5G_has_links_test(gid, NULL) != TRUE) TEST_ERROR;
- if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR;
+ if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR
+ if(H5G_has_links_test(gid, NULL) != TRUE) TEST_ERROR
+ if(H5G_has_stab_test(gid) == TRUE) TEST_ERROR
/* Close group with objects to delete */
if(H5Gclose(gid) < 0) TEST_ERROR
@@ -2234,7 +2172,7 @@ test_full_group_compact(void)
/* Re-open the file */
- if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) < 0) TEST_ERROR
+ if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
/* Delete the full group */
if(H5Gunlink(file_id, "/delete") < 0) TEST_ERROR
@@ -2255,9 +2193,6 @@ test_full_group_compact(void)
/* Verify the file is correct size */
if(file_size != keep_size) TEST_ERROR
- /* Close the file access property list */
- if(H5Pclose(fapl_id) < 0) TEST_ERROR
-
PASSED();
return 0;
@@ -2266,7 +2201,6 @@ error:
H5Gclose(gid2);
H5Gclose(gid);
H5Fclose(file_id);
- H5Pclose(fapl_id);
} H5E_END_TRY;
return 1;
} /* end test_full_group_compact() */
@@ -2286,25 +2220,26 @@ error:
*-------------------------------------------------------------------------
*/
static int
-test_full_group_dense(void)
+test_full_group_dense(hid_t fapl)
{
- hid_t fapl_id = -1;
hid_t file_id = -1;
+ hid_t gcpl = (-1); /* Group creation property list ID */
hid_t gid = -1, gid2 = -1; /* Group IDs */
H5G_stat_t sb; /* Stat buffer for object */
char objname[128]; /* Buffer for name of objects to create */
char objname2[128]; /* Buffer for name of objects to create */
char filename[1024]; /* Buffer for filename */
+ off_t keep_size; /* Size of the file with objects to keep */
+ off_t file_size; /* Size of each file created */
unsigned u; /* Local index variable */
TESTING("unlinking non-empty dense group");
- /* Create file */
- fapl_id = h5_fileaccess();
- h5_fixname(FILENAME[10], fapl_id, filename, sizeof filename);
+ /* Create filename */
+ h5_fixname(FILENAME[10], fapl, filename, sizeof filename);
/* Create the file */
- if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl_id))<0) TEST_ERROR
+ if((file_id = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
/* Create group to link objects to */
if((gid = H5Gcreate(file_id, "/keep", (size_t)0)) < 0) TEST_ERROR
@@ -2319,20 +2254,42 @@ test_full_group_dense(void)
/* Close group with objects to keep */
if(H5Gclose(gid) < 0) TEST_ERROR
+ /* Close the file */
+ if(H5Fclose(file_id) < 0) TEST_ERROR
+
+ /* Get the size of the file with only the objects to keep */
+ if((keep_size = h5_get_file_size(filename)) == 0) TEST_ERROR
+
+ /* Re-open the file */
+ if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
+
+ /* Set group creation "est. link info" closer to what will actually occur */
+ if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR
+ if(H5Pset_est_link_info(gcpl, FULL_GROUP_EST_NUM_ENTRIES, FULL_GROUP_EST_ENTRY_LEN) < 0) TEST_ERROR
+
/* Create group to delete */
- if((gid = H5Gcreate(file_id, "/delete", (size_t)0)) < 0) goto error;
+ /* (use non-default GCPL, in order to make certain that the group's object
+ * header is large enough to hold the links inserted without allocating
+ * another object header message chunk - in order to make the file size
+ * computation below easier/correct - QAK)
+ */
+ if((gid = H5Gcreate_expand(file_id, gcpl, H5P_DEFAULT)) < 0) TEST_ERROR
+ if(H5Llink(file_id, "/delete", gid, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
+
+ /* Close GCPL */
+ if(H5Pclose(gcpl) < 0) TEST_ERROR
/* Create external link (doesn't matter if it dangles) */
if(H5Lcreate_external("foo.h5", "/dst", gid, "external", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
/* Create soft link (doesn't matter if it dangles) */
- if(H5Glink2(file_id, "/foo", H5L_LINK_SOFT, gid, "soft") < 0) TEST_ERROR
+ if(H5Glink2(file_id, "/foo", H5L_TYPE_SOFT, gid, "soft") < 0) TEST_ERROR
/* Create hard links to objects in group to keep */
for(u = 0; u < FULL_GROUP_NUM_KEEP; u++) {
sprintf(objname, "/keep/keep %u\n", u);
sprintf(objname2, "keep %u\n", u);
- if(H5Glink2(file_id, objname, H5L_LINK_HARD, gid, objname2) < 0) TEST_ERROR
+ if(H5Glink2(file_id, objname, H5L_TYPE_HARD, gid, objname2) < 0) TEST_ERROR
} /* end for */
/* Create several objects to delete */
@@ -2343,9 +2300,9 @@ test_full_group_dense(void)
} /* end for */
/* Check on group's status */
- if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR;
- if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR;
- if(H5G_has_stab_test(gid) != TRUE) TEST_ERROR;
+ if(H5G_is_empty_test(gid) == TRUE) TEST_ERROR
+ if(H5G_has_links_test(gid, NULL) == TRUE) TEST_ERROR
+ if(H5G_is_new_dense_test(gid) != TRUE) TEST_ERROR
/* Close group with objects to delete */
if(H5Gclose(gid) < 0) TEST_ERROR
@@ -2362,7 +2319,7 @@ test_full_group_dense(void)
/* Re-open the file */
- if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl_id)) < 0) TEST_ERROR
+ if((file_id = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
/* Delete the full group */
if(H5Gunlink(file_id, "/delete") < 0) TEST_ERROR
@@ -2377,8 +2334,11 @@ test_full_group_dense(void)
/* Close the file */
if(H5Fclose(file_id) < 0) TEST_ERROR
- /* Close the file access property list */
- if(H5Pclose(fapl_id) < 0) TEST_ERROR
+ /* Get the size of the file */
+ if((file_size = h5_get_file_size(filename)) == 0) TEST_ERROR
+
+ /* Verify the file is correct size */
+ if(file_size != keep_size) TEST_ERROR
PASSED();
return 0;
@@ -2387,12 +2347,11 @@ error:
H5E_BEGIN_TRY {
H5Gclose(gid2);
H5Gclose(gid);
+ H5Pclose(gcpl);
H5Fclose(file_id);
- H5Pclose(fapl_id);
} H5E_END_TRY;
return 1;
} /* end test_full_group_dense() */
-#endif /* H5_GROUP_REVISION */
/*-------------------------------------------------------------------------
@@ -2414,16 +2373,18 @@ error:
int
main(void)
{
- hid_t fapl, fapl2, file;
- int nerrors = 0;
- char filename[1024];
const char *envval = NULL;
/* Don't run this test using the wrong file drivers */
envval = HDgetenv("HDF5_DRIVER");
- if (envval == NULL)
+ if(envval == NULL)
envval = "nomatch";
- if (HDstrcmp(envval, "core") && HDstrcmp(envval, "split") && HDstrcmp(envval, "multi") && HDstrcmp(envval, "family")) {
+ if(HDstrcmp(envval, "core") && HDstrcmp(envval, "split") && HDstrcmp(envval, "multi") && HDstrcmp(envval, "family")) {
+ hid_t fapl, fapl2, file;
+ int nerrors = 0;
+ char filename[1024];
+ hbool_t new_format;
+
/* Metadata cache parameters */
int mdc_nelmts;
size_t rdcc_nelmts;
@@ -2436,61 +2397,95 @@ main(void)
/* Open */
h5_reset();
fapl = h5_fileaccess();
- h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
- if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) TEST_ERROR;
-
- /* Make copy of regular fapl, to turn down the elements in the metadata cache */
- if((fapl2=H5Pcopy(fapl))<0)
- goto error;
-
- /* Get FAPL cache settings */
- if(H5Pget_cache(fapl2,&mdc_nelmts,&rdcc_nelmts,&rdcc_nbytes,&rdcc_w0)<0)
- printf("H5Pget_cache failed\n");
-
- /* Change FAPL cache settings */
- mdc_nelmts=1;
- if(H5Pset_cache(fapl2,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)<0)
- printf("H5Pset_cache failed\n");
-
- /* Tests */
- nerrors += test_one(file);
- nerrors += test_many(file);
- nerrors += test_symlink(file);
- nerrors += test_rename(file);
- nerrors += test_new_move();
- nerrors += check_new_move();
- nerrors += test_filespace();
-
- /* Test creating & unlinking lots of objects with default FAPL */
- nerrors += test_create_unlink("create and unlink large number of objects",fapl);
- /* Test creating & unlinking lots of objects with a 1-element metadata cache FAPL */
- nerrors += test_create_unlink("create and unlink large number of objects with small cache",fapl2);
-
- nerrors += test_link_slashes();
- nerrors += test_unlink_slashes();
-
- /* Test specific B-tree removal issues */
- nerrors += test_unlink_rightleaf(file);
- nerrors += test_unlink_rightnode(file);
- nerrors += test_unlink_middlenode(file);
-
- /* Test "resurrecting" objects */
- nerrors += test_resurrect_dataset();
- nerrors += test_resurrect_datatype();
- nerrors += test_resurrect_group();
-
- /* Test unlinking chunked datasets */
- nerrors += test_unlink_chunked_dataset();
-
-#ifdef H5_GROUP_REVISION
- /* Test unlinked groups which still have objects in them */
- nerrors += test_full_group_compact();
- nerrors += test_full_group_dense();
-#endif /* H5_GROUP_REVISION */
-
- /* Close */
- if (H5Pclose(fapl2)<0) TEST_ERROR;
- if (H5Fclose(file)<0) TEST_ERROR;
+
+ /* Copy the file access property list */
+ if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR
+
+ /* Set the "use the latest version of the format" flag for creating objects in the file */
+ if(H5Pset_latest_format(fapl2, TRUE) < 0) TEST_ERROR
+
+ /* Test with old & new format groups */
+ for(new_format = FALSE; new_format <= TRUE; new_format++) {
+ hid_t my_fapl;
+
+ /* Set the FAPL for the type of format */
+ if(new_format) {
+ puts("\nTesting with new group format:");
+ my_fapl = fapl2;
+ } /* end if */
+ else {
+ puts("Testing with old group format:");
+ my_fapl = fapl;
+ } /* end else */
+
+ h5_fixname(FILENAME[0], my_fapl, filename, sizeof filename);
+ if((file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, my_fapl)) < 0) TEST_ERROR
+
+ /* Tests */
+ nerrors += test_one(file);
+ nerrors += test_many(file);
+ nerrors += test_symlink(file);
+ nerrors += test_rename(file);
+
+ nerrors += test_new_move(my_fapl);
+ nerrors += check_new_move(my_fapl);
+ nerrors += test_filespace(my_fapl);
+
+ /* Test creating & unlinking lots of objects with default FAPL */
+ nerrors += test_create_unlink("create and unlink large number of objects", my_fapl);
+
+ {
+ hid_t fapl_small_mdc;
+
+ /* Make copy of regular fapl, to turn down the elements in the metadata cache */
+ if((fapl_small_mdc = H5Pcopy(my_fapl)) < 0)
+ goto error;
+
+ /* Get FAPL cache settings */
+ if(H5Pget_cache(fapl_small_mdc, &mdc_nelmts, &rdcc_nelmts, &rdcc_nbytes, &rdcc_w0) < 0)
+ printf("H5Pget_cache failed\n");
+
+ /* Change FAPL cache settings */
+ mdc_nelmts=1;
+ if(H5Pset_cache(fapl_small_mdc, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0) < 0)
+ printf("H5Pset_cache failed\n");
+
+ /* Test creating & unlinking lots of objects with a 1-element metadata cache FAPL */
+ nerrors += test_create_unlink("create and unlink large number of objects with small cache", fapl_small_mdc);
+
+ if(H5Pclose(fapl_small_mdc) < 0) TEST_ERROR
+ } /* end block */
+
+ nerrors += test_link_slashes(my_fapl);
+ nerrors += test_unlink_slashes(my_fapl);
+
+ /* Test specific B-tree removal issues */
+ /* (only for old format groups) */
+ if(!new_format) {
+ nerrors += test_unlink_rightleaf(file);
+ nerrors += test_unlink_rightnode(file);
+ nerrors += test_unlink_middlenode(file);
+ } /* end if */
+
+ /* Test "resurrecting" objects */
+ nerrors += test_resurrect_dataset(my_fapl);
+ nerrors += test_resurrect_datatype(my_fapl);
+ nerrors += test_resurrect_group(my_fapl);
+
+ /* Test unlinking chunked datasets */
+ nerrors += test_unlink_chunked_dataset(my_fapl);
+
+ /* Test unlinked groups which still have objects in them */
+ /* (only for new format groups) */
+ if(new_format) {
+ nerrors += test_full_group_compact(my_fapl);
+ nerrors += test_full_group_dense(my_fapl);
+ } /* end if */
+
+ /* Close */
+ if(H5Fclose(file) < 0) TEST_ERROR
+ } /* end for */
+
if (nerrors) {
printf("***** %d FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S");
exit(1);
@@ -2500,11 +2495,11 @@ main(void)
h5_cleanup(FILENAME, fapl);
}
else
- {
puts("All unlink tests skipped - Incompatible with current Virtual File Driver");
- }
+
return 0;
- error:
- return 1;
+error:
+ return 1;
}
+
rror; if (H5Tclose(a_copy) < 0) goto error; /* We should not be able to close a built-in byte */ H5E_BEGIN_TRY { status = H5Tclose (H5T_NATIVE_SCHAR); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Should not be able to close a predefined type!"); goto error; } PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_detect * * Purpose: Are we able to detect datatype classes correctly? (Especially * in nested types) * * Return: Success: 0 * * Failure: number of errors * * Programmer: Quincey Koziol * Saturday, August 30, 2003 * * Modifications: * *------------------------------------------------------------------------- */ static int test_detect(void) { struct atomic { /* Struct with atomic fields */ int i; float f; char c; double d; short s; }; struct complex { /* Struct with complex fields */ hobj_ref_t arr_r[3][3]; int i; hvl_t vl_f; char c; short s; }; hid_t atom_cmpd_id; /* Atomic Compound datatype */ hid_t atom_arr_id; /* Atomic Array datatype */ hid_t atom_vlf_id; /* Atomic VL datatype of float */ hid_t atom_vlc_id; /* Atomic VL datatype of char */ hid_t atom_vls_id; /* Atomic VL string datatype */ hid_t cplx_cmpd_id; /* Complex Compound datatype */ int rank=2; /* Rank for array datatype */ hsize_t dims[2]={3,3}; /* Dimensions for array datatype */ TESTING("H5Tdetect_class()"); /*-------------------------------------------------------------------------------- * Test class of some atomic types. *------------------------------------------------------------------------------*/ /* Native integers should be in the integer class */ if(H5Tdetect_class(H5T_NATIVE_INT,H5T_INTEGER)!=TRUE) TEST_ERROR /* Native integers should _not_ be in other classes */ if(H5Tdetect_class(H5T_NATIVE_INT,H5T_FLOAT)!=FALSE) TEST_ERROR if(H5Tdetect_class(H5T_NATIVE_INT,H5T_ARRAY)!=FALSE) TEST_ERROR if(H5Tdetect_class(H5T_NATIVE_INT,H5T_ENUM)!=FALSE) TEST_ERROR /*-------------------------------------------------------------------------------- * Test class of a compound type with some atomic types as fields. *------------------------------------------------------------------------------*/ /* Create a compound datatype and insert some atomic types */ if ((atom_cmpd_id = H5Tcreate(H5T_COMPOUND, sizeof(struct atomic)))<0) TEST_ERROR if (H5Tinsert(atom_cmpd_id, "i", HOFFSET(struct atomic, i), H5T_NATIVE_INT)<0) TEST_ERROR if (H5Tinsert(atom_cmpd_id, "f", HOFFSET(struct atomic, f), H5T_NATIVE_FLOAT)<0) TEST_ERROR if (H5Tinsert(atom_cmpd_id, "c", HOFFSET(struct atomic, c), H5T_NATIVE_CHAR)<0) TEST_ERROR if (H5Tinsert(atom_cmpd_id, "d", HOFFSET(struct atomic, d), H5T_NATIVE_DOUBLE)<0) TEST_ERROR if (H5Tinsert(atom_cmpd_id, "s", HOFFSET(struct atomic, s), H5T_NATIVE_SHORT)<0) TEST_ERROR /* Make certain that the correct classes can be detected */ if(H5Tdetect_class(atom_cmpd_id,H5T_COMPOUND)!=TRUE) TEST_ERROR if(H5Tdetect_class(atom_cmpd_id,H5T_INTEGER)!=TRUE) TEST_ERROR if(H5Tdetect_class(atom_cmpd_id,H5T_FLOAT)!=TRUE) TEST_ERROR /* Make certain that an incorrect class is not detected */ if(H5Tdetect_class(atom_cmpd_id,H5T_VLEN)!=FALSE) TEST_ERROR /*-------------------------------------------------------------------------------- * Test class of some complex types. *------------------------------------------------------------------------------*/ /* Create an array datatype with an atomic base type */ if((atom_arr_id=H5Tarray_create(H5T_STD_REF_OBJ, rank, dims, NULL))<0) TEST_ERROR /* Make certain that the correct classes can be detected */ if(H5Tdetect_class(atom_arr_id,H5T_ARRAY)!=TRUE) TEST_ERROR if(H5Tdetect_class(atom_arr_id,H5T_REFERENCE)!=TRUE) TEST_ERROR /* Make certain that an incorrect class is not detected */ if(H5Tdetect_class(atom_arr_id,H5T_VLEN)!=FALSE) TEST_ERROR if(H5Tdetect_class(atom_arr_id,H5T_FLOAT)!=FALSE) TEST_ERROR if(H5Tdetect_class(atom_arr_id,H5T_INTEGER)!=FALSE) TEST_ERROR /* Create a VL datatype with an atomic base type of float*/ if((atom_vlf_id=H5Tvlen_create(H5T_NATIVE_FLOAT))<0) TEST_ERROR /* Make certain that the correct classes can be detected */ if(H5Tdetect_class(atom_vlf_id,H5T_VLEN)!=TRUE) TEST_ERROR if(H5Tdetect_class(atom_vlf_id,H5T_FLOAT)!=TRUE) TEST_ERROR /* Make certain that an incorrect class is not detected */ if(H5Tdetect_class(atom_vlf_id,H5T_COMPOUND)!=FALSE) TEST_ERROR if(H5Tdetect_class(atom_vlf_id,H5T_INTEGER)!=FALSE) TEST_ERROR /* Create a VL datatype with an atomic base type of char. It should be a VL * but not a string class. */ if((atom_vlc_id=H5Tvlen_create(H5T_NATIVE_CHAR))<0) TEST_ERROR /* Make certain that the correct classes can be detected */ if(H5Tdetect_class(atom_vlc_id,H5T_VLEN)!=TRUE) TEST_ERROR if(H5Tdetect_class(atom_vlc_id,H5T_INTEGER)!=TRUE) TEST_ERROR /* Make certain that an incorrect class is not detected */ if(H5Tdetect_class(atom_vlc_id,H5T_STRING)!=FALSE) TEST_ERROR /* Create a VL string. It should be a string, not a VL class. */ if((atom_vls_id=H5Tcopy(H5T_C_S1))<0) TEST_ERROR if(H5Tset_size(atom_vls_id, H5T_VARIABLE)<0) TEST_ERROR; /* Make certain that the correct classes can be detected */ if(H5Tdetect_class(atom_vls_id,H5T_STRING)!=TRUE) TEST_ERROR /* Make certain that an incorrect class is not detected */ if(H5Tdetect_class(atom_vls_id,H5T_VLEN)!=FALSE) TEST_ERROR /*-------------------------------------------------------------------------------- * Test class of a compound type with some complex types as fields. *------------------------------------------------------------------------------*/ /* Create a compound datatype and insert some complex types */ if ((cplx_cmpd_id = H5Tcreate(H5T_COMPOUND, sizeof(struct complex)))<0) TEST_ERROR if (H5Tinsert(cplx_cmpd_id, "arr_r", HOFFSET(struct complex, arr_r), atom_arr_id)<0) TEST_ERROR if (H5Tinsert(cplx_cmpd_id, "i", HOFFSET(struct complex, i), H5T_NATIVE_INT)<0) TEST_ERROR if (H5Tinsert(cplx_cmpd_id, "vl_f", HOFFSET(struct complex, vl_f), atom_vlf_id)<0) TEST_ERROR if (H5Tinsert(cplx_cmpd_id, "c", HOFFSET(struct complex, c), H5T_NATIVE_CHAR)<0) TEST_ERROR if (H5Tinsert(cplx_cmpd_id, "s", HOFFSET(struct complex, s), H5T_NATIVE_SHORT)<0) TEST_ERROR /* Make certain that the correct classes can be detected */ if(H5Tdetect_class(cplx_cmpd_id,H5T_COMPOUND)!=TRUE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_ARRAY)!=TRUE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_REFERENCE)!=TRUE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_INTEGER)!=TRUE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_FLOAT)!=TRUE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_VLEN)!=TRUE) TEST_ERROR /* Make certain that an incorrect class is not detected */ if(H5Tdetect_class(cplx_cmpd_id,H5T_TIME)!=FALSE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_ENUM)!=FALSE) TEST_ERROR if(H5Tdetect_class(cplx_cmpd_id,H5T_STRING)!=FALSE) TEST_ERROR /* Close complex compound datatype */ if(H5Tclose(cplx_cmpd_id)<0) TEST_ERROR /* Close atomic VL datatype of float */ if(H5Tclose(atom_vlf_id)<0) TEST_ERROR /* Close atomic VL datatype of char */ if(H5Tclose(atom_vlc_id)<0) TEST_ERROR /* Close atomic VL string datatype */ if(H5Tclose(atom_vls_id)<0) TEST_ERROR /* Close atomic array datatype */ if(H5Tclose(atom_arr_id)<0) TEST_ERROR /* Close atomic compound datatype */ if(H5Tclose(atom_cmpd_id)<0) TEST_ERROR PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_1 * * Purpose: Tests various things about compound data types. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Wednesday, January 7, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_1(void) { complex_t tmp; hid_t complex_id; herr_t ret; TESTING("compound data types"); /* Create the empty type */ if ((complex_id = H5Tcreate(H5T_COMPOUND, sizeof tmp))<0) goto error; /* Attempt to add the new compound datatype as a field within itself */ H5E_BEGIN_TRY { ret=H5Tinsert(complex_id, "compound", 0, complex_id); } H5E_END_TRY; if (ret>=0) { H5_FAILED(); printf("Inserted compound datatype into itself?\n"); goto error; } /* end if */ /* Add a couple fields */ if (H5Tinsert(complex_id, "real", HOFFSET(complex_t, re), H5T_NATIVE_DOUBLE)<0) goto error; if (H5Tinsert(complex_id, "imaginary", HOFFSET(complex_t, im), H5T_NATIVE_DOUBLE)<0) goto error; if (H5Tclose (complex_id)<0) goto error; PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_2 * * Purpose: Tests a compound type conversion where the source and * destination are the same except for the order of the * elements. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, June 17, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_2(void) { struct st { int a, b, c[4], d, e; } *s_ptr; struct dt { int e, d, c[4], b, a; } *d_ptr; const size_t nelmts = NTESTELEM; const hsize_t four = 4; unsigned char *buf=NULL, *orig=NULL, *bkg=NULL; hid_t st=-1, dt=-1; hid_t array_dt; int i; TESTING("compound element reordering"); /* Sizes should be the same, but be careful just in case */ buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt))); bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt)); orig = (unsigned char*)malloc(nelmts * sizeof(struct st)); for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; s_ptr->a = i*8+0; s_ptr->b = i*8+1; s_ptr->c[0] = i*8+2; s_ptr->c[1] = i*8+3; s_ptr->c[2] = i*8+4; s_ptr->c[3] = i*8+5; s_ptr->d = i*8+6; s_ptr->e = i*8+7; } HDmemcpy(buf, orig, nelmts*sizeof(struct st)); /* Build hdf5 datatypes */ array_dt=H5Tarray_create(H5T_NATIVE_INT,1, &four, NULL); if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 || H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 || H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 || H5Tinsert(st, "c", HOFFSET(struct st, c), array_dt)<0 || H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 || H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0) goto error; H5Tclose(array_dt); array_dt=H5Tarray_create(H5T_NATIVE_INT,1, &four, NULL); if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 || H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 || H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_INT)<0 || H5Tinsert(dt, "c", HOFFSET(struct dt, c), array_dt)<0 || H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_INT)<0 || H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0) goto error; H5Tclose(array_dt); /* Perform the conversion */ if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0) goto error; /* Compare results */ for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; d_ptr = ((struct dt*)buf) + i; if (s_ptr->a != d_ptr->a || s_ptr->b != d_ptr->b || s_ptr->c[0] != d_ptr->c[0] || s_ptr->c[1] != d_ptr->c[1] || s_ptr->c[2] != d_ptr->c[2] || s_ptr->c[3] != d_ptr->c[3] || s_ptr->d != d_ptr->d || s_ptr->e != d_ptr->e) { H5_FAILED(); printf(" i=%d\n", i); printf(" src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n", s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2], s_ptr->c[3], s_ptr->d, s_ptr->e); printf(" dst={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n", d_ptr->a, d_ptr->b, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2], d_ptr->c[3], d_ptr->d, d_ptr->e); goto error; } } /* Release resources */ free(buf); free(bkg); free(orig); if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error; PASSED(); reset_hdf5(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_3 * * Purpose: Tests compound conversions where the source and destination * are the same except the destination is missing a couple * members which appear in the source. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, June 17, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_3(void) { struct st { int a, b, c[4], d, e; } *s_ptr; struct dt { int a, c[4], e; } *d_ptr; const size_t nelmts = NTESTELEM; const hsize_t four = 4; unsigned char *buf=NULL, *orig=NULL, *bkg=NULL; hid_t st=-1, dt=-1; hid_t array_dt; int i; TESTING("compound subset conversions"); /* Initialize */ buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt))); bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt)); orig = (unsigned char*)malloc(nelmts * sizeof(struct st)); for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; s_ptr->a = i*8+0; s_ptr->b = i*8+1; s_ptr->c[0] = i*8+2; s_ptr->c[1] = i*8+3; s_ptr->c[2] = i*8+4; s_ptr->c[3] = i*8+5; s_ptr->d = i*8+6; s_ptr->e = i*8+7; } HDmemcpy(buf, orig, nelmts*sizeof(struct st)); /* Build hdf5 datatypes */ array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL); if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 || H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 || H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 || H5Tinsert(st, "c", HOFFSET(struct st, c), array_dt)<0 || H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 || H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0) goto error; H5Tclose(array_dt); array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL); if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 || H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 || H5Tinsert(dt, "c", HOFFSET(struct dt, c), array_dt)<0 || H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0) goto error; H5Tclose(array_dt); /* Perform the conversion */ if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0) goto error; /* Compare results */ for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; d_ptr = ((struct dt*)buf) + i; if (s_ptr->a != d_ptr->a || s_ptr->c[0] != d_ptr->c[0] || s_ptr->c[1] != d_ptr->c[1] || s_ptr->c[2] != d_ptr->c[2] || s_ptr->c[3] != d_ptr->c[3] || s_ptr->e != d_ptr->e) { H5_FAILED(); printf(" i=%d\n", i); printf(" src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n", s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2], s_ptr->c[3], s_ptr->d, s_ptr->e); printf(" dst={a=%d, c=[%d,%d,%d,%d], e=%d\n", d_ptr->a, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2], d_ptr->c[3], d_ptr->e); goto error; } } /* Release resources */ free(buf); free(bkg); free(orig); if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error; PASSED(); reset_hdf5(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_4 * * Purpose: Tests compound conversions when the destination has the same * fields as the source but one or more of the fields are * smaller. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, June 17, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_4(void) { struct st { int a, b, c[4], d, e; } *s_ptr; struct dt { short b; int a, c[4]; short d; int e; } *d_ptr; const size_t nelmts = NTESTELEM; const hsize_t four = 4; unsigned char *buf=NULL, *orig=NULL, *bkg=NULL; hid_t st=-1, dt=-1; hid_t array_dt; int i; TESTING("compound element shrinking & reordering"); /* Sizes should be the same, but be careful just in case */ buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt))); bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt)); orig = (unsigned char*)malloc(nelmts * sizeof(struct st)); for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; s_ptr->a = i*8+0; s_ptr->b = (i*8+1) & 0x7fff; s_ptr->c[0] = i*8+2; s_ptr->c[1] = i*8+3; s_ptr->c[2] = i*8+4; s_ptr->c[3] = i*8+5; s_ptr->d = (i*8+6) & 0x7fff; s_ptr->e = i*8+7; } HDmemcpy(buf, orig, nelmts*sizeof(struct st)); /* Build hdf5 datatypes */ array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL); if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 || H5Tinsert(st, "a", HOFFSET(struct st, a), H5T_NATIVE_INT)<0 || H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_INT)<0 || H5Tinsert(st, "c", HOFFSET(struct st, c), array_dt)<0 || H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_INT)<0 || H5Tinsert(st, "e", HOFFSET(struct st, e), H5T_NATIVE_INT)<0) goto error; H5Tclose(array_dt); array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, &four, NULL); if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 || H5Tinsert(dt, "a", HOFFSET(struct dt, a), H5T_NATIVE_INT)<0 || H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_SHORT)<0 || H5Tinsert(dt, "c", HOFFSET(struct dt, c), array_dt)<0 || H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_SHORT)<0 || H5Tinsert(dt, "e", HOFFSET(struct dt, e), H5T_NATIVE_INT)<0) goto error; H5Tclose(array_dt); /* Perform the conversion */ if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0) goto error; /* Compare results */ for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; d_ptr = ((struct dt*)buf) + i; if (s_ptr->a != d_ptr->a || s_ptr->b != d_ptr->b || s_ptr->c[0] != d_ptr->c[0] || s_ptr->c[1] != d_ptr->c[1] || s_ptr->c[2] != d_ptr->c[2] || s_ptr->c[3] != d_ptr->c[3] || s_ptr->d != d_ptr->d || s_ptr->e != d_ptr->e) { H5_FAILED(); printf(" i=%d\n", i); printf(" src={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n", s_ptr->a, s_ptr->b, s_ptr->c[0], s_ptr->c[1], s_ptr->c[2], s_ptr->c[3], s_ptr->d, s_ptr->e); printf(" dst={a=%d, b=%d, c=[%d,%d,%d,%d], d=%d, e=%d\n", d_ptr->a, d_ptr->b, d_ptr->c[0], d_ptr->c[1], d_ptr->c[2], d_ptr->c[3], d_ptr->d, d_ptr->e); goto error; } } /* Release resources */ free(buf); free(bkg); free(orig); if (H5Tclose(st)<0 || H5Tclose(dt)<0) goto error; PASSED(); reset_hdf5(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_5 * * Purpose: Many versions of HDF5 have a bug in the optimized compound * datatype conversion function, H5T_conv_struct_opt(), which * is triggered when the top-level type contains a struct * which must undergo a conversion. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, June 17, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_5(void) { typedef struct { char name[16]; short tdim; short coll_ids[4]; } src_type_t; typedef struct { char name[16]; short tdim; int coll_ids[4]; } dst_type_t; hsize_t dims[1] = {4}; hid_t src_type, dst_type, short_array, int_array, string; hid_t array_dt; src_type_t src[2] = {{"one", 102, {104, 105, 106, 107}}, {"two", 202, {204, 205, 206, 207}}}; dst_type_t *dst; void *buf = calloc(2, sizeof(dst_type_t)); void *bkg = calloc(2, sizeof(dst_type_t)); #if 1 TESTING("optimized struct converter"); #else /* Turn off optimized compound conversion function to work around * the problem. */ TESTING("optimized struct converter bug workaround"); H5Tunregister(H5T_PERS_DONTCARE, "struct(opt)", -1, -1, NULL); #endif /* Build datatypes */ short_array = H5Tcreate(H5T_COMPOUND, 4*sizeof(short)); array_dt=H5Tarray_create(H5T_NATIVE_SHORT, 1, dims, NULL); H5Tinsert(short_array, "_", 0, array_dt); H5Tclose(array_dt); int_array = H5Tcreate(H5T_COMPOUND, 4*sizeof(int)); array_dt=H5Tarray_create(H5T_NATIVE_INT, 1, dims, NULL); H5Tinsert(int_array, "_", 0, array_dt); H5Tclose(array_dt); string = H5Tcopy(H5T_C_S1); H5Tset_size(string, 16); src_type = H5Tcreate(H5T_COMPOUND, sizeof(src_type_t)); H5Tinsert(src_type, "name", HOFFSET(src_type_t, name), string ); H5Tinsert(src_type, "tdim", HOFFSET(src_type_t, tdim), H5T_NATIVE_SHORT); H5Tinsert(src_type, "coll_ids", HOFFSET(src_type_t, coll_ids), short_array ); dst_type = H5Tcreate(H5T_COMPOUND, sizeof(dst_type_t)); H5Tinsert(dst_type, "name", HOFFSET(dst_type_t, name), string ); H5Tinsert(dst_type, "tdim", HOFFSET(dst_type_t, tdim), H5T_NATIVE_SHORT); H5Tinsert(dst_type, "coll_ids", HOFFSET(dst_type_t, coll_ids), int_array ); /* Convert data */ HDmemcpy(buf, src, sizeof(src)); H5Tconvert(src_type, dst_type, 2, buf, bkg, H5P_DEFAULT); dst = (dst_type_t*)buf; /* Cleanup */ H5Tclose(src_type); H5Tclose(dst_type); H5Tclose(string); H5Tclose(short_array); H5Tclose(int_array); /* Check results */ if (HDmemcmp(src[1].name, dst[1].name, sizeof(src[1].name)) || src[1].tdim!=dst[1].tdim || src[1].coll_ids[0]!=dst[1].coll_ids[0] || src[1].coll_ids[1]!=dst[1].coll_ids[1] || src[1].coll_ids[2]!=dst[1].coll_ids[2] || src[1].coll_ids[3]!=dst[1].coll_ids[3]) { H5_FAILED(); return 1; } /* Free memory buffers */ free(buf); free(bkg); PASSED(); return 0; } /*------------------------------------------------------------------------- * Function: test_compound_6 * * Purpose: Tests compound conversions when the destination has the same * fields as the source but one or more of the fields are * larger. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Quincey Koziol * Wednesday, December 13, 2000 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_6(void) { struct st { short b; short d; } *s_ptr; struct dt { long b; long d; } *d_ptr; const size_t nelmts = NTESTELEM; unsigned char *buf=NULL, *orig=NULL, *bkg=NULL; hid_t st=-1, dt=-1; int i; TESTING("compound element growing"); /* Sizes should be the same, but be careful just in case */ buf = (unsigned char*)malloc(nelmts * MAX(sizeof(struct st), sizeof(struct dt))); bkg = (unsigned char*)malloc(nelmts * sizeof(struct dt)); orig = (unsigned char*)malloc(nelmts * sizeof(struct st)); for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; s_ptr->b = (i*8+1) & 0x7fff; s_ptr->d = (i*8+6) & 0x7fff; } HDmemcpy(buf, orig, nelmts*sizeof(struct st)); /* Build hdf5 datatypes */ if ((st=H5Tcreate(H5T_COMPOUND, sizeof(struct st)))<0 || H5Tinsert(st, "b", HOFFSET(struct st, b), H5T_NATIVE_SHORT)<0 || H5Tinsert(st, "d", HOFFSET(struct st, d), H5T_NATIVE_SHORT)<0) { H5_FAILED(); goto error; } if ((dt=H5Tcreate(H5T_COMPOUND, sizeof(struct dt)))<0 || H5Tinsert(dt, "b", HOFFSET(struct dt, b), H5T_NATIVE_LONG)<0 || H5Tinsert(dt, "d", HOFFSET(struct dt, d), H5T_NATIVE_LONG)<0) { H5_FAILED(); goto error; } /* Perform the conversion */ if (H5Tconvert(st, dt, nelmts, buf, bkg, H5P_DEFAULT)<0) { H5_FAILED(); goto error; } /* Compare results */ for (i=0; i<(int)nelmts; i++) { s_ptr = ((struct st*)orig) + i; d_ptr = ((struct dt*)buf) + i; if (s_ptr->b != d_ptr->b || s_ptr->d != d_ptr->d) { H5_FAILED(); printf(" i=%d\n", i); printf(" src={b=%d, d=%d\n", (int)s_ptr->b, (int)s_ptr->d); printf(" dst={b=%ld, d=%ld\n", d_ptr->b, d_ptr->d); goto error; } } /* Release resources */ free(buf); free(bkg); free(orig); if (H5Tclose(st)<0 || H5Tclose(dt)<0) { H5_FAILED(); goto error; } PASSED(); reset_hdf5(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_7 * * Purpose: Tests inserting fields into compound datatypes when the field * overlaps the end of the compound datatype. Also, tests * increasing compound type size. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Quincey Koziol * Tuesday, December 18, 2001 * * Modifications: * The size of compound datatype can be expanded now. * Raymond Lu * Wednesday, September 10, 2003 * *------------------------------------------------------------------------- */ static int test_compound_7(void) { struct s1 { int a; float b; long c; }; struct s2 { int a; float b; long c; double d; }; hid_t tid1,tid2; herr_t ret; TESTING("compound element insertion"); 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(H5Tget_size(tid1)!=sizeof(struct s1)) { H5_FAILED(); printf("Incorrect size for struct 1\n"); goto error; } /* end if */ if((tid2= H5Tcopy(tid1))<0) { H5_FAILED(); printf("Can't copy datatype\n"); goto error; } /* end if */ if(H5Tget_size(tid2)==sizeof(struct s2)) { H5_FAILED(); printf("Incorrect size for struct 2\n"); goto error; } /* end if */ /* Should not be able to insert field past end of compound datatype */ H5E_BEGIN_TRY { ret=H5Tinsert(tid2,"d",HOFFSET(struct s2,d),H5T_NATIVE_DOUBLE); } H5E_END_TRY; if(ret>=0) { H5_FAILED(); printf("Inserted field 'd'?\n"); goto error; } /* end if */ /* Should not be able to shrink size of compound datatype */ H5E_BEGIN_TRY { ret=H5Tset_size(tid2, sizeof(struct s1)/2); } H5E_END_TRY; if(ret>=0) { H5_FAILED(); printf("Shrunk compound type?\n"); goto error; } /* end if */ /* Increase compound type size and try inserting field again */ if(H5Tset_size(tid2, sizeof(struct s2))<0) { H5_FAILED(); printf("Can't increase size for compound type\n"); goto error; } /* end if */ if( H5Tinsert(tid2,"d",HOFFSET(struct s2,d),H5T_NATIVE_DOUBLE)<0) { H5_FAILED(); printf("Can't expand compound datatype\n"); goto error; } /* end if */ if(H5Tget_size(tid2)!=sizeof(struct s2)) { H5_FAILED(); printf("Incorrect size for struct 2\n"); goto error; } /* end if */ /* Release resources */ if (H5Tclose(tid1)<0 || H5Tclose(tid2)<0) { H5_FAILED(); printf("Can't close datatypes\n"); goto error; } /* end if */ PASSED(); reset_hdf5(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_8 * * Purpose: Tests H5Tpack for compound data types. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Wednesday, January 7, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_8(void) { typedef struct s1 { char a; int b; } s1; typedef struct s2 { char c; s1 d; } s2; hid_t tid1, tid2, tid3; herr_t ret; TESTING("packing compound data types"); /* Create first compound datatype */ if((tid1 = H5Tcreate( H5T_COMPOUND, sizeof(struct s1)))<0) { H5_FAILED(); AT(); printf("Can't create datatype!\n"); goto error; } /* end if */ if(H5Tinsert(tid1,"a",HOFFSET(struct s1,a),H5T_NATIVE_CHAR)<0) { H5_FAILED(); AT(); printf("Can't insert field 'a'\n"); goto error; } /* end if */ if(H5Tinsert(tid1,"b",HOFFSET(struct s1,b),H5T_NATIVE_INT)<0) { H5_FAILED(); AT(); printf("Can't insert field 'b'\n"); goto error; } /* end if */ /* Test H5Tpack for the first compound type */ if(H5Tpack(tid1)<0) { H5_FAILED(); AT(); printf("Can't pack the compound data type\n"); goto error; } /* end if */ if(H5Tlock(tid1)<0) { H5_FAILED(); AT(); printf("Can't lock the compound data type\n"); goto error; } /* end if */ /* If the type is already packed, packing a locked type is OK */ if(H5Tpack(tid1)<0) { H5_FAILED(); AT(); printf("Can't pack the compound data type for second time\n"); goto error; } /* end if */ /* Create second compound datatype */ if((tid2 = H5Tcreate( H5T_COMPOUND, sizeof(struct s2)))<0) { H5_FAILED(); AT(); printf("Can't create datatype!\n"); goto error; } /* end if */ if(H5Tinsert(tid2,"c",HOFFSET(struct s2,c),H5T_NATIVE_CHAR)<0) { H5_FAILED(); AT(); printf("Can't insert field 'c'\n"); goto error; } /* end if */ if(H5Tinsert(tid2,"d",HOFFSET(struct s2,d),tid1)<0) { H5_FAILED(); AT(); printf("Can't insert field 'd'\n"); goto error; } /* end if */ /* Make a copy of the type for later */ if((tid3=H5Tcopy(tid2))<0) { H5_FAILED(); AT(); printf("Can't copy type #2\n"); goto error; } /* end if */ /* Test H5Tpack for the second compound type */ if(H5Tpack(tid2)<0) { H5_FAILED(); AT(); printf("Can't pack the compound data type\n"); goto error; } /* end if */ if(H5Tlock(tid2)<0) { H5_FAILED(); AT(); printf("Can't lock the compound data type\n"); goto error; } /* end if */ /* If the type is already packed, packing a locked type is OK */ if(H5Tpack(tid2)<0) { H5_FAILED(); AT(); printf("Can't pack the compound data type for second time\n"); goto error; } /* end if */ /* Lock unpacked type */ if(H5Tlock(tid3)<0) { H5_FAILED(); AT(); printf("Can't lock the compound data type\n"); goto error; } /* end if */ /* If the type is not packed, packing a locked type shouldn't work */ H5E_BEGIN_TRY { ret=H5Tpack(tid3); } H5E_END_TRY; if(ret>=0) { H5_FAILED(); AT(); printf("Packing locked datatype worked?\n"); goto error; } /* end if */ /* Can't release resources - they are locked */ PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_9 * * Purpose: Tests compound data type with VL string as field. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Raymond Lu * Wednesday, June 9, 2004 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_9(void) { typedef struct cmpd_struct { int i1; char* str; int i2; } cmpd_struct; cmpd_struct wdata = {11, "variable-length string", 22}; cmpd_struct rdata; hid_t file; hid_t cmpd_tid, str_id, dup_tid; hid_t space_id; hid_t dset_id; hsize_t dim1[1]; char filename[1024]; TESTING("compound data type with VL string"); /* Create File */ h5_fixname(FILENAME[3], H5P_DEFAULT, filename, sizeof filename); if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) { H5_FAILED(); AT(); printf("Can't create file!\n"); goto error; } /* end if */ /* Create first compound datatype */ if((cmpd_tid = H5Tcreate( H5T_COMPOUND, sizeof(struct cmpd_struct)))<0) { H5_FAILED(); AT(); printf("Can't create datatype!\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid,"i1",HOFFSET(struct cmpd_struct,i1),H5T_NATIVE_INT)<0) { H5_FAILED(); AT(); printf("Can't insert field 'i1'\n"); goto error; } /* end if */ str_id = H5Tcopy(H5T_C_S1); if(H5Tset_size(str_id,H5T_VARIABLE)<0) { H5_FAILED(); AT(); printf("Can't set size for VL string\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid,"vl_string",HOFFSET(cmpd_struct,str),str_id)<0) { H5_FAILED(); AT(); printf("Can't insert field 'i1'\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid,"i2",HOFFSET(struct cmpd_struct,i2),H5T_NATIVE_INT)<0) { H5_FAILED(); AT(); printf("Can't insert field 'i2'\n"); goto error; } /* end if */ if(H5Tcommit(file,"compound",cmpd_tid)<0) { H5_FAILED(); AT(); printf("Can't commit datatype\n"); goto error; } /* end if */ if(H5Tclose(cmpd_tid)<0) { H5_FAILED(); AT(); printf("Can't close datatype\n"); goto error; } /* end if */ if((cmpd_tid = H5Topen(file, "compound"))<0) { H5_FAILED(); AT(); printf("Can't open datatype\n"); goto error; } /* end if */ if((dup_tid = H5Tcopy(cmpd_tid))<0) { H5_FAILED(); AT(); printf("Can't copy datatype\n"); goto error; } /* end if */ dim1[0] = 1; if((space_id=H5Screate_simple(1,dim1,NULL))<0) { H5_FAILED(); AT(); printf("Can't create space\n"); goto error; } /* end if */ if((dset_id = H5Dcreate(file,"Dataset",dup_tid,space_id,H5P_DEFAULT))<0) { H5_FAILED(); AT(); printf("Can't create dataset\n"); goto error; } /* end if */ if(H5Dwrite(dset_id,dup_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&wdata)<0) { H5_FAILED(); AT(); printf("Can't write data\n"); goto error; } /* end if */ if(H5Dread(dset_id,dup_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rdata)<0) { H5_FAILED(); AT(); printf("Can't read data\n"); goto error; } /* end if */ if(rdata.i1!=wdata.i1 || rdata.i2!=wdata.i2 || HDstrcmp(rdata.str, wdata.str)) { H5_FAILED(); AT(); printf("incorrect read data\n"); goto error; } /* end if */ if(H5Dclose(dset_id)<0) goto error; if(H5Tclose(cmpd_tid)<0) goto error; if(H5Tclose(dup_tid)<0) goto error; if(H5Tclose(str_id)<0) goto error; if(H5Sclose(space_id)<0) goto error; if(H5Fclose(file)<0) goto error; if((file=H5Fopen(filename, H5F_ACC_RDONLY, H5P_DEFAULT))<0) { H5_FAILED(); AT(); printf("cannot open file\n"); goto error; } /* end if */ if((dset_id = H5Dopen(file, "Dataset"))<0) { H5_FAILED(); AT(); printf("cannot open dataset\n"); goto error; } /* end if */ if((cmpd_tid = H5Dget_type(dset_id))<0) { H5_FAILED(); AT(); printf("cannot open dataset\n"); goto error; } /* end if */ if((dup_tid = H5Tcopy(cmpd_tid))<0) { H5_FAILED(); AT(); printf("Can't copy datatype\n"); goto error; } /* end if */ rdata.i1 = rdata.i2 = 0; if(rdata.str) free(rdata.str); if(H5Dread(dset_id,dup_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rdata)<0) { H5_FAILED(); AT(); printf("Can't read data\n"); goto error; } /* end if */ if(rdata.i1!=wdata.i1 || rdata.i2!=wdata.i2 || strcmp(rdata.str, wdata.str)) { H5_FAILED(); AT(); printf("incorrect read data\n"); goto error; } /* end if */ if(rdata.str) free(rdata.str); if(H5Dclose(dset_id)<0) goto error; if(H5Tclose(cmpd_tid)<0) goto error; if(H5Tclose(dup_tid)<0) goto error; if(H5Fclose(file)<0) goto error; PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_10 * * Purpose: Tests array data type of compound type with VL string as field. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Raymond Lu * Tuesday, June 15, 2004 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_10(void) { typedef struct cmpd_struct { int i1; char* str; hvl_t text; int i2; } cmpd_struct; cmpd_struct wdata[ARRAY_DIM]; cmpd_struct rdata[ARRAY_DIM]; hid_t file; hid_t arr_tid, cmpd_tid, cstr_id, vlstr_id; hid_t space_id; hid_t dset_id; hsize_t arr_dim[1] = {ARRAY_DIM}; /* Array dimensions */ hsize_t dim1[1]; void *t1, *t2; char filename[1024]; int len; int i; TESTING("array data type of compound type with VL string"); for(i=0; i<ARRAY_DIM; i++) { wdata[i].i1 = i*10+i; wdata[i].str = strdup("C string A"); wdata[i].str[9] += i; wdata[i].i2 = i*1000+i*10; wdata[i].text.p = (void*)strdup("variable-length text A\0"); len = wdata[i].text.len = strlen((char*)wdata[i].text.p)+1; ((char*)(wdata[i].text.p))[len-2] += i; ((char*)(wdata[i].text.p))[len-1] = '\0'; } /* Create File */ h5_fixname(FILENAME[4], H5P_DEFAULT, filename, sizeof filename); if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) { H5_FAILED(); AT(); printf("Can't create file!\n"); goto error; } /* end if */ /* Create first compound datatype */ if((cmpd_tid = H5Tcreate( H5T_COMPOUND, sizeof(struct cmpd_struct)))<0) { H5_FAILED(); AT(); printf("Can't create datatype!\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid,"i1",HOFFSET(struct cmpd_struct,i1),H5T_NATIVE_INT)<0) { H5_FAILED(); AT(); printf("Can't insert field 'i1'\n"); goto error; } /* end if */ cstr_id = H5Tcopy(H5T_C_S1); if(H5Tset_size(cstr_id,H5T_VARIABLE)<0) { H5_FAILED(); AT(); printf("Can't set size for C string\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid,"c_string",HOFFSET(cmpd_struct,str),cstr_id)<0) { H5_FAILED(); AT(); printf("Can't insert field 'str'\n"); goto error; } /* end if */ /* Create vl-string data type */ if((vlstr_id = H5Tvlen_create(H5T_NATIVE_CHAR))<0) { H5_FAILED(); AT(); printf("Can't create VL string\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid, "vl_string",HOFFSET(cmpd_struct, text), vlstr_id)<0) { H5_FAILED(); AT(); printf("Can't insert field 'text'\n"); goto error; } /* end if */ if(H5Tinsert(cmpd_tid,"i2",HOFFSET(struct cmpd_struct,i2),H5T_NATIVE_INT)<0) { H5_FAILED(); AT(); printf("Can't insert field 'i2'\n"); goto error; } /* end if */ /* Create the array data type for c_string data */ if((arr_tid = H5Tarray_create(cmpd_tid,1,arr_dim, NULL))<0) { H5_FAILED(); AT(); printf("Can't create array type\n"); goto error; } /* end if */ dim1[0] = 1; if((space_id=H5Screate_simple(1,dim1,NULL))<0) { H5_FAILED(); AT(); printf("Can't create space\n"); goto error; } /* end if */ if((dset_id = H5Dcreate(file,"Dataset",arr_tid,space_id,H5P_DEFAULT))<0) { H5_FAILED(); AT(); printf("Can't create dataset\n"); goto error; } /* end if */ if(H5Dwrite(dset_id,arr_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&wdata)<0) { H5_FAILED(); AT(); printf("Can't write data\n"); goto error; } /* end if */ if(H5Dread(dset_id,arr_tid,H5S_ALL,H5S_ALL,H5P_DEFAULT,&rdata)<0) { H5_FAILED(); AT(); printf("Can't read data\n"); goto error; } /* end if */ for(i=0; i<ARRAY_DIM; i++) { if(rdata[i].i1!=wdata[i].i1 || rdata[i].i2!=wdata[i].i2 || strcmp(rdata[i].str, wdata[i].str)) { H5_FAILED(); AT(); printf("incorrect read data\n"); goto error; } /* end if */ if(rdata[i].text.len!=wdata[i].text.len) { H5_FAILED(); AT(); printf("incorrect VL length\n"); goto error; } /* end if */ t1 = rdata[i].text.p; t2 = wdata[i].text.p; if(strcmp((char*)t1, (char*)t2)) { H5_FAILED(); AT(); printf("incorrect VL read data\n"); goto error; } free(t1); free(t2); free(wdata[i].str); free(rdata[i].str); } /* end for */ if(H5Dclose(dset_id)<0) goto error; if(H5Tclose(cmpd_tid)<0) goto error; if(H5Tclose(arr_tid)<0) goto error; if(H5Tclose(cstr_id)<0) goto error; if(H5Tclose(vlstr_id)<0) goto error; if(H5Sclose(space_id)<0) goto error; if(H5Fclose(file)<0) goto error; PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_11 * * Purpose: Tests whether registering/unregistering a type conversion * function correctly causes compound datatypes to recalculate * their cached field conversion information * * Return: Success: 0 * * Failure: number of errors * * Programmer: Quincey Koziol * Saturday, August 7, 2004 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_11(void) { typedef struct { double d1; int i1; char *s1; int i2; double d2; double d3; } big_t; typedef struct { double d1; int i1; char *s1; } little_t; hid_t var_string_tid; /* Datatype IDs for type conversion */ hid_t big_tid, little_tid; /* Datatype IDs for type conversion */ hid_t big_tid2, little_tid2; /* Datatype IDs for type conversion */ hid_t opaq_src_tid, opaq_dst_tid; /* Datatype IDs for type conversion */ void *buf, /* Conversion buffer */ *buf_orig, /* Copy of original conversion buffer */ *bkg; /* Background buffer */ size_t u; /* Local index variable */ TESTING("registering type conversion routine with compound conversions"); /* Create variable string type for use in both structs */ if((var_string_tid=H5Tcopy(H5T_C_S1))<0) TEST_ERROR if(H5Tset_size(var_string_tid,H5T_VARIABLE)<0) TEST_ERROR /* Create type for 'big' struct */ if((big_tid = H5Tcreate(H5T_COMPOUND, sizeof(big_t)))<0) TEST_ERROR if(H5Tinsert(big_tid, "d1", HOFFSET(big_t, d1), H5T_NATIVE_DOUBLE)<0) TEST_ERROR if(H5Tinsert(big_tid, "i1", HOFFSET(big_t, i1), H5T_NATIVE_INT)<0) TEST_ERROR if(H5Tinsert(big_tid, "s1", HOFFSET(big_t, s1), var_string_tid)<0) TEST_ERROR if(H5Tinsert(big_tid, "i2", HOFFSET(big_t, i2), H5T_NATIVE_INT)<0) TEST_ERROR if(H5Tinsert(big_tid, "d2", HOFFSET(big_t, d2), H5T_NATIVE_DOUBLE)<0) TEST_ERROR if(H5Tinsert(big_tid, "d3", HOFFSET(big_t, d3), H5T_NATIVE_DOUBLE)<0) TEST_ERROR /* Create type for 'little' struct (with "out of order" inserts) */ if((little_tid = H5Tcreate(H5T_COMPOUND, sizeof(little_t)))<0) TEST_ERROR if(H5Tinsert(little_tid, "d1", HOFFSET(little_t, d1), H5T_NATIVE_DOUBLE)<0) TEST_ERROR if(H5Tinsert(little_tid, "s1", HOFFSET(little_t, s1), var_string_tid)<0) TEST_ERROR if(H5Tinsert(little_tid, "i1", HOFFSET(little_t, i1), H5T_NATIVE_INT)<0) TEST_ERROR /* Allocate buffers */ if((buf=HDmalloc(sizeof(big_t)*NTESTELEM))==NULL) TEST_ERROR if((buf_orig=HDmalloc(sizeof(big_t)*NTESTELEM))==NULL) TEST_ERROR if((bkg=HDmalloc(sizeof(big_t)*NTESTELEM))==NULL) TEST_ERROR /* Initialize buffer */ for(u=0; u<NTESTELEM; u++) { ((big_t *)buf)[u].d1=(double)u*(double)1.5; ((big_t *)buf)[u].d2=(double)u*(double)2.5; ((big_t *)buf)[u].d2=(double)u*(double)3.5; ((big_t *)buf)[u].i1=u*3; ((big_t *)buf)[u].i2=u*5; ((big_t *)buf)[u].s1=HDmalloc(32); sprintf(((big_t *)buf)[u].s1,"%u",(unsigned)u); } /* end for */ /* Make copy of buffer before conversion */ HDmemcpy(buf_orig,buf,sizeof(big_t)*NTESTELEM); /* Make copies of the 'big' and 'little' datatypes, so the type * conversion routine doesn't use the same ones this time and next time */ if((big_tid2=H5Tcopy(big_tid))<0) TEST_ERROR if((little_tid2=H5Tcopy(little_tid))<0) TEST_ERROR /* Convert buffer from 'big' to 'little' struct */ if(H5Tconvert(big_tid2,little_tid2,NTESTELEM,buf,bkg,H5P_DEFAULT)<0) TEST_ERROR /* Verify converted buffer is correct */ for(u=0; u<NTESTELEM; u++) { if(((big_t *)buf_orig)[u].d1!=((little_t *)buf)[u].d1) { printf("Error, line #%d: buf_orig[%u].d1=%f, buf[%u].d1=%f\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].d1,(unsigned)u,((little_t *)buf)[u].d1); TEST_ERROR } /* end if */ if(((big_t *)buf_orig)[u].i1!=((little_t *)buf)[u].i1) { printf("Error, line #%d: buf_orig[%u].i1=%d, buf[%u].i1=%d\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].i1,(unsigned)u,((little_t *)buf)[u].i1); TEST_ERROR } /* end if */ if(((big_t *)buf_orig)[u].s1==NULL || ((little_t *)buf)[u].s1==NULL) { printf("Error, line #%d: buf_orig[%u].s1=%p, buf[%u].s1=%p\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1); TEST_ERROR } /* end if */ else if(HDstrcmp(((big_t *)buf_orig)[u].s1,((little_t *)buf)[u].s1)) { printf("Error, line #%d: buf_orig[%u].s1=%s, buf[%u].s1=%s\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1); TEST_ERROR } /* end if */ HDfree(((little_t *)buf)[u].s1); } /* end for */ /* Build source and destination types for conversion routine */ if((opaq_src_tid=H5Tcreate(H5T_OPAQUE, 4))<0) TEST_ERROR if(H5Tset_tag(opaq_src_tid, "opaque source type")<0) TEST_ERROR if((opaq_dst_tid=H5Tcreate(H5T_OPAQUE, 4))<0) TEST_ERROR if(H5Tset_tag(opaq_dst_tid, "opaque destination type")<0) TEST_ERROR /* Register new type conversion routine */ if(H5Tregister(H5T_PERS_HARD, "opaq_test", opaq_src_tid, opaq_dst_tid, convert_opaque)<0) TEST_ERROR /* Recover the original buffer information */ HDmemcpy(buf,buf_orig,sizeof(big_t)*NTESTELEM); /* Convert buffer from 'big' to 'little' struct */ if(H5Tconvert(big_tid,little_tid,NTESTELEM,buf,bkg,H5P_DEFAULT)<0) TEST_ERROR /* Verify converted buffer is correct */ for(u=0; u<NTESTELEM; u++) { if(((big_t *)buf_orig)[u].d1!=((little_t *)buf)[u].d1) { printf("Error, line #%d: buf_orig[%u].d1=%f, buf[%u].d1=%f\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].d1,(unsigned)u,((little_t *)buf)[u].d1); TEST_ERROR } /* end if */ if(((big_t *)buf_orig)[u].i1!=((little_t *)buf)[u].i1) { printf("Error, line #%d: buf_orig[%u].i1=%d, buf[%u].i1=%d\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].i1,(unsigned)u,((little_t *)buf)[u].i1); TEST_ERROR } /* end if */ if(((big_t *)buf_orig)[u].s1==NULL || ((little_t *)buf)[u].s1==NULL) { printf("Error, line #%d: buf_orig[%u].s1=%p, buf[%u].s1=%p\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1); TEST_ERROR } /* end if */ else if(HDstrcmp(((big_t *)buf_orig)[u].s1,((little_t *)buf)[u].s1)) { printf("Error, line #%d: buf_orig[%u].s1=%s, buf[%u].s1=%s\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1); TEST_ERROR } /* end if */ HDfree(((little_t *)buf)[u].s1); } /* end for */ /* Unregister the conversion routine */ if(H5Tunregister(H5T_PERS_HARD, "opaq_test", opaq_src_tid, opaq_dst_tid, convert_opaque)<0) TEST_ERROR /* Recover the original buffer information */ HDmemcpy(buf,buf_orig,sizeof(big_t)*NTESTELEM); /* Convert buffer from 'big' to 'little' struct */ if(H5Tconvert(big_tid,little_tid,NTESTELEM,buf,bkg,H5P_DEFAULT)<0) TEST_ERROR /* Verify converted buffer is correct */ for(u=0; u<NTESTELEM; u++) { if(((big_t *)buf_orig)[u].d1!=((little_t *)buf)[u].d1) { printf("Error, line #%d: buf_orig[%u].d1=%f, buf[%u].d1=%f\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].d1,(unsigned)u,((little_t *)buf)[u].d1); TEST_ERROR } /* end if */ if(((big_t *)buf_orig)[u].i1!=((little_t *)buf)[u].i1) { printf("Error, line #%d: buf_orig[%u].i1=%d, buf[%u].i1=%d\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].i1,(unsigned)u,((little_t *)buf)[u].i1); TEST_ERROR } /* end if */ if(((big_t *)buf_orig)[u].s1==NULL || ((little_t *)buf)[u].s1==NULL) { printf("Error, line #%d: buf_orig[%u].s1=%p, buf[%u].s1=%p\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1); TEST_ERROR } /* end if */ else if(HDstrcmp(((big_t *)buf_orig)[u].s1,((little_t *)buf)[u].s1)) { printf("Error, line #%d: buf_orig[%u].s1=%s, buf[%u].s1=%s\n",__LINE__, (unsigned)u,((big_t *)buf_orig)[u].s1,(unsigned)u,((little_t *)buf)[u].s1); TEST_ERROR } /* end if */ HDfree(((little_t *)buf)[u].s1); } /* end for */ /* Free everything */ for(u=0; u<NTESTELEM; u++) HDfree(((big_t *)buf_orig)[u].s1); if(H5Tclose(opaq_dst_tid)<0) TEST_ERROR if(H5Tclose(opaq_src_tid)<0) TEST_ERROR if(H5Tclose(little_tid2)<0) TEST_ERROR if(H5Tclose(big_tid2)<0) TEST_ERROR HDfree(bkg); HDfree(buf_orig); HDfree(buf); if(H5Tclose(little_tid)<0) TEST_ERROR if(H5Tclose(big_tid)<0) TEST_ERROR if(H5Tclose(var_string_tid)<0) TEST_ERROR PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_compound_12 * * Purpose: Tests size adjustment of compound data types. Start with * no member and 0 size, increase the size as inserting * members. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Raymond Lu * Wednesday, September 29, 2004 * * Modifications: * *------------------------------------------------------------------------- */ static int test_compound_12(void) { hid_t complex_id; size_t size = 0; size_t offset, new_size, tmp_size; herr_t ret; TESTING("adjust size of compound data types"); /* Create a compound type of minimal size */ if ((complex_id = H5Tcreate(H5T_COMPOUND, 1))<0) goto error; /* Verify the size */ if((new_size=H5Tget_size(complex_id))==0) goto error; if(new_size!=1) goto error; /* Add a couple fields and adjust the size */ offset = size; if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error; size+=tmp_size; if (H5Tset_size(complex_id, size)<0) goto error; if (H5Tinsert(complex_id, "real", offset, H5T_NATIVE_DOUBLE)<0) goto error; offset = size; if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error; size+=tmp_size; if (H5Tset_size(complex_id, size)<0) goto error; if (H5Tinsert(complex_id, "imaginary", offset, H5T_NATIVE_DOUBLE)<0) goto error; /* Increase and decrease the size. */ if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error; size+=tmp_size; if (H5Tset_size(complex_id, size)<0) goto error; if((tmp_size=H5Tget_size(H5T_NATIVE_DOUBLE))==0) goto error; size-=tmp_size; if (H5Tset_size(complex_id, size)<0) goto error; /* Verify the size */ if((new_size=H5Tget_size(complex_id))==0) goto error; if(new_size!=size) goto error; /* Tries to cut last member. Supposed to fail. */ size--; H5E_BEGIN_TRY { ret = H5Tset_size(complex_id, size); } H5E_END_TRY; if(ret>=0) { H5_FAILED(); puts(" Tries to cut off the last member. Should have failed."); goto error; } if (H5Tclose (complex_id)<0) goto error; PASSED(); return 0; error: return 1; } /*------------------------------------------------------------------------- * Function: test_query * * Purpose: Tests query functions of compound and enumeration types. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Raymond Lu * Thursday, April 4, 2002 * * Modifications: * Raymond Lu * Wednesday, Febuary 9, 2005 * Added test for H5Tenum_valueof, H5Tenum_nameof, and * H5Tget_member_value. *------------------------------------------------------------------------- */ static int test_query(void) { struct s1 { int a; float b; long c; double d; }; hid_t file=-1, tid1=-1, tid2=-1; char filename[1024]; char compnd_type[]="Compound_type", enum_type[]="Enum_type"; short enum_val; char enum_name[16]; TESTING("query functions of compound and enumeration types"); /* Create File */ h5_fixname(FILENAME[2], H5P_DEFAULT, filename, sizeof filename); if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error; /* Create a compound datatype */ 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=10,&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=11,&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=12,&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=13,&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=14,&enum_val))<0) { H5_FAILED(); printf("Can't insert field into enumeration type\n"); goto error; } /* end if */ /* Query member number and member index by name, for compound type. */ if(H5Tget_nmembers(tid1)!=4) { H5_FAILED(); printf("Can't get member number\n"); goto error; } /* end if */ if(H5Tget_member_index(tid1, "c")!=2) { H5_FAILED(); printf("Can't get correct index number\n"); goto error; } /* end if */ /* Query member number and member index by member name, for enumeration type. */ if(H5Tget_nmembers(tid2)!=5) { H5_FAILED(); printf("Can't get member number\n"); goto error; } /* end if */ if(H5Tget_member_index(tid2, "ORANGE")!=3) { H5_FAILED(); printf("Can't get correct index number\n"); goto error; } /* end if */ /* Commit compound datatype and close it */ if(H5Tcommit(file, compnd_type, tid1)<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 */ /* Commit enumeration datatype and close it */ if(H5Tcommit(file, enum_type, tid2)<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 */ /* Open the dataytpe for query */ if((tid1=H5Topen(file, compnd_type))<0) { H5_FAILED(); printf("Can't open datatype\n"); goto error; } /* end if */ if((tid2=H5Topen(file, enum_type))<0) { H5_FAILED(); printf("Can't open datatype\n"); goto error; } /* end if */ /* Query member number and member index by name, for compound type */ if(H5Tget_nmembers(tid1)!=4) { H5_FAILED(); printf("Can't get member number\n"); goto error; } /* end if */ if(H5Tget_member_index(tid1, "c")!=2) { H5_FAILED(); printf("Can't get correct index number\n"); goto error; } /* end if */ /* Query member number and member index by member name, for enumeration type */ if(H5Tget_nmembers(tid2)!=5) { H5_FAILED(); printf("Can't get member number\n"); goto error; } /* end if */ if(H5Tget_member_index(tid2, "ORANGE")!=3) { H5_FAILED(); printf("Can't get correct index number\n"); goto error; } /* end if */ /* Query member value by member name, for enumeration type */ if(H5Tenum_valueof (tid2, "ORANGE", &enum_val)<0) { H5_FAILED(); printf("Can't get value for enumerate member\n"); goto error; } /* end if */ if(enum_val!=13) { H5_FAILED(); printf("Incorrect value for enum member\n"); goto error; } /* end if */ /* Query member value by member index, for enumeration type */ if(H5Tget_member_value (tid2, 2, &enum_val)<0) { H5_FAILED(); printf("Can't get value for enum member\n"); goto error; } /* end if */ if(enum_val!=12) { H5_FAILED(); printf("Incorrect value for enum member\n"); goto error; } /* end if */ /* Query member name by member value, for enumeration type */ enum_val = 14; if(H5Tenum_nameof(tid2, &enum_val, enum_name, 16)<0) { H5_FAILED(); printf("Can't get name for enum member\n"); goto error; } /* end if */ if(strcmp("YELLOW", enum_name)) { H5_FAILED(); printf("Incorrect name for enum member\n"); goto error; } /* end if */ /* Close data type 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(H5Fclose(file)<0) { H5_FAILED(); printf("Can't close file\n"); goto error; } /* end if */ PASSED(); return 0; error: H5E_BEGIN_TRY { H5Tclose (tid1); H5Tclose (tid2); H5Fclose (file); } H5E_END_TRY; return 1; } /*------------------------------------------------------------------------- * Function: test_transient * * Purpose: Tests transient data types. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, June 4, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static int test_transient (hid_t fapl) { static hsize_t ds_size[2] = {10, 20}; hid_t file=-1, type=-1, space=-1, dset=-1, t2=-1; char filename[1024]; herr_t status; TESTING("transient data types"); h5_fixname(FILENAME[0], fapl, filename, sizeof filename); if ((file=H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) { goto error; } if ((space = H5Screate_simple (2, ds_size, ds_size))<0) goto error; /* Predefined types cannot be modified or closed */ H5E_BEGIN_TRY { status = H5Tset_precision (H5T_NATIVE_INT, 256); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Predefined types should not be modifiable!"); goto error; } H5E_BEGIN_TRY { status = H5Tclose (H5T_NATIVE_INT); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Predefined types should not be closable!"); goto error; } /* Copying a predefined type results in a modifiable copy */ if ((type=H5Tcopy (H5T_NATIVE_INT))<0) goto error; if (H5Tset_precision (type, 256)<0) goto error; /* It should not be possible to create an attribute for a transient type */ H5E_BEGIN_TRY { status = H5Acreate (type, "attr1", H5T_NATIVE_INT, space, H5P_DEFAULT); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Attributes should not be allowed for transient types!"); goto error; } /* Create a dataset from a transient data type */ if (H5Tclose (type)<0) goto error; if ((type = H5Tcopy (H5T_NATIVE_INT))<0) goto error; if ((dset=H5Dcreate (file, "dset1", type, space, H5P_DEFAULT))<0) goto error; /* The type returned from a dataset should not be modifiable */ if ((t2 = H5Dget_type (dset))<0) goto error; H5E_BEGIN_TRY { status = H5Tset_precision (t2, 256); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Dataset data types should not be modifiable!"); goto error; } if (H5Tclose (t2)<0) goto error; /* * Close the dataset and reopen it, testing that it's type is still * read-only. */ if (H5Dclose (dset)<0) goto error; if ((dset=H5Dopen (file, "dset1"))<0) goto error; if ((t2 = H5Dget_type (dset))<0) goto error; H5E_BEGIN_TRY { status = H5Tset_precision (t2, 256); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Dataset data types should not be modifiable!"); goto error; } if (H5Tclose (t2)<0) goto error; /* * Get the dataset data type by applying H5Tcopy() to the dataset. The * result should be modifiable. */ if ((t2=H5Tcopy (dset))<0) goto error; if (H5Tset_precision (t2, 256)<0) goto error; if (H5Tclose (t2)<0) goto error; H5Dclose (dset); H5Fclose (file); H5Tclose (type); H5Sclose (space); PASSED(); return 0; error: H5E_BEGIN_TRY { H5Tclose (t2); H5Tclose (type); H5Sclose (space); H5Dclose (dset); H5Fclose (file); } H5E_END_TRY; return 1; } /*------------------------------------------------------------------------- * Function: test_named * * Purpose: Tests named data types. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Monday, June 1, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static int test_named (hid_t fapl) { hid_t file=-1, type=-1, space=-1, dset=-1, t2=-1, t3=-1, attr1=-1; herr_t status; static hsize_t ds_size[2] = {10, 20}; hsize_t i,j; unsigned attr_data[10][20]; char filename[1024]; TESTING("named data types"); h5_fixname(FILENAME[1], fapl, filename, sizeof filename); if ((file=H5Fcreate (filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl))<0) { goto error; } if ((space = H5Screate_simple (2, ds_size, ds_size))<0) goto error; /* Predefined types cannot be committed */ H5E_BEGIN_TRY { status = H5Tcommit (file, "test_named_1 (should not exist)", H5T_NATIVE_INT); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Predefined types should not be committable!"); goto error; } /* Copy a predefined data type and commit the copy */ if ((type = H5Tcopy (H5T_NATIVE_INT))<0) goto error; if (H5Tcommit (file, "native-int", type)<0) goto error; if ((status=H5Tcommitted (type))<0) goto error; if (0==status) { H5_FAILED(); HDputs (" H5Tcommitted() returned false!"); goto error; } /* We should not be able to modify a type after it has been committed. */ H5E_BEGIN_TRY { status = H5Tset_precision (type, 256); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Committed type is not constant!"); goto error; } /* We should not be able to re-commit a committed type */ H5E_BEGIN_TRY { status = H5Tcommit(file, "test_named_2 (should not exist)", type); } H5E_END_TRY; if (status>=0) { H5_FAILED(); HDputs (" Committed types should not be recommitted!"); goto error; } /* It should be possible to define an attribute for the named type */ if ((attr1=H5Acreate (type, "attr1", H5T_NATIVE_UCHAR, space, H5P_DEFAULT))<0) goto error; for (i=0; i<ds_size[0]; i++) for (j=0; j<ds_size[1]; j++) attr_data[i][j] = (int)(i*ds_size[1]+j); if (H5Awrite(attr1, H5T_NATIVE_UINT, attr_data)<0) goto error; if (H5Aclose (attr1)<0) goto error; /* * Copying a committed type should result in a transient type which is * not locked. */ if ((t2 = H5Tcopy (type))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (status) { H5_FAILED(); HDputs (" Copying a named type should result in a transient type!"); goto error; } if (H5Tset_precision (t2, 256)<0) goto error; if (H5Tclose (t2)<0) goto error; /* * Close the committed type and reopen it. It should return a named type. */ if (H5Tclose (type)<0) goto error; if ((type=H5Topen (file, "native-int"))<0) goto error; if ((status=H5Tcommitted (type))<0) goto error; if (!status) { H5_FAILED(); HDputs (" Opened named types should be named types!"); goto error; } /* Create a dataset that uses the named type */ if ((dset = H5Dcreate (file, "dset1", type, space, H5P_DEFAULT))<0) { goto error; } /* Get the dataset's data type and make sure it's a named type */ if ((t2 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (!status) { H5_FAILED(); HDputs (" Dataset type should be a named type!"); goto error; } /* Close the dataset, then close its type, then reopen the dataset */ if (H5Dclose (dset)<0) goto error; if (H5Tclose (t2)<0) goto error; if ((dset = H5Dopen (file, "dset1"))<0) goto error; /* Get the dataset's type and make sure it's named */ if ((t2 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (!status) { H5_FAILED(); HDputs (" Dataset type should be a named type!"); goto error; } /* * Close the dataset and create another with the type returned from the * first dataset. */ if (H5Dclose (dset)<0) goto error; if ((dset=H5Dcreate (file, "dset2", t2, space, H5P_DEFAULT))<0) goto error; /* Reopen the second dataset and make sure the type is shared */ if (H5Tclose (t2)<0) goto error; if (H5Dclose (dset)<0) goto error; if ((dset = H5Dopen (file, "dset2"))<0) goto error; if ((t2 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (!status) { H5_FAILED(); HDputs (" Dataset type should be a named type!"); goto error; } if (H5Tclose (t2)<0) goto error; /* * Get the dataset data type by applying H5Tcopy() to the dataset. The * result should be modifiable. */ if ((t2=H5Tcopy (dset))<0) goto error; if (H5Tset_precision (t2, 256)<0) goto error; if (H5Tclose (t2)<0) goto error; if (H5Dclose (dset)<0) goto error; /* * Copy of committed type used as dataset type should not be name type */ if ((t2 = H5Tcopy (type))<0) goto error; if ((status=H5Tcommitted (t2))<0) goto error; if (status) { H5_FAILED(); HDputs (" Copied type should not be a named type!"); goto error; } if ((dset=H5Dcreate (file, "dset3", t2, space, H5P_DEFAULT))<0) goto error; if ((t3 = H5Dget_type (dset))<0) goto error; if ((status=H5Tcommitted (t3))<0) goto error; if (status) { H5_FAILED(); HDputs (" Datatype from dataset using copied type should not be a named type!"); goto error; } if (H5Tclose (t3)<0) goto error; if (H5Dclose (dset)<0) goto error; /* Clean up */ if (H5Tclose (type)<0) goto error; if (H5Sclose (space)<0) goto error; if (H5Fclose (file)<0) goto error; PASSED(); return 0; error: H5E_BEGIN_TRY { H5Tclose (t3); H5Tclose (t2); H5Tclose (type); H5Sclose (space); H5Dclose (dset); H5Fclose (file); } H5E_END_TRY; return 1; } /*------------------------------------------------------------------------- * Function: mkstr * * Purpose: Create a new string data type * * Return: Success: New type * * Failure: -1 * * Programmer: Robb Matzke * Monday, August 10, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static hid_t mkstr(size_t len, H5T_str_t strpad) { hid_t t; if ((t=H5Tcopy(H5T_C_S1))<0) return -1; if (H5Tset_size(t, len)<0) return -1; if (H5Tset_strpad(t, strpad)<0) return -1; return t; } /*------------------------------------------------------------------------- * Function: test_conv_str_1 * * Purpose: Test string conversions * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Monday, August 10, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static int test_conv_str_1(void) { char *buf=NULL; hid_t src_type, dst_type; TESTING("string conversions"); /* * Convert a null-terminated string to a shorter and longer null * terminated string. */ src_type = mkstr(10, H5T_STR_NULLTERM); dst_type = mkstr(5, H5T_STR_NULLTERM); buf = (char*)HDcalloc(2, 10); HDmemcpy(buf, "abcdefghi\0abcdefghi\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd\0abcd\0abcdefghi\0", 20)) { H5_FAILED(); HDputs(" Truncated C-string test failed"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd\0\0\0\0\0\0abcd\0\0\0\0\0\0", 20)) { H5_FAILED(); HDputs(" Extended C-string test failed"); goto error; } HDfree(buf); if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; /* * Convert a null padded string to a shorter and then longer string. */ src_type = mkstr(10, H5T_STR_NULLPAD); dst_type = mkstr(5, H5T_STR_NULLPAD); buf = (char*)HDcalloc(2, 10); HDmemcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdeabcdeabcdefghij", 20)) { H5_FAILED(); HDputs(" Truncated C buffer test failed"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { H5_FAILED(); HDputs(" Extended C buffer test failed"); goto error; } HDfree(buf); if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; /* * Convert a space-padded string to a shorter and then longer string. */ src_type = mkstr(10, H5T_STR_SPACEPAD); dst_type = mkstr(5, H5T_STR_SPACEPAD); buf = (char*)HDcalloc(2, 10); HDmemcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdeabcdeabcdefghij", 20)) { H5_FAILED(); HDputs(" Truncated Fortran-string test failed"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcde abcde ", 20)) { H5_FAILED(); HDputs(" Extended Fortran-string test failed"); goto error; } HDfree(buf); if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; /* * What happens if a null-terminated string is not null terminated? If * the conversion is to an identical string then nothing happens but if * the destination is a different size or type of string then the right * thing should happen. */ src_type = mkstr(10, H5T_STR_NULLTERM); dst_type = mkstr(10, H5T_STR_NULLTERM); buf = (char*)HDcalloc(2, 10); HDmemcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdefghijabcdefghij", 20)) { H5_FAILED(); HDputs(" Non-terminated string test 1"); goto error; } H5Tclose(dst_type); dst_type = mkstr(5, H5T_STR_NULLTERM); HDmemcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd\0abcd\0abcdefghij", 20)) { H5_FAILED(); HDputs(" Non-terminated string test 2"); goto error; } HDmemcpy(buf, "abcdeabcdexxxxxxxxxx", 20); if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { H5_FAILED(); HDputs(" Non-terminated string test 2"); goto error; } HDfree(buf); if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; /* * Test C string to Fortran and vice versa. */ src_type = mkstr(10, H5T_STR_NULLTERM); dst_type = mkstr(10, H5T_STR_SPACEPAD); buf = (char*)HDcalloc(2, 10); HDmemcpy(buf, "abcdefghi\0abcdefghi\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdefghi abcdefghi ", 20)) { H5_FAILED(); HDputs(" C string to Fortran test 1"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdefghi\0abcdefghi\0", 20)) { H5_FAILED(); HDputs(" Fortran to C string test 1"); goto error; } if (H5Tclose(dst_type)<0) goto error; dst_type = mkstr(5, H5T_STR_SPACEPAD); HDmemcpy(buf, "abcdefgh\0\0abcdefgh\0\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdeabcdeabcdefgh\0\0", 20)) { H5_FAILED(); HDputs(" C string to Fortran test 2"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { H5_FAILED(); HDputs(" Fortran to C string test 2"); goto error; } if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; src_type = mkstr(5, H5T_STR_NULLTERM); dst_type = mkstr(10, H5T_STR_SPACEPAD); HDmemcpy(buf, "abcd\0abcd\0xxxxxxxxxx", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd abcd ", 20)) { H5_FAILED(); HDputs(" C string to Fortran test 3"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd\0abcd\0abcd ", 20)) { H5_FAILED(); HDputs(" Fortran to C string test 3"); goto error; } HDfree(buf); if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; /* * Test C buffer to Fortran and vice versa. */ src_type = mkstr(10, H5T_STR_NULLPAD); dst_type = mkstr(10, H5T_STR_SPACEPAD); buf = (char*)HDcalloc(2, 10); HDmemcpy(buf, "abcdefghijabcdefghij", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdefghijabcdefghij", 20)) { H5_FAILED(); HDputs(" C buffer to Fortran test 1"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdefghijabcdefghij", 20)) { H5_FAILED(); HDputs(" Fortran to C buffer test 1"); goto error; } if (H5Tclose(dst_type)<0) goto error; dst_type = mkstr(5, H5T_STR_SPACEPAD); HDmemcpy(buf, "abcdefgh\0\0abcdefgh\0\0", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcdeabcdeabcdefgh\0\0", 20)) { H5_FAILED(); HDputs(" C buffer to Fortran test 2"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcde\0\0\0\0\0abcde\0\0\0\0\0", 20)) { H5_FAILED(); HDputs(" Fortran to C buffer test 2"); goto error; } if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; src_type = mkstr(5, H5T_STR_NULLPAD); dst_type = mkstr(10, H5T_STR_SPACEPAD); HDmemcpy(buf, "abcd\0abcd\0xxxxxxxxxx", 20); if (H5Tconvert(src_type, dst_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd abcd ", 20)) { H5_FAILED(); HDputs(" C buffer to Fortran test 3"); goto error; } if (H5Tconvert(dst_type, src_type, 2, buf, NULL, H5P_DEFAULT)<0) goto error; if (HDmemcmp(buf, "abcd\0abcd\0abcd ", 20)) { H5_FAILED(); HDputs(" Fortran to C buffer test 3"); goto error; } HDfree(buf); if (H5Tclose(src_type)<0) goto error; if (H5Tclose(dst_type)<0) goto error; PASSED(); reset_hdf5(); return 0; error: reset_hdf5(); return 1; } /*------------------------------------------------------------------------- * Function: test_conv_str_2 * * Purpose: Tests C-to-Fortran and Fortran-to-C string conversion speed. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Monday, August 10, 1998 * * Modifications: * *------------------------------------------------------------------------- */ static int test_conv_str_2(void) { char *buf=NULL, s[80]; hid_t c_type, f_type; const size_t nelmts = NTESTELEM, ntests=NTESTS; size_t i, j, nchars; int ret_value = 1; /* * Initialize types and buffer. */ c_type = mkstr(8, H5T_STR_NULLPAD); f_type = mkstr(8, H5T_STR_SPACEPAD); buf = (char*)HDcalloc(nelmts, 8); for (i=0; i<nelmts; i++) { nchars = HDrand() % 8; for (j=0; j<nchars; j++) buf[i*8+j] = 'a' + HDrand()%26; while (j<nchars) buf[i*8+j++] = '\0'; } /* Do the conversions */ for (i=0; i<ntests; i++) { if (ntests>1) { sprintf(s, "Testing random string conversion speed (test %d/%d)", (int)(i+1), (int)ntests); } else { sprintf(s, "Testing random string conversion speed"); } printf("%-70s", s); HDfflush(stdout); if (H5Tconvert(c_type, f_type, nelmts, buf, NULL, H5P_DEFAULT)<0) goto error; if (H5Tconvert(f_type, c_type, nelmts, buf, NULL, H5P_DEFAULT)<0) goto error; PASSED(); } ret_value = 0; error: if (buf) HDfree(buf); reset_hdf5(); return ret_value; } /*------------------------------------------------------------------------- * Function: test_conv_enum_1 * * Purpose: Test conversion speed for enum data types * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, January 5, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_conv_enum_1(void) { const size_t nelmts=NTESTELEM; const int ntests=NTESTS; int i, val, *buf=NULL; hid_t t1, t2; char s[80]; int ret_value = 1; /* Build the data types */ t1 = H5Tcreate(H5T_ENUM, sizeof(int)); t2 = H5Tenum_create(H5T_NATIVE_INT); s[1] = '\0'; for (i=0; i<26; i++) { s[0] = 'A'+i; H5Tenum_insert(t1, s, &i); H5Tenum_insert(t2, s, (val=i*1000+i, &val)); } /* Initialize the buffer */ buf = (int*)HDmalloc(nelmts*MAX(H5Tget_size(t1), H5Tget_size(t2))); for (i=0; i<(int)nelmts; i++) buf[i] = HDrand() % 26; /* Conversions */ for (i=0; i<ntests; i++) { if (ntests>1) { sprintf(s, "Testing random enum conversion O(N) (test %d/%d)", i+1, ntests); } else { sprintf(s, "Testing random enum conversion O(N)"); } printf("%-70s", s); HDfflush(stdout); if (H5Tconvert(t1, t2, nelmts, buf, NULL, H5P_DEFAULT)<0) goto error; PASSED(); } for (i=0; i<ntests; i++) { if (ntests>1) { sprintf(s, "Testing random enum conversion O(N log N) " "(test %d/%d)", i+1, ntests); } else { sprintf(s, "Testing random enum conversion O(N log N)"); } printf("%-70s", s); HDfflush(stdout); if (H5Tconvert(t2, t1, nelmts, buf, NULL, H5P_DEFAULT)<0) goto error; PASSED(); } ret_value = 0; error: H5Tclose(t1); H5Tclose(t2); if (buf) HDfree(buf); reset_hdf5(); return ret_value; } /*------------------------------------------------------------------------- * Function: test_conv_enum_2 * * Purpose: Tests enumeration conversions where source isn't a native type. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke, LLNL, 2003-06-09 * * Modifications: *------------------------------------------------------------------------- */ static int test_conv_enum_2(void) { hid_t srctype=-1, dsttype=-1, oddsize=-1; int *data=NULL, i, nerrors=0; const char *mname[] = { "RED", "GREEN", "BLUE", "YELLOW", "PINK", "PURPLE", "ORANGE", "WHITE" }; TESTING("non-native enumeration type conversion"); /* Source enum type */ oddsize = H5Tcopy(H5T_STD_I32BE); H5Tset_size(oddsize, 3); /*reduce to 24 bits, not corresponding to any native size*/ srctype = H5Tenum_create(oddsize); for (i=7; i>=0; --i) { char pattern[3]; pattern[2] = i; pattern[0] = pattern[1] = 0; H5Tenum_insert(srctype, mname[i], pattern); } /* Destination enum type */ dsttype = H5Tenum_create(H5T_NATIVE_INT); assert(H5Tget_size(dsttype)>H5Tget_size(srctype)); for (i=0; i<8; i++) H5Tenum_insert(dsttype, mname[i], &i); /* Source data */ data = (int*)malloc(NTESTELEM*sizeof(int)); for (i=0; i<NTESTELEM; i++) { ((char*)data)[i*3+2] = i % 8; ((char*)data)[i*3+0] = 0; ((char*)data)[i*3+1] = 0; } /* Convert to destination type */ H5Tconvert(srctype, dsttype, NTESTELEM, data, NULL, H5P_DEFAULT); /* Check results */ for (i=0; i<NTESTELEM; i++) { if (data[i] != i%8) { if (!nerrors++) { H5_FAILED(); printf("element %d is %d but should have been %d\n", i, data[i], i%8); } } } /* Cleanup */ free(data); H5Tclose(srctype); H5Tclose(dsttype); H5Tclose(oddsize); /* Failure */ if (nerrors) { printf("total of %d conversion errors out of %d elements for enums\n", nerrors, NTESTELEM); return 1; } PASSED(); return 0; } /*------------------------------------------------------------------------- * Function: test_conv_bitfield * * Purpose: Test bitfield conversions. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, May 20, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static int test_conv_bitfield(void) { unsigned char buf[4]; hid_t st=-1, dt=-1; TESTING("bitfield conversions"); /* * First test a simple bitfield conversion: * 1010101010101010 * ________________1010101010101010 */ st = H5Tcopy(H5T_STD_B16LE); dt = H5Tcopy(H5T_STD_B32LE); buf[0] = buf[1] = 0xAA; buf[2] = buf[3] = 0x55; /*irrelevant*/ if (H5Tconvert(st, dt, 1, buf, NULL, H5P_DEFAULT)<0) goto error; if (buf[0]!=0xAA || buf[1]!=0xAA || buf[2]!=0 || buf[3]!=0) { H5_FAILED(); printf(" s=0xaaaa, d=0x%02x%02x%02x%02x (test 1)\n", buf[3], buf[2], buf[1], buf[0]); goto error; } /* * Test2: Offset a 12-byte value in the middle of a 16 and 32 byte * field. * __10 1010 1010 10__ * ____ ____ __10 1010 1010 10__ ____ ____ */ H5Tset_precision(st, 12); H5Tset_offset(st, 2); H5Tset_precision(dt, 12); H5Tset_offset(dt, 10); buf[0] = 0xA8; buf[1] = 0x2A; buf[2] = buf[3] = 0; if (H5Tconvert(st, dt, 1, buf, NULL, H5P_DEFAULT)<0) goto error; if (buf[0]!=0 || buf[1]!=0xA8 || buf[2]!=0x2A || buf[3]!=0) { H5_FAILED(); printf(" s=0x2AA8 d=0x%02x%02x%02x%02x (test 2)\n", buf[3], buf[2], buf[1], buf[0]); goto error; } /* * Same as previous test except unused bits of the destination will * be filled with ones. */ H5Tset_pad(dt, H5T_PAD_ONE, H5T_PAD_ONE); buf[0] = 0xA8; buf[1] = 0x2A; buf[2] = buf[3] = 0; if (H5Tconvert(st, dt, 1, buf, NULL, H5P_DEFAULT)<0) goto error; if (buf[0]!=0xff || buf[1]!=0xAB || buf[2]!=0xEA || buf[3]!=0xff) { H5_FAILED(); printf(" s=0x2AA8 d=0x%02x%02x%02x%02x (test 3)\n", buf[3], buf[2], buf[1], buf[0]); goto error; } H5Tclose(st); H5Tclose(dt); PASSED(); reset_hdf5(); return 0; error: H5Tclose(st); H5Tclose(dt); reset_hdf5(); return 1; } /*------------------------------------------------------------------------- * Function: convert_opaque * * Purpose: A fake opaque conversion functions * * Return: Success: 0 * * Failure: -1 * * Programmer: Robb Matzke * Friday, June 4, 1999 * * Modifications: * *------------------------------------------------------------------------- */ static herr_t convert_opaque(hid_t UNUSED st, hid_t UNUSED dt, H5T_cdata_t *cdata, size_t UNUSED nelmts, size_t UNUSED buf_stride, size_t UNUSED bkg_stride, void UNUSED *_buf, void UNUSED *bkg, hid_t UNUSED dset_xfer_plid) { if (H5T_CONV_CONV==cdata->command) num_opaque_conversions_g++; return 0; } /*------------------------------------------------------------------------- * Function: test_opaque * * Purpose: Driver function to test opaque datatypes * * Return: Success: 0 * * Failure: number of errors * * Programmer: Raymond Lu * June 2, 2004 * * Modifications: * *------------------------------------------------------------------------- */ static int test_opaque(void) { int num_errors = 0; TESTING("opaque datatypes"); /* Test opaque types with tags */ num_errors += opaque_check(0); /* Test opaque types without tag */ num_errors += opaque_check(1); /* Test named opaque types with very long tag */ num_errors += opaque_long(); if(num_errors) goto error; PASSED(); return 0; error: H5_FAILED(); return num_errors; } /*------------------------------------------------------------------------- * Function: opaque_check * * Purpose: Test opaque datatypes * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Thursday, May 20, 1999 * * Modifications: * Raymond Lu * June 2, 2004 * Made tag for one opaque type optional. * *------------------------------------------------------------------------- */ static int opaque_check(int tag_it) { #define OPAQUE_NELMTS 1000 hid_t st=-1, dt=-1; herr_t status; char buf[1]; /*not really used*/ int saved; saved = num_opaque_conversions_g = 0; /* Build source and destination types */ if ((st=H5Tcreate(H5T_OPAQUE, 4))<0) goto error; if (H5Tset_tag(st, "opaque source type")<0) goto error; if ((dt=H5Tcreate(H5T_OPAQUE, 4))<0) goto error; if (tag_it) { if (H5Tset_tag(dt, "opaque destination type")<0) goto error; } /* Make sure that we can't convert between the types yet */ H5E_BEGIN_TRY { status = H5Tconvert(st, dt, OPAQUE_NELMTS, buf, NULL, H5P_DEFAULT); } H5E_END_TRY; if (status>=0) { H5_FAILED(); printf(" opaque conversion should have failed but succeeded\n"); goto error; } /* Register a conversion function */ if (H5Tregister(H5T_PERS_HARD, "o_test", st, dt, convert_opaque)<0) goto error; /* Try the conversion again, this time it should work */ if (H5Tconvert(st, dt, OPAQUE_NELMTS, buf, NULL, H5P_DEFAULT)<0) goto error; if (saved+1 != num_opaque_conversions_g) { H5_FAILED(); printf(" unexpected number of opaque conversions\n"); goto error; } /* Unregister conversion function */ if (H5Tunregister(H5T_PERS_HARD, "o_test", st, dt, convert_opaque)<0) goto error; H5Tclose(st); H5Tclose(dt); return 0; error: if (st>0) H5Tclose(st); if (dt>0) H5Tclose(dt); H5_FAILED(); return 1; } /*------------------------------------------------------------------------- * Function: opaque_long * * Purpose: Test named (committed) opaque datatypes w/very long tags * * Return: Success: 0 * * Failure: number of errors * * Programmer: Quincey Koziol * Tuesday, June 14, 2005 * * Modifications: * *------------------------------------------------------------------------- */ static int opaque_long(void) { char *long_tag = NULL; hid_t dt = -1; herr_t ret; /* Build opaque type */ if ((dt=H5Tcreate(H5T_OPAQUE, 4))<0) TEST_ERROR /* Create long tag */ long_tag = HDmalloc(16384+1); HDmemset(long_tag, 'a', 16384); long_tag[16384] = '\0'; /* Set opaque type's tag */ H5E_BEGIN_TRY { ret = H5Tset_tag(dt, long_tag); } H5E_END_TRY; if(ret!=FAIL) TEST_ERROR /* Close datatype */ if(H5Tclose(dt) < 0) TEST_ERROR /* Release memory for tag */ HDfree(long_tag); return 0; error: if (dt>0) H5Tclose(dt); if (long_tag != NULL) HDfree(long_tag); H5_FAILED(); return 1; } /*------------------------------------------------------------------------- * Function: test_encode * * Purpose: Tests functions of encoding and decoding data type. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Raymond Lu * July 14, 2004 * * Modifications: * *------------------------------------------------------------------------- */ static int test_encode(void) { struct s1 { int a; float b; long c; double d; }; hid_t file=-1, tid1=-1, tid2=-1; hid_t decoded_tid1=-1, decoded_tid2=-1; char filename[1024]; 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; TESTING("functions of encoding and decoding data types"); /* Create File */ h5_fixname(FILENAME[5], H5P_DEFAULT, filename, sizeof filename); if((file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error; /*----------------------------------------------------------------------- * Create compound and enumerate data types *----------------------------------------------------------------------- */ /* Create a compound datatype */ 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 data types *----------------------------------------------------------------------- */ /* 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) { H5_FAILED(); printf("Can't decode compound type\n"); goto error; } /* end if */ /* 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 data types *----------------------------------------------------------------------- */ /* Commit compound datatype and close it */ if(H5Tcommit(file, compnd_type, tid1)<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(H5Tcommit(file, enum_type, tid2)<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=H5Topen(file, compnd_type))<0) { H5_FAILED(); printf("Can't open datatype\n"); goto error; } /* end if */ if((tid2=H5Topen(file, enum_type))<0) { H5_FAILED(); printf("Can't open datatype\n"); goto error; } /* end if */ /* 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) { H5_FAILED(); printf("Can't decode compound type\n"); goto error; } /* end if */ /* 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 data types *----------------------------------------------------------------------- */ /* 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 data type 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; } /*------------------------------------------------------------------------- * Function: main * * Purpose: Test the data type interface. * * Return: Success: * * Failure: * * Programmer: Robb Matzke * Tuesday, December 9, 1997 * * Modifications: * *------------------------------------------------------------------------- */ int main(void) { unsigned long nerrors = 0; hid_t fapl=-1; /* Set the random # seed */ HDsrandom((unsigned long)HDtime(NULL)); reset_hdf5(); fapl = h5_fileaccess(); if (ALIGNMENT) printf("Testing non-aligned conversions (ALIGNMENT=%d)....\n", ALIGNMENT); /* Do the tests */ nerrors += test_classes(); nerrors += test_copy(); nerrors += test_detect(); nerrors += test_compound_1(); nerrors += test_query(); nerrors += test_transient (fapl); nerrors += test_named (fapl); nerrors += test_encode(); h5_cleanup(FILENAME, fapl); /*must happen before first reset*/ reset_hdf5(); nerrors += test_conv_str_1(); nerrors += test_conv_str_2(); nerrors += test_compound_2(); nerrors += test_compound_3(); nerrors += test_compound_4(); nerrors += test_compound_5(); nerrors += test_compound_6(); nerrors += test_compound_7(); nerrors += test_compound_8(); nerrors += test_compound_9(); nerrors += test_compound_10(); nerrors += test_compound_11(); nerrors += test_compound_12(); nerrors += test_conv_enum_1(); nerrors += test_conv_enum_2(); nerrors += test_conv_bitfield(); nerrors += test_opaque(); if (nerrors) { printf("***** %lu FAILURE%s! *****\n", nerrors, 1==nerrors?"":"S"); HDexit(1); } printf("All data type tests passed.\n"); return 0; }