2003-04-01 01:59:04 +08:00
|
|
|
|
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
2007-02-07 22:56:24 +08:00
|
|
|
|
* Copyright by The HDF Group. *
|
2003-04-01 01:59:04 +08:00
|
|
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
|
|
|
|
* All rights reserved. *
|
|
|
|
|
* *
|
|
|
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
|
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
|
|
|
* the files COPYING and Copyright.html. COPYING can be found at the root *
|
|
|
|
|
* of the source code distribution tree; Copyright.html can be found at the *
|
|
|
|
|
* root level of an installed copy of the electronic HDF5 document set and *
|
|
|
|
|
* is linked from the top-level documents page. It can also be found at *
|
2007-02-07 22:56:24 +08:00
|
|
|
|
* http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
|
|
|
|
|
* access to either file, you may request a copy from help@hdfgroup.org. *
|
2003-04-01 01:59:04 +08:00
|
|
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
|
|
1998-11-25 22:58:22 +08:00
|
|
|
|
/*
|
|
|
|
|
* Programmer: Robb Matzke <matzke@llnl.gov>
|
|
|
|
|
* Tuesday, November 24, 1998
|
|
|
|
|
*/
|
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
#define H5G_PACKAGE /*suppress error about including H5Gpkg */
|
|
|
|
|
|
|
|
|
|
/* Define this macro to indicate that the testing APIs should be available */
|
|
|
|
|
#define H5G_TESTING
|
|
|
|
|
|
|
|
|
|
#include "h5test.h"
|
|
|
|
|
#include "H5Gpkg.h" /* Groups */
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
|
|
|
|
const char *FILENAME[] = {
|
2006-10-02 18:24:03 +08:00
|
|
|
|
"stab",
|
1998-11-25 22:58:22 +08:00
|
|
|
|
NULL
|
|
|
|
|
};
|
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
#define NAME_BUF_SIZE 1024
|
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* Definitions for 'long' test */
|
|
|
|
|
#define LONG_NAME_LEN 40960
|
|
|
|
|
|
|
|
|
|
/* Definitions for 'large' test */
|
|
|
|
|
#define LARGE_NOBJS 5000
|
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
/* Definitions for 'lifecycle' test */
|
|
|
|
|
#define LIFECYCLE_TOP_GROUP "top"
|
|
|
|
|
#define LIFECYCLE_BOTTOM_GROUP "bottom %u"
|
2005-11-16 08:52:42 +08:00
|
|
|
|
#define LIFECYCLE_LOCAL_HEAP_SIZE_HINT 256
|
2005-11-15 10:55:39 +08:00
|
|
|
|
#define LIFECYCLE_MAX_COMPACT 4
|
|
|
|
|
#define LIFECYCLE_MIN_DENSE 3
|
2005-11-16 08:52:42 +08:00
|
|
|
|
#define LIFECYCLE_EST_NUM_ENTRIES 4
|
|
|
|
|
#define LIFECYCLE_EST_NAME_LEN 8
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Definitions for 'long_compact' test */
|
|
|
|
|
#define LONG_COMPACT_LENGTH ((64 * 1024) + 1024)
|
|
|
|
|
|
|
|
|
|
/* Definitions for 'read_old' test */
|
|
|
|
|
#define READ_OLD_NGROUPS 100
|
|
|
|
|
|
|
|
|
|
/* The group_old.h5 is generated from gen_old_fill.c in HDF5 'test' directory
|
|
|
|
|
* for version 1.6. To get this data file, simply compile gen_old_group.c with
|
|
|
|
|
* the HDF5 library in that branch and run it. */
|
2011-03-25 02:33:45 +08:00
|
|
|
|
/* I changed the name "group_old.h5.copy" to "group_old_copy.h5" because OpenVMS
|
|
|
|
|
* doesn't like any file name with more than one ".". SLU 2010/12/13 */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
#define FILE_OLD_GROUPS "group_old.h5"
|
2011-03-25 02:33:45 +08:00
|
|
|
|
#define FILE_OLD_GROUPS_COPY "group_old_copy.h5"
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Definitions for 'no_compact' test */
|
|
|
|
|
#define NO_COMPACT_TOP_GROUP "top"
|
|
|
|
|
#define NO_COMPACT_BOTTOM_GROUP "bottom %u"
|
|
|
|
|
#define NO_COMPACT_MAX_COMPACT 0
|
|
|
|
|
#define NO_COMPACT_MIN_DENSE 0
|
|
|
|
|
|
2007-08-24 04:25:25 +08:00
|
|
|
|
/* Definitions for 'gcpl_on_root' test */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
#define GCPL_ON_ROOT_MIDDLE_GROUP "/middle"
|
|
|
|
|
#define GCPL_ON_ROOT_BOTTOM_GROUP "/middle/bottom"
|
|
|
|
|
#define GCPL_ON_ROOT_MAX_COMPACT 4
|
|
|
|
|
#define GCPL_ON_ROOT_MIN_DENSE 2
|
|
|
|
|
|
2007-08-24 04:25:25 +08:00
|
|
|
|
/* Definitions for 'old_api' test */
|
|
|
|
|
#define OLD_API_GROUP "/old_api"
|
|
|
|
|
|
2009-03-24 02:51:29 +08:00
|
|
|
|
/* Definitions for 'corrupt_stab_msg' test */
|
|
|
|
|
#define CORRUPT_STAB_FILE "corrupt_stab_msg.h5"
|
|
|
|
|
#define CORRUPT_STAB_TMP_FILE "corrupt_stab_msg_tmp.h5"
|
|
|
|
|
#define CORRUPT_STAB_DSET "DS1"
|
|
|
|
|
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: test_misc
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test miscellaneous group stuff.
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: number of errors
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Robb Matzke
|
|
|
|
|
* Tuesday, November 24, 1998
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2006-10-02 18:24:03 +08:00
|
|
|
|
test_misc(hid_t fapl, hbool_t new_format)
|
1998-11-25 22:58:22 +08:00
|
|
|
|
{
|
2006-10-02 18:24:03 +08:00
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t g1 = (-1), g2 = (-1), g3 = (-1);
|
|
|
|
|
char filename[NAME_BUF_SIZE];
|
2002-03-29 03:27:45 +08:00
|
|
|
|
char comment[64];
|
2005-08-14 04:53:35 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(new_format)
|
|
|
|
|
TESTING("miscellaneous group tests (w/new group format)")
|
|
|
|
|
else
|
|
|
|
|
TESTING("miscellaneous group tests")
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
|
|
|
|
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
2002-03-29 03:27:45 +08:00
|
|
|
|
/* Create initial groups for testing, then close */
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((g1 = H5Gcreate2(fid, "test_1a", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
if((g2 = H5Gcreate2(g1, "sub_1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
if((g3 = H5Gcreate2(fid, "test_1b", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
[svn-r14229] Description:
Change H5O[gs]et_comment to H5O[gs]et_comment_by_name and re-add simpler
forms of H5O[gs]et_comment.
Tested on:
FreeBSD/32 6.2 (duty) in debug mode
FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Mac OS X/32 10.4.10 (amazon) in debug mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
2007-11-02 02:24:08 +08:00
|
|
|
|
if(H5Oset_comment(g3, "hello world") < 0) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(g1) < 0) TEST_ERROR
|
|
|
|
|
if(H5Gclose(g2) < 0) TEST_ERROR
|
|
|
|
|
if(H5Gclose(g3) < 0) TEST_ERROR
|
2005-08-14 04:53:35 +08:00
|
|
|
|
|
1998-11-25 22:58:22 +08:00
|
|
|
|
/* Open all groups with absolute names to check for exsistence */
|
2007-08-28 23:02:54 +08:00
|
|
|
|
if((g1 = H5Gopen2(fid, "/test_1a", H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
if((g2 = H5Gopen2(fid, "/test_1a/sub_1", H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
if((g3 = H5Gopen2(fid, "/test_1b", H5P_DEFAULT)) < 0) TEST_ERROR
|
[svn-r14229] Description:
Change H5O[gs]et_comment to H5O[gs]et_comment_by_name and re-add simpler
forms of H5O[gs]et_comment.
Tested on:
FreeBSD/32 6.2 (duty) in debug mode
FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Mac OS X/32 10.4.10 (amazon) in debug mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
2007-11-02 02:24:08 +08:00
|
|
|
|
if(H5Oget_comment_by_name(g3, "././.", comment, sizeof comment, H5P_DEFAULT) < 0) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(HDstrcmp(comment, "hello world")) {
|
2001-01-26 01:03:29 +08:00
|
|
|
|
H5_FAILED();
|
1998-11-25 22:58:22 +08:00
|
|
|
|
puts(" Read the wrong comment string from the group.");
|
|
|
|
|
printf(" got: \"%s\"\n ans: \"hello world\"\n", comment);
|
2006-10-02 18:24:03 +08:00
|
|
|
|
TEST_ERROR
|
1998-11-25 22:58:22 +08:00
|
|
|
|
}
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(g1) < 0) TEST_ERROR
|
|
|
|
|
if(H5Gclose(g2) < 0) TEST_ERROR
|
|
|
|
|
if(H5Gclose(g3) < 0) TEST_ERROR
|
2002-03-29 03:27:45 +08:00
|
|
|
|
|
2004-07-20 08:47:37 +08:00
|
|
|
|
/* Check that creating groups with no-op names isn't allowed */
|
|
|
|
|
H5E_BEGIN_TRY {
|
2007-08-24 04:25:25 +08:00
|
|
|
|
g1 = H5Gcreate2(fid, "/", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
2004-07-20 08:47:37 +08:00
|
|
|
|
} H5E_END_TRY
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(g1 >= 0) TEST_ERROR
|
2004-07-20 08:47:37 +08:00
|
|
|
|
|
|
|
|
|
H5E_BEGIN_TRY {
|
2007-08-24 04:25:25 +08:00
|
|
|
|
g1 = H5Gcreate2(fid, "./././", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
|
2004-07-20 08:47:37 +08:00
|
|
|
|
} H5E_END_TRY
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(g1 >= 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2004-07-20 08:47:37 +08:00
|
|
|
|
|
1998-11-25 22:58:22 +08:00
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(g1);
|
|
|
|
|
H5Gclose(g2);
|
|
|
|
|
H5Gclose(g3);
|
2006-10-02 18:24:03 +08:00
|
|
|
|
H5Fclose(fid);
|
2002-03-29 03:27:45 +08:00
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Purpose: Creates a group with a very long name
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: number of errors
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Robb Matzke <matzke@llnl.gov> 2002-03-28
|
|
|
|
|
*
|
|
|
|
|
* Modifications:
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2006-10-02 18:24:03 +08:00
|
|
|
|
test_long(hid_t fapl, hbool_t new_format)
|
2002-03-29 03:27:45 +08:00
|
|
|
|
{
|
2006-10-02 18:24:03 +08:00
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t g1 = (-1), g2 = (-1);
|
|
|
|
|
char *name1 = NULL, *name2 = NULL;
|
|
|
|
|
char filename[NAME_BUF_SIZE];
|
|
|
|
|
size_t i;
|
2005-08-14 04:53:35 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(new_format)
|
|
|
|
|
TESTING("long names (w/new group format)")
|
|
|
|
|
else
|
|
|
|
|
TESTING("long names")
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
|
|
|
|
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
|
2002-03-29 03:27:45 +08:00
|
|
|
|
|
|
|
|
|
/* Group names */
|
2007-08-25 02:41:29 +08:00
|
|
|
|
name1 = (char *)HDmalloc((size_t)LONG_NAME_LEN);
|
2006-10-02 18:24:03 +08:00
|
|
|
|
for(i = 0; i < LONG_NAME_LEN; i++)
|
2002-05-21 02:43:31 +08:00
|
|
|
|
name1[i] = (char)('A' + i%26);
|
2006-10-02 18:24:03 +08:00
|
|
|
|
name1[LONG_NAME_LEN - 1] = '\0';
|
2007-08-25 02:41:29 +08:00
|
|
|
|
name2 = (char *)HDmalloc((size_t)((2 * LONG_NAME_LEN) + 2));
|
2002-03-29 03:27:45 +08:00
|
|
|
|
sprintf(name2, "%s/%s", name1, name1);
|
|
|
|
|
|
|
|
|
|
/* Create groups */
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((g1 = H5Gcreate2(fid, name1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
if((g2 = H5Gcreate2(g1, name1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(g1) < 0) TEST_ERROR
|
|
|
|
|
if(H5Gclose(g2) < 0) TEST_ERROR
|
2002-03-29 03:27:45 +08:00
|
|
|
|
|
|
|
|
|
/* Open groups */
|
2007-08-28 23:02:54 +08:00
|
|
|
|
if((g1 = H5Gopen2(fid, name1, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
if((g2 = H5Gopen2(fid, name2, H5P_DEFAULT)) < 0) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(g1) < 0) TEST_ERROR
|
|
|
|
|
if(H5Gclose(g2) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2005-08-14 04:53:35 +08:00
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
/* Release name buffers */
|
|
|
|
|
HDfree(name2);
|
|
|
|
|
HDfree(name1);
|
|
|
|
|
|
2002-03-29 03:27:45 +08:00
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
error:
|
2002-03-29 03:27:45 +08:00
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(g1);
|
|
|
|
|
H5Gclose(g2);
|
2006-10-02 18:24:03 +08:00
|
|
|
|
H5Fclose(fid);
|
2006-10-31 08:13:27 +08:00
|
|
|
|
HDfree(name2);
|
|
|
|
|
HDfree(name1);
|
1998-11-25 22:58:22 +08:00
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
2006-10-02 18:24:03 +08:00
|
|
|
|
} /* end test_long() */
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: test_large
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Creates a really large directory.
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: number of errors
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Robb Matzke
|
|
|
|
|
* robb@maya.nuance.com
|
|
|
|
|
* Aug 29 1997
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2006-10-02 18:24:03 +08:00
|
|
|
|
test_large(hid_t fapl, hbool_t new_format)
|
1998-11-25 22:58:22 +08:00
|
|
|
|
{
|
2006-10-02 18:24:03 +08:00
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t cwg = (-1), dir = (-1); /* Group IDs */
|
|
|
|
|
char filename[NAME_BUF_SIZE];
|
|
|
|
|
char name[NAME_BUF_SIZE];
|
|
|
|
|
int i;
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(new_format)
|
|
|
|
|
TESTING("large directories (w/new group format)")
|
|
|
|
|
else
|
|
|
|
|
TESTING("large directories")
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
|
|
|
|
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* Create a directory that has so many entries that the root
|
|
|
|
|
* of the B-tree ends up splitting.
|
|
|
|
|
*/
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((cwg = H5Gcreate2(fid, "/big", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(new_format)
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__has_stab_test(cwg) != FALSE) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
for(i = 0; i < LARGE_NOBJS; i++) {
|
|
|
|
|
sprintf(name, "%05d%05d", (HDrandom() % 100000), i);
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((dir = H5Gcreate2(cwg, name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(dir) < 0) TEST_ERROR
|
1998-11-25 22:58:22 +08:00
|
|
|
|
}
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(new_format)
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_new_dense_test(cwg) != TRUE) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(cwg) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(dir);
|
|
|
|
|
H5Gclose(cwg);
|
2006-10-02 18:24:03 +08:00
|
|
|
|
H5Fclose(fid);
|
1998-11-25 22:58:22 +08:00
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
2006-10-02 18:24:03 +08:00
|
|
|
|
} /* end test_large() */
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: lifecycle
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test that adding links to a group follow proper "lifecycle"
|
|
|
|
|
* of empty->compact->symbol table->compact->empty. (As group
|
|
|
|
|
* is created, links are added, then links removed)
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Quincey Koziol
|
|
|
|
|
* Monday, October 17, 2005
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2007-08-24 04:25:25 +08:00
|
|
|
|
lifecycle(hid_t fapl2)
|
2005-11-15 10:55:39 +08:00
|
|
|
|
{
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t gid = (-1); /* Group ID */
|
|
|
|
|
hid_t gid2 = (-1); /* Datatype ID */
|
|
|
|
|
hid_t gcpl = (-1); /* Group creation property list ID */
|
|
|
|
|
size_t lheap_size_hint; /* Local heap size hint */
|
|
|
|
|
unsigned max_compact; /* Maximum # of links to store in group compactly */
|
|
|
|
|
unsigned min_dense; /* Minimum # of links to store in group "densely" */
|
|
|
|
|
unsigned est_num_entries; /* Estimated # of entries in group */
|
|
|
|
|
unsigned est_name_len; /* Estimated length of entry name */
|
|
|
|
|
unsigned nmsgs; /* Number of messages in group's header */
|
2007-09-13 23:44:56 +08:00
|
|
|
|
H5O_info_t oinfo; /* Object info */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
char objname[NAME_BUF_SIZE]; /* Object name */
|
2006-06-27 22:45:06 +08:00
|
|
|
|
char filename[NAME_BUF_SIZE];
|
2006-11-08 04:19:41 +08:00
|
|
|
|
h5_stat_size_t empty_size; /* Size of an empty file */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
unsigned u; /* Local index variable */
|
2006-11-08 04:19:41 +08:00
|
|
|
|
h5_stat_size_t file_size; /* Size of each file created */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
TESTING("group lifecycle");
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename));
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Get size of file as empty */
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
if((empty_size = h5_get_file_size(filename, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Re-open file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Set up group creation property list */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Query default group creation property settings */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR
|
|
|
|
|
if(lheap_size_hint != H5G_CRT_GINFO_LHEAP_SIZE_HINT) TEST_ERROR
|
|
|
|
|
if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR
|
|
|
|
|
if(max_compact != H5G_CRT_GINFO_MAX_COMPACT) TEST_ERROR
|
|
|
|
|
if(min_dense != H5G_CRT_GINFO_MIN_DENSE) TEST_ERROR
|
|
|
|
|
if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR
|
|
|
|
|
if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES) TEST_ERROR
|
|
|
|
|
if(est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Set GCPL parameters */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pset_local_heap_size_hint(gcpl, (size_t)LIFECYCLE_LOCAL_HEAP_SIZE_HINT) < 0) TEST_ERROR
|
|
|
|
|
if(H5Pset_link_phase_change(gcpl, LIFECYCLE_MAX_COMPACT, LIFECYCLE_MIN_DENSE) < 0) TEST_ERROR
|
|
|
|
|
if(H5Pset_est_link_info(gcpl, LIFECYCLE_EST_NUM_ENTRIES, LIFECYCLE_EST_NAME_LEN) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create group for testing lifecycle */
|
2007-04-12 00:22:16 +08:00
|
|
|
|
if((gid = H5Gcreate2(fid, LIFECYCLE_TOP_GROUP, H5P_DEFAULT, gcpl, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2005-11-16 08:52:42 +08:00
|
|
|
|
/* Query group creation property settings */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pget_local_heap_size_hint(gcpl, &lheap_size_hint) < 0) TEST_ERROR
|
|
|
|
|
if(lheap_size_hint != LIFECYCLE_LOCAL_HEAP_SIZE_HINT) TEST_ERROR
|
|
|
|
|
if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR
|
|
|
|
|
if(max_compact != LIFECYCLE_MAX_COMPACT) TEST_ERROR
|
|
|
|
|
if(min_dense != LIFECYCLE_MIN_DENSE) TEST_ERROR
|
|
|
|
|
if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR
|
|
|
|
|
if(est_num_entries != LIFECYCLE_EST_NUM_ENTRIES) TEST_ERROR
|
|
|
|
|
if(est_name_len != LIFECYCLE_EST_NAME_LEN) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Use internal testing routine to check that the group has no links or symbol table */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create first "bottom" group */
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, (unsigned)0);
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) == TRUE) TEST_ERROR
|
|
|
|
|
if(H5G__has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(nmsgs != 1) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create several more bottom groups, to push the top group almost to a symbol table */
|
|
|
|
|
/* (Start counting at '1', since we've already created one bottom group */
|
|
|
|
|
for(u = 1; u < LIFECYCLE_MAX_COMPACT; u++) {
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u);
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
} /* end for */
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) == TRUE) TEST_ERROR
|
|
|
|
|
if(H5G__has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(nmsgs != LIFECYCLE_MAX_COMPACT) TEST_ERROR
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_new_dense_test(gid) != FALSE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2005-11-16 08:52:42 +08:00
|
|
|
|
/* Check that the object header is only one chunk and the space has been allocated correctly */
|
[svn-r14225] Description:
Change H5Oget_info -> H5Oget_info_by_name and re-add H5Oget_info in a
simpler form for querying a particular object, to align with other new API
routines.
Tested on:
FreeBSD/32 6.2 (duty) in debug mode
FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Mac OS X/32 10.4.10 (amazon) in debug mode
2007-10-31 21:13:40 +08:00
|
|
|
|
if(H5Oget_info(gid, &oinfo) < 0) TEST_ERROR
|
2007-09-13 23:44:56 +08:00
|
|
|
|
if(oinfo.hdr.space.total != 151) TEST_ERROR
|
|
|
|
|
if(oinfo.hdr.space.free != 0) TEST_ERROR
|
|
|
|
|
if(oinfo.hdr.nmesgs != 6) TEST_ERROR
|
|
|
|
|
if(oinfo.hdr.nchunks != 1) TEST_ERROR
|
2005-11-16 08:52:42 +08:00
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
/* Create one more "bottom" group, which should push top group into using a symbol table */
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u);
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-16 08:52:42 +08:00
|
|
|
|
|
|
|
|
|
/* Check that the object header is still one chunk and the space has been allocated correctly */
|
[svn-r14225] Description:
Change H5Oget_info -> H5Oget_info_by_name and re-add H5Oget_info in a
simpler form for querying a particular object, to align with other new API
routines.
Tested on:
FreeBSD/32 6.2 (duty) in debug mode
FreeBSD/64 6.2 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/default API=1.6.x, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Mac OS X/32 10.4.10 (amazon) in debug mode
2007-10-31 21:13:40 +08:00
|
|
|
|
if(H5Oget_info(gid, &oinfo) < 0) TEST_ERROR
|
2007-09-13 23:44:56 +08:00
|
|
|
|
if(oinfo.hdr.space.total != 151) TEST_ERROR
|
|
|
|
|
if(oinfo.hdr.space.free != 92) TEST_ERROR
|
|
|
|
|
if(oinfo.hdr.nmesgs != 3) TEST_ERROR
|
|
|
|
|
if(oinfo.hdr.nchunks != 1) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink objects from top group */
|
|
|
|
|
while(u >= LIFECYCLE_MIN_DENSE) {
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u);
|
|
|
|
|
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
u--;
|
|
|
|
|
} /* end while */
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink one more object from the group, which should transform back to using links */
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u);
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
u--;
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) == TRUE) TEST_ERROR
|
|
|
|
|
if(H5G__has_links_test(gid, &nmsgs) != TRUE) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(nmsgs != (LIFECYCLE_MIN_DENSE - 1)) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink last two objects from top group */
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u);
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
u--;
|
|
|
|
|
sprintf(objname, LIFECYCLE_BOTTOM_GROUP, u);
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close top group */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(gid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink top group */
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(fid, LIFECYCLE_TOP_GROUP, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close GCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(gcpl) < 0) TEST_ERROR
|
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
/* Close file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Get size of file as empty */
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
if((file_size = h5_get_file_size(filename, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Verify that file is correct size */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(file_size != empty_size) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(gcpl);
|
|
|
|
|
H5Gclose(gid2);
|
|
|
|
|
H5Gclose(gid);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
|
|
|
|
} /* end lifecycle() */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: long_compact
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test that long links are correctly _not_ put into compact
|
|
|
|
|
* form.
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Quincey Koziol
|
|
|
|
|
* Tuesday, October 18, 2005
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2007-08-24 04:25:25 +08:00
|
|
|
|
long_compact(hid_t fapl2)
|
2005-11-15 10:55:39 +08:00
|
|
|
|
{
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t gid = (-1); /* Group ID */
|
|
|
|
|
hid_t gid2 = (-1); /* Group ID */
|
2013-02-02 09:53:32 +08:00
|
|
|
|
char *objname = NULL; /* Object name */
|
2006-06-27 22:45:06 +08:00
|
|
|
|
char filename[NAME_BUF_SIZE];
|
2006-11-08 04:19:41 +08:00
|
|
|
|
h5_stat_size_t empty_size; /* Size of an empty file */
|
|
|
|
|
h5_stat_size_t file_size; /* Size of each file created */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
TESTING("long link names in compact groups");
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename));
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Get size of file as empty */
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
if((empty_size = h5_get_file_size(filename, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Construct very long object name template */
|
2013-02-02 09:53:32 +08:00
|
|
|
|
if(NULL == (objname = (char *)HDmalloc((size_t)(LONG_COMPACT_LENGTH + 1)))) TEST_ERROR
|
2006-10-02 18:24:03 +08:00
|
|
|
|
HDmemset(objname, 'a', (size_t)LONG_COMPACT_LENGTH);
|
2005-11-15 10:55:39 +08:00
|
|
|
|
objname[LONG_COMPACT_LENGTH] = '\0';
|
|
|
|
|
|
|
|
|
|
/* Re-open file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create top group */
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid = H5Gcreate2(fid, "top", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* Use internal testing routine to check that the group has no links or dense storage */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create first group with "long" name */
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* (Should have dense storage to hold links, since name is too long for object header message) */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create second group with "long" name */
|
|
|
|
|
objname[0] = 'b';
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* (Should have dense storage to hold links, since name is too long for object header message) */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink second object from top group */
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* (Should still be dense storage to hold links, since name is too long for object header message) */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink first object from top group */
|
|
|
|
|
objname[0] = 'a';
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* (Should have deleted the dense storage now) */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Free object name */
|
|
|
|
|
HDfree(objname);
|
2013-02-02 09:53:32 +08:00
|
|
|
|
objname = NULL;
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close top group */
|
|
|
|
|
if(H5Gclose(gid) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Unlink top group */
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(fid, "top", H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Get size of file as empty */
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
if((file_size = h5_get_file_size(filename, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Verify that file is correct size */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(file_size != empty_size) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(gid2);
|
|
|
|
|
H5Gclose(gid);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
2013-02-02 09:53:32 +08:00
|
|
|
|
|
|
|
|
|
if(objname)
|
|
|
|
|
HDfree(objname);
|
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
return 1;
|
|
|
|
|
} /* end long_compact() */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: read_old
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test reading a file with "old style" (symbol table) groups
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Quincey Koziol
|
|
|
|
|
* Monday, October 24, 2005
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
[svn-r15868] Description:
Correct a minor error in file free space allocation which was affecting
the 'multi' VFD and preventing some tests from fully working with it.
Wholesale revisitation of all the places where tests were disabled
with various VFDs and remove or correct all these so that _only_ the tests
which _really_ can't work with particular VFDs are skipped during a
'make check-vfd' test.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-15 09:46:34 +08:00
|
|
|
|
read_old(void)
|
2005-11-15 10:55:39 +08:00
|
|
|
|
{
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t gid = (-1); /* Group ID */
|
|
|
|
|
hid_t gid2 = (-1); /* Group ID */
|
|
|
|
|
char objname[NAME_BUF_SIZE]; /* Object name */
|
|
|
|
|
unsigned u; /* Local index variable */
|
|
|
|
|
|
|
|
|
|
TESTING("reading old groups");
|
|
|
|
|
|
2009-10-20 23:08:56 +08:00
|
|
|
|
/* Make a copy of the data file from svn. */
|
|
|
|
|
if(h5_make_local_copy(FILE_OLD_GROUPS, FILE_OLD_GROUPS_COPY) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2009-10-20 23:08:56 +08:00
|
|
|
|
/* Open copied file */
|
|
|
|
|
if((fid = H5Fopen(FILE_OLD_GROUPS_COPY, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Attempt to open "old" group */
|
2007-08-28 23:02:54 +08:00
|
|
|
|
if((gid = H5Gopen2(fid, "old", H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on old group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) == FALSE) TEST_ERROR
|
|
|
|
|
if(H5G__has_links_test(gid, NULL) == TRUE) TEST_ERROR
|
|
|
|
|
if(H5G__has_stab_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create a bunch of objects in the group */
|
|
|
|
|
for(u = 0; u < READ_OLD_NGROUPS; u++) {
|
|
|
|
|
sprintf(objname, "Group %u", u);
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
} /* end for */
|
|
|
|
|
|
|
|
|
|
/* Check on old group's status */
|
|
|
|
|
/* (Should stay in old "symbol table" form) */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Delete new objects from old group */
|
|
|
|
|
for(u = 0; u < READ_OLD_NGROUPS; u++) {
|
|
|
|
|
sprintf(objname, "Group %u", u);
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
} /* end for */
|
|
|
|
|
|
|
|
|
|
/* Check on old group's status */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* (Should stay in old "symbol table" form, but have no links) */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) == FALSE) TEST_ERROR
|
|
|
|
|
if(H5G__has_links_test(gid, NULL) == TRUE) TEST_ERROR
|
|
|
|
|
if(H5G__has_stab_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close old group */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(gid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close first file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Fclose(fid)<0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(gid);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
|
|
|
|
} /* end read_old() */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: no_compact
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test that its possible to create groups that don't use the
|
|
|
|
|
* compact form directly (and don't use link messages).
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Quincey Koziol
|
|
|
|
|
* Tuesday, October 25, 2005
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2007-08-24 04:25:25 +08:00
|
|
|
|
no_compact(hid_t fapl2)
|
2005-11-15 10:55:39 +08:00
|
|
|
|
{
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t gid = (-1); /* Group ID */
|
|
|
|
|
hid_t gid2 = (-1); /* Datatype ID */
|
|
|
|
|
hid_t gcpl = (-1); /* Group creation property list ID */
|
|
|
|
|
char objname[NAME_BUF_SIZE]; /* Object name */
|
2006-06-27 22:45:06 +08:00
|
|
|
|
char filename[NAME_BUF_SIZE];
|
2006-11-08 04:19:41 +08:00
|
|
|
|
h5_stat_size_t empty_size; /* Size of an empty file */
|
|
|
|
|
h5_stat_size_t file_size; /* Size of each file created */
|
2005-11-16 08:52:42 +08:00
|
|
|
|
unsigned est_num_entries; /* Estimated # of entries in group */
|
|
|
|
|
unsigned est_name_len; /* Estimated length of entry name */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
TESTING("group without compact form");
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename));
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Get size of file as empty */
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
if((empty_size = h5_get_file_size(filename, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Re-open file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((fid = H5Fopen(filename, H5F_ACC_RDWR, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Set up group creation property list */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((gcpl = H5Pcreate(H5P_GROUP_CREATE)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Set GCPL parameters */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pset_link_phase_change(gcpl, NO_COMPACT_MAX_COMPACT, NO_COMPACT_MIN_DENSE) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* Check information for default group creation */
|
|
|
|
|
if(H5Pget_est_link_info(gcpl, &est_num_entries, &est_name_len) < 0) TEST_ERROR
|
|
|
|
|
if(est_num_entries != H5G_CRT_GINFO_EST_NUM_ENTRIES) TEST_ERROR
|
|
|
|
|
if(est_name_len != H5G_CRT_GINFO_EST_NAME_LEN) TEST_ERROR
|
2005-11-16 08:52:42 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* Create group for testing no compact form */
|
2007-04-12 00:22:16 +08:00
|
|
|
|
if((gid = H5Gcreate2(fid, NO_COMPACT_TOP_GROUP, H5P_DEFAULT, gcpl, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close GCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(gcpl) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
/* Use internal testing routine to check that the group has no links or dense storage */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create first "bottom" group */
|
|
|
|
|
sprintf(objname, NO_COMPACT_BOTTOM_GROUP, (unsigned)0);
|
2007-08-24 04:25:25 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, objname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on bottom group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid2) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
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
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink object from top group */
|
|
|
|
|
sprintf(objname, NO_COMPACT_BOTTOM_GROUP, (unsigned)0);
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(gid, objname, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Check on top group's status */
|
2012-02-10 10:16:52 +08:00
|
|
|
|
if(H5G__is_empty_test(gid) != TRUE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close top group */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(gid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Unlink top group */
|
2007-08-30 04:44:19 +08:00
|
|
|
|
if(H5Ldelete(fid, NO_COMPACT_TOP_GROUP, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Get size of file as empty */
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
if((file_size = h5_get_file_size(filename, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Verify that file is correct size */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(file_size != empty_size) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(gcpl);
|
|
|
|
|
H5Gclose(gid2);
|
|
|
|
|
H5Gclose(gid);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
|
|
|
|
} /* end no_compact() */
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: gcpl_on_root
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test setting group creation properties for root group.
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
*
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Quincey Koziol
|
|
|
|
|
* Tuesday, October 25, 2005
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
2007-08-24 04:25:25 +08:00
|
|
|
|
gcpl_on_root(hid_t fapl2)
|
2005-11-15 10:55:39 +08:00
|
|
|
|
{
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t gid = (-1); /* Group ID */
|
|
|
|
|
hid_t gid2 = (-1); /* Datatype ID */
|
|
|
|
|
hid_t fcpl = (-1); /* File creation property list ID */
|
|
|
|
|
hid_t gcpl = (-1); /* Group creation property list ID */
|
2006-08-02 23:59:05 +08:00
|
|
|
|
hid_t lcpl = (-1); /* Link creation property list ID */
|
2005-11-15 10:55:39 +08:00
|
|
|
|
unsigned max_compact; /* Maximum # of links to store in group compactly */
|
|
|
|
|
unsigned min_dense; /* Minimum # of links to store in group "densely" */
|
2006-06-27 22:45:06 +08:00
|
|
|
|
char filename[NAME_BUF_SIZE];
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
TESTING("setting root group creation properties");
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
h5_fixname(FILENAME[0], fapl2, filename, sizeof(filename));
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Set up file creation property list */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((fcpl = H5Pcreate(H5P_FILE_CREATE)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Set GCPL parameters */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pset_link_phase_change(fcpl, GCPL_ON_ROOT_MAX_COMPACT, GCPL_ON_ROOT_MIN_DENSE) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Query the group creation properties from the FCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pget_link_phase_change(fcpl, &max_compact, &min_dense) < 0) TEST_ERROR
|
|
|
|
|
if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR
|
|
|
|
|
if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create file with modified root group creation properties */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl2)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close FCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(fcpl) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Open the root group */
|
2007-08-28 23:02:54 +08:00
|
|
|
|
if((gid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Query the group creation properties */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((gcpl = H5Gget_create_plist(gid)) < 0) TEST_ERROR
|
|
|
|
|
if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR
|
|
|
|
|
if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR
|
|
|
|
|
if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close GCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(gcpl) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2006-08-02 23:59:05 +08:00
|
|
|
|
/* Create a link creation property list, with intermediate group creation set */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((lcpl = H5Pcreate(H5P_LINK_CREATE)) < 0) TEST_ERROR
|
2006-08-02 23:59:05 +08:00
|
|
|
|
if(H5Pset_create_intermediate_group(lcpl, TRUE) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Create a group and intermediate groups, to check if root group settings are inherited */
|
2007-04-12 00:22:16 +08:00
|
|
|
|
if((gid2 = H5Gcreate2(gid, GCPL_ON_ROOT_BOTTOM_GROUP, lcpl, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
2006-08-02 23:59:05 +08:00
|
|
|
|
/* Close LCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(lcpl) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Query the group creation properties */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((gcpl = H5Gget_create_plist(gid2)) < 0) TEST_ERROR
|
|
|
|
|
if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR
|
|
|
|
|
if(max_compact != H5G_CRT_GINFO_MAX_COMPACT) TEST_ERROR
|
|
|
|
|
if(min_dense != H5G_CRT_GINFO_MIN_DENSE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close GCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(gcpl) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Open the middle group */
|
2007-08-28 23:02:54 +08:00
|
|
|
|
if((gid2 = H5Gopen2(fid, GCPL_ON_ROOT_MIDDLE_GROUP, H5P_DEFAULT)) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Query the group creation properties */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if((gcpl = H5Gget_create_plist(gid2)) < 0) TEST_ERROR
|
|
|
|
|
if(H5Pget_link_phase_change(gcpl, &max_compact, &min_dense) < 0) TEST_ERROR
|
|
|
|
|
if(max_compact != GCPL_ON_ROOT_MAX_COMPACT) TEST_ERROR
|
|
|
|
|
if(min_dense != GCPL_ON_ROOT_MIN_DENSE) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close GCPL */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Pclose(gcpl) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close bottom group */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(gid2) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
/* Close root group */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Gclose(gid) < 0) TEST_ERROR
|
|
|
|
|
|
2005-11-15 10:55:39 +08:00
|
|
|
|
/* Close file */
|
2006-10-02 18:24:03 +08:00
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
2005-11-15 10:55:39 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
2006-08-02 23:59:05 +08:00
|
|
|
|
H5Gclose(lcpl);
|
2005-11-15 10:55:39 +08:00
|
|
|
|
H5Gclose(gcpl);
|
|
|
|
|
H5Gclose(gid2);
|
|
|
|
|
H5Gclose(gid);
|
|
|
|
|
H5Gclose(fcpl);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
|
|
|
|
} /* end gcpl_on_root() */
|
|
|
|
|
|
2007-08-24 04:25:25 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: old_api
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test old API routines
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Quincey Koziol
|
|
|
|
|
* Thursday, August 23, 2007
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
old_api(hid_t fapl)
|
2007-08-24 04:25:25 +08:00
|
|
|
|
{
|
|
|
|
|
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t gid = (-1); /* Group ID */
|
|
|
|
|
h5_stat_size_t small_file_size; /* Size of small group file */
|
|
|
|
|
h5_stat_size_t large_file_size; /* Size of large group file */
|
|
|
|
|
char filename[NAME_BUF_SIZE];
|
|
|
|
|
#endif /* H5_NO_DEPRECATED_SYMBOLS */
|
|
|
|
|
|
|
|
|
|
TESTING("old API routines");
|
|
|
|
|
|
|
|
|
|
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
|
|
|
|
/* Create file */
|
|
|
|
|
h5_fixname(FILENAME[0], fapl, filename, sizeof(filename));
|
|
|
|
|
|
|
|
|
|
/* Create file */
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
|
|
|
|
/* Create a group, with the old API routine and a "small" heap */
|
|
|
|
|
if((gid = H5Gcreate1(fid, OLD_API_GROUP, (size_t)0)) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close group */
|
|
|
|
|
if(H5Gclose(gid) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
/* Get the size of the file with a "small" heap for group */
|
|
|
|
|
if((small_file_size = h5_get_file_size(filename, fapl)) < 0) TEST_ERROR
|
2007-08-25 02:41:29 +08:00
|
|
|
|
|
2007-08-24 04:25:25 +08:00
|
|
|
|
|
|
|
|
|
/* Create file */
|
|
|
|
|
if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
|
|
|
|
/* Create a group, with the old API routine and a "large" heap */
|
|
|
|
|
if((gid = H5Gcreate1(fid, OLD_API_GROUP, (size_t)10000)) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close group */
|
|
|
|
|
if(H5Gclose(gid) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
2007-08-28 23:02:54 +08:00
|
|
|
|
/* Re-open group */
|
|
|
|
|
if((gid = H5Gopen1(fid, OLD_API_GROUP)) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close group */
|
|
|
|
|
if(H5Gclose(gid) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
2007-08-24 04:25:25 +08:00
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
|
|
|
|
|
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
/* Get the size of the file with a "large" heap for group */
|
|
|
|
|
if((large_file_size = h5_get_file_size(filename, fapl)) < 0) TEST_ERROR
|
2007-08-24 04:25:25 +08:00
|
|
|
|
|
[svn-r15825] Description:
Fix various problems with a the core & sec2 VFDs.
Improve the h5_get_file_size() routine to handle files created with
VFDs that use multiple files.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-09 11:44:22 +08:00
|
|
|
|
/* Check that the file with a "large" group heap is actually bigger */
|
|
|
|
|
if(large_file_size <= small_file_size) TEST_ERROR
|
2007-08-24 04:25:25 +08:00
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
#else /* H5_NO_DEPRECATED_SYMBOLS */
|
|
|
|
|
/* Shut compiler up */
|
|
|
|
|
fapl = fapl;
|
|
|
|
|
|
|
|
|
|
SKIPPED();
|
|
|
|
|
puts(" Deprecated API symbols not enabled");
|
|
|
|
|
#endif /* H5_NO_DEPRECATED_SYMBOLS */
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
#ifndef H5_NO_DEPRECATED_SYMBOLS
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Gclose(gid);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
return 1;
|
|
|
|
|
#endif /* H5_NO_DEPRECATED_SYMBOLS */
|
|
|
|
|
} /* end old_api() */
|
|
|
|
|
|
2009-03-24 02:51:29 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: corrupt_stab_msg
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test that a corrupt symbol table message can be fixed
|
|
|
|
|
* using the cached symbol table information.
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: 0
|
|
|
|
|
* Failure: -1
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Neil Fortner
|
|
|
|
|
* Wednesday, March 18, 2009
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
static int
|
|
|
|
|
corrupt_stab_msg(void)
|
|
|
|
|
{
|
|
|
|
|
hid_t fid = (-1); /* File ID */
|
|
|
|
|
hid_t did = (-1); /* Dataset ID */
|
|
|
|
|
|
|
|
|
|
TESTING("corrupt symbol table message");
|
|
|
|
|
|
2009-10-20 23:08:56 +08:00
|
|
|
|
/* Make a copy of the data file from svn. */
|
|
|
|
|
if(h5_make_local_copy(CORRUPT_STAB_FILE, CORRUPT_STAB_TMP_FILE) < 0) TEST_ERROR
|
2009-03-24 02:51:29 +08:00
|
|
|
|
|
|
|
|
|
#ifndef H5_STRICT_FORMAT_CHECKS
|
|
|
|
|
/* Open temp file through HDF5 library */
|
|
|
|
|
if((fid = H5Fopen(CORRUPT_STAB_TMP_FILE, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Open dataset */
|
|
|
|
|
if((did = H5Dopen2(fid, CORRUPT_STAB_DSET, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close dataset and file */
|
|
|
|
|
if(H5Dclose(did) < 0) TEST_ERROR
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Now reopen with read only access. This verifies that the issue has been
|
|
|
|
|
* corrected, as the symbol table message is not patched in read only mode.
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/* Open file */
|
|
|
|
|
if((fid = H5Fopen(CORRUPT_STAB_TMP_FILE, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Open dataset */
|
|
|
|
|
if((did = H5Dopen2(fid, CORRUPT_STAB_DSET, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close dataset and file */
|
|
|
|
|
if(H5Dclose(did) < 0) TEST_ERROR
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
#else /* H5_STRICT_FORMAT_CHECKS */
|
|
|
|
|
/* Open file */
|
|
|
|
|
if((fid = H5Fopen(CORRUPT_STAB_TMP_FILE, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Verify that an error is thrown when we try to access the dataset */
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
did = H5Dopen2(fid, CORRUPT_STAB_DSET, H5P_DEFAULT);
|
|
|
|
|
} H5E_END_TRY
|
|
|
|
|
if(did >= 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Close file */
|
|
|
|
|
if(H5Fclose(fid) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
#endif /* H5_STRICT_FORMAT_CHECKS */
|
|
|
|
|
|
|
|
|
|
PASSED();
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
error:
|
|
|
|
|
H5E_BEGIN_TRY {
|
|
|
|
|
H5Dclose(did);
|
|
|
|
|
H5Fclose(fid);
|
|
|
|
|
} H5E_END_TRY;
|
|
|
|
|
|
|
|
|
|
return 1;
|
|
|
|
|
} /* end old_api() */
|
|
|
|
|
|
1998-11-25 22:58:22 +08:00
|
|
|
|
|
|
|
|
|
/*-------------------------------------------------------------------------
|
|
|
|
|
* Function: main
|
|
|
|
|
*
|
|
|
|
|
* Purpose: Test groups
|
|
|
|
|
*
|
|
|
|
|
* Return: Success: zero
|
|
|
|
|
*
|
|
|
|
|
* Failure: non-zero
|
|
|
|
|
*
|
|
|
|
|
* Programmer: Robb Matzke
|
|
|
|
|
* Tuesday, November 24, 1998
|
|
|
|
|
*
|
|
|
|
|
* Modifications:
|
|
|
|
|
*
|
|
|
|
|
*-------------------------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
int
|
|
|
|
|
main(void)
|
|
|
|
|
{
|
[svn-r15868] Description:
Correct a minor error in file free space allocation which was affecting
the 'multi' VFD and preventing some tests from fully working with it.
Wholesale revisitation of all the places where tests were disabled
with various VFDs and remove or correct all these so that _only_ the tests
which _really_ can't work with particular VFDs are skipped during a
'make check-vfd' test.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-15 09:46:34 +08:00
|
|
|
|
hid_t fapl, fapl2; /* File access property list IDs */
|
|
|
|
|
hbool_t new_format; /* Whether to use the new format or not */
|
|
|
|
|
int nerrors = 0;
|
|
|
|
|
|
|
|
|
|
/* Reset library */
|
|
|
|
|
h5_reset();
|
|
|
|
|
fapl = h5_fileaccess();
|
|
|
|
|
|
|
|
|
|
/* Copy the file access property list */
|
|
|
|
|
if((fapl2 = H5Pcopy(fapl)) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Set the "use the latest version of the format" bounds for creating objects in the file */
|
|
|
|
|
if(H5Pset_libver_bounds(fapl2, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0) TEST_ERROR
|
|
|
|
|
|
|
|
|
|
/* Loop over using new group format */
|
|
|
|
|
for(new_format = FALSE; new_format <= TRUE; new_format++) {
|
|
|
|
|
/* Perform basic tests, with old & new style groups */
|
|
|
|
|
nerrors += test_misc((new_format ? fapl2 : fapl), new_format);
|
|
|
|
|
nerrors += test_long((new_format ? fapl2 : fapl), new_format);
|
|
|
|
|
nerrors += test_large((new_format ? fapl2 : fapl), new_format);
|
|
|
|
|
} /* end for */
|
|
|
|
|
|
|
|
|
|
/* New format group specific tests (require new format features) */
|
|
|
|
|
nerrors += lifecycle(fapl2);
|
|
|
|
|
nerrors += long_compact(fapl2);
|
|
|
|
|
nerrors += read_old();
|
|
|
|
|
nerrors += no_compact(fapl2);
|
|
|
|
|
nerrors += gcpl_on_root(fapl2);
|
|
|
|
|
|
|
|
|
|
/* Old group API specific tests */
|
|
|
|
|
nerrors += old_api(fapl);
|
2009-03-24 02:51:29 +08:00
|
|
|
|
nerrors += corrupt_stab_msg();
|
[svn-r15868] Description:
Correct a minor error in file free space allocation which was affecting
the 'multi' VFD and preventing some tests from fully working with it.
Wholesale revisitation of all the places where tests were disabled
with various VFDs and remove or correct all these so that _only_ the tests
which _really_ can't work with particular VFDs are skipped during a
'make check-vfd' test.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-15 09:46:34 +08:00
|
|
|
|
|
|
|
|
|
/* Close 2nd FAPL */
|
|
|
|
|
H5Pclose(fapl2);
|
|
|
|
|
|
2011-04-16 06:05:23 +08:00
|
|
|
|
/* Verify symbol table messages are cached */
|
|
|
|
|
nerrors += (h5_verify_cached_stabs(FILENAME, fapl) < 0 ? 1 : 0);
|
|
|
|
|
|
[svn-r15868] Description:
Correct a minor error in file free space allocation which was affecting
the 'multi' VFD and preventing some tests from fully working with it.
Wholesale revisitation of all the places where tests were disabled
with various VFDs and remove or correct all these so that _only_ the tests
which _really_ can't work with particular VFDs are skipped during a
'make check-vfd' test.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-15 09:46:34 +08:00
|
|
|
|
/* Check for test errors */
|
|
|
|
|
if(nerrors)
|
|
|
|
|
goto error;
|
|
|
|
|
|
|
|
|
|
puts("All symbol table tests passed.");
|
|
|
|
|
|
|
|
|
|
/* Cleanup */
|
2009-10-20 23:08:56 +08:00
|
|
|
|
if (GetTestCleanup()) {
|
|
|
|
|
HDremove(FILE_OLD_GROUPS_COPY);
|
|
|
|
|
HDremove(CORRUPT_STAB_TMP_FILE);
|
|
|
|
|
}
|
[svn-r15868] Description:
Correct a minor error in file free space allocation which was affecting
the 'multi' VFD and preventing some tests from fully working with it.
Wholesale revisitation of all the places where tests were disabled
with various VFDs and remove or correct all these so that _only_ the tests
which _really_ can't work with particular VFDs are skipped during a
'make check-vfd' test.
Tested on:
Mac OS X/32 10.5.5 (amazon) in debug mode
Mac OS X/32 10.5.5 (amazon) w/C++ & FORTRAN, w/threadsafe,
in production mode
FreeBSD/32 6.3 (duty) in debug mode
FreeBSD/64 6.3 (liberty) w/C++ & FORTRAN, in debug mode
Linux/32 2.6 (kagiso) w/PGI compilers, w/C++ & FORTRAN, w/threadsafe,
in debug mode
Linux/64-amd64 2.6 (smirom) w/Intel compilers w/default API=1.6.x,
w/C++ & FORTRAN, in production mode
Solaris/32 2.10 (linew) w/deprecated symbols disabled, w/C++ & FORTRAN,
w/szip filter, in production mode
Linux/64-ia64 2.6 (cobalt) w/Intel compilers, w/C++ & FORTRAN,
in production mode
Linux/64-ia64 2.4 (tg-login3) w/parallel, w/FORTRAN, in production mode
Linux/64-amd64 2.6 (abe) w/parallel, w/FORTRAN, in production mode
2008-10-15 09:46:34 +08:00
|
|
|
|
h5_cleanup(FILENAME, fapl);
|
|
|
|
|
|
1998-11-25 22:58:22 +08:00
|
|
|
|
return 0;
|
|
|
|
|
|
2006-10-02 18:24:03 +08:00
|
|
|
|
error:
|
|
|
|
|
puts("*** TESTS FAILED ***");
|
|
|
|
|
return 1;
|
1998-11-25 22:58:22 +08:00
|
|
|
|
}
|
2009-03-24 02:51:29 +08:00
|
|
|
|
|