diff options
Diffstat (limited to 'test/objcopy.c')
-rwxr-xr-x | test/objcopy.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/test/objcopy.c b/test/objcopy.c index d1f081e..21b4546 100755 --- a/test/objcopy.c +++ b/test/objcopy.c @@ -41,6 +41,11 @@ const char *FILENAME[] = { }; #define FILE_EXT "objcopy_ext.dat" +/* The fill_old.h5 is generated from gen_old_fill.c in HDF5 'test' directory + * for version 1.4(after 1.4.3). To get this data file, simply compile + * gen_old_fill.c with HDF5 library (before v1.5) and run it. */ +#define FILE_OLD_LAYOUT "fill_old.h5" + #define NAME_DATATYPE_SIMPLE "H5T_NATIVE_INT" #define NAME_DATATYPE_SIMPLE2 "H5T_NATIVE_INT-2" @@ -79,6 +84,7 @@ const char *FILENAME[] = { #define NAME_LINK_EXTERN "/g_links/external_link_to_dataset_simple" #define NAME_LINK_SOFT_DANGLE "/g_links/soft_link_to_nowhere" #define NAME_LINK_SOFT_DANGLE2 "/g_links2/soft_link_to_nowhere" +#define NAME_OLD_FORMAT "/dset1" #define NAME_BUF_SIZE 1024 #define NUM_ATTRIBUTES 4 @@ -5490,6 +5496,94 @@ error: /*------------------------------------------------------------------------- + * Function: test_copy_old_layout + * + * Purpose: Copy dataset that uses the "old" layout version (pre version 3) + * format. + * + * Note: This test uses the "fill_old.h5" file for convenience, since it + * has a dataset with the old layout format. + * + * Return: Success: 0 + * Failure: number of errors + * + * Programmer: Quincey Koziol + * Thursday, November 30, 2006 + * + *------------------------------------------------------------------------- + */ +static int +test_copy_old_layout(hid_t fapl) +{ + hid_t fid_src = -1, fid_dst = -1; /* File IDs */ + hid_t did = -1, did2 = -1; /* Dataset IDs */ + char *srcdir = HDgetenv("srcdir"); /* Where the src code is located */ + char src_filename[NAME_BUF_SIZE] = ""; + char dst_filename[NAME_BUF_SIZE]; + + TESTING("H5Ocopy(): dataset with old layout format"); + + /* Generate correct name for source file by prepending the source path */ + if(srcdir && ((HDstrlen(srcdir) + HDstrlen(FILE_OLD_LAYOUT) + 1) < sizeof(src_filename))) { + HDstrcpy(src_filename, srcdir); + HDstrcat(src_filename, "/"); + } /* end if */ + HDstrcat(src_filename, FILE_OLD_LAYOUT); + + /* Initialize the destination filename */ + h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename); + + /* Reset file address checking info */ + addr_reset(); + + /* open source file (read-only) */ + if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR + + /* create destination file */ + if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR + + /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */ + if(H5Gclose(H5Gcreate(fid_dst, NAME_GROUP_UNCOPIED, (size_t)0)) < 0) TEST_ERROR + + /* copy the dataset from SRC to DST */ + if(H5Ocopy(fid_src, NAME_OLD_FORMAT, fid_dst, NAME_DATASET_SIMPLE, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR + + /* open the source dataset */ + if((did = H5Dopen(fid_src, NAME_OLD_FORMAT)) < 0) TEST_ERROR + + /* open the destination dataset */ + if((did2 = H5Dopen(fid_dst, NAME_DATASET_SIMPLE)) < 0) TEST_ERROR + + /* Check if the datasets are equal */ + if(compare_datasets(did, did2, H5P_DEFAULT, NULL) != TRUE) TEST_ERROR + + /* close the destination dataset */ + if(H5Dclose(did2) < 0) TEST_ERROR + + /* close the source dataset */ + if(H5Dclose(did) < 0) TEST_ERROR + + /* close the SRC file */ + if(H5Fclose(fid_src) < 0) TEST_ERROR + + /* close the DST file */ + if(H5Fclose(fid_dst) < 0) TEST_ERROR + + PASSED(); + return 0; + +error: + H5E_BEGIN_TRY { + H5Dclose(did2); + H5Dclose(did); + H5Fclose(fid_dst); + H5Fclose(fid_src); + } H5E_END_TRY; + return 1; +} /* end test_copy_old_layout */ + + +/*------------------------------------------------------------------------- * Function: test_copy_mount * * Purpose: Test copying objects between mounted files @@ -7064,6 +7158,7 @@ main(void) nerrors += test_copy_exist(my_fapl); nerrors += test_copy_path(my_fapl); nerrors += test_copy_same_file_named_datatype(my_fapl); + nerrors += test_copy_old_layout(my_fapl); nerrors += test_copy_option(my_fapl, H5O_COPY_WITHOUT_ATTR_FLAG, FALSE, "H5Ocopy(): without attributes"); nerrors += test_copy_option(my_fapl, 0, TRUE, "H5Ocopy(): with missing groups"); nerrors += test_copy_option(my_fapl, H5O_COPY_EXPAND_SOFT_LINK_FLAG, FALSE, "H5Ocopy(): expand soft link"); |