/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright by The HDF Group. * * 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 * * 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. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* * Programmer: Robb Matzke * Tuesday, November 24, 1998 */ #include "h5test.h" /* * This file needs to access private datatypes from the H5G package. */ #define H5G_PACKAGE #include "H5Gpkg.h" const char *FILENAME[] = { "stab1", "stab2", NULL }; /* The group_new.h5 is generated from gen_new_fill.c in HDF5 'test' directory * for version 1.7 (after "compact group" checkin). To get this data file, * simply compile gen_new_group.c with HDF5 library (after compact group * checkin) and run it. */ #define FILE_NEW_GROUPS "group_new.h5" /*------------------------------------------------------------------------- * Function: test_misc * * Purpose: Test miscellaneous group stuff. * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke * Tuesday, November 24, 1998 * * Modifications: * Robb Matzke, 2002-03-28 * File is opened by parent instead of here. *------------------------------------------------------------------------- */ static int test_misc(hid_t file) { hid_t g1=-1, g2=-1, g3=-1; char comment[64]; /* Test current working groups */ TESTING("miscellaneous group tests"); /* Create initial groups for testing, then close */ if ((g1=H5Gcreate(file, "test_1a", 0))<0) goto error; if ((g2=H5Gcreate(g1, "sub_1", 0))<0) goto error; if ((g3=H5Gcreate(file, "test_1b", 0))<0) goto error; if (H5Gset_comment(g3, ".", "hello world")<0) goto error; if (H5Gclose(g1)<0) goto error; if (H5Gclose(g2)<0) goto error; if (H5Gclose(g3)<0) goto error; /* Open all groups with absolute names to check for exsistence */ if ((g1=H5Gopen(file, "/test_1a"))<0) goto error; if ((g2=H5Gopen(file, "/test_1a/sub_1"))<0) goto error; if ((g3=H5Gopen(file, "/test_1b"))<0) goto error; if (H5Gget_comment(g3, "././.", sizeof comment, comment)<0) goto error; if (strcmp(comment, "hello world")) { H5_FAILED(); puts(" Read the wrong comment string from the group."); printf(" got: \"%s\"\n ans: \"hello world\"\n", comment); goto error; } if (H5Gclose(g1)<0) goto error; if (H5Gclose(g2)<0) goto error; if (H5Gclose(g3)<0) goto error; /* Check that creating groups with no-op names isn't allowed */ H5E_BEGIN_TRY { g1=H5Gcreate(file, "/", 0); } H5E_END_TRY if(g1 >= 0) goto error; H5E_BEGIN_TRY { g1=H5Gcreate(file, "./././", 0); } H5E_END_TRY if(g1 >= 0) goto error; PASSED(); return 0; error: H5E_BEGIN_TRY { H5Gclose(g1); H5Gclose(g2); H5Gclose(g3); } H5E_END_TRY; return 1; } /*------------------------------------------------------------------------- * Purpose: Creates a group with a very long name * * Return: Success: 0 * * Failure: number of errors * * Programmer: Robb Matzke 2002-03-28 * * Modifications: *------------------------------------------------------------------------- */ static int test_long(hid_t file) { hid_t g1=-1, g2=-1; char *name1=NULL, *name2=NULL; size_t namesize=40960, i; TESTING("long names"); /* Group names */ name1 = malloc(namesize); for (i=0; i= 0) TEST_ERROR; } H5E_END_TRY; /* Attempt to open new group with link messages (should fail) */ H5E_BEGIN_TRY { if(H5Gopen(gid, "links") >= 0) TEST_ERROR; } H5E_END_TRY; /* Close root group */ if(H5Gclose(gid) < 0) TEST_ERROR; /* Close first file */ if(H5Fclose(fid)<0) TEST_ERROR; PASSED(); return 0; error: H5E_BEGIN_TRY { H5Gclose(gid); H5Fclose(fid); } H5E_END_TRY; return 1; } /* end read_new() */ /*------------------------------------------------------------------------- * Function: main * * Purpose: Test groups * * Return: Success: zero * * Failure: non-zero * * Programmer: Robb Matzke * Tuesday, November 24, 1998 * * Modifications: * *------------------------------------------------------------------------- */ int main(void) { hid_t fapl, fcpl, file; int nerrors=0; char filename[1024]; /* Reset library */ h5_reset(); fapl = h5_fileaccess(); /* * Use larger symbol table data structures to be more efficient, use * defaults to bang harder on the library for testing. */ fcpl = H5Pcreate(H5P_FILE_CREATE); #if 0 H5Pset_sym_k(fcpl, 16, 16); #endif /* Open the file */ h5_fixname(FILENAME[0], fapl, filename, sizeof filename); if ((file=H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, fapl))<0) goto error; /* Perform tests */ nerrors += test_misc(file); nerrors += test_long(file); nerrors += test_large(file); nerrors += read_new(fapl); if (nerrors) goto error; /* Cleanup */ H5Fclose(file); puts("All symbol table tests passed."); h5_cleanup(FILENAME, fapl); return 0; error: puts("*** TESTS FAILED ***"); return 1; }