diff options
author | Robb Matzke <matzke@llnl.gov> | 1998-08-14 21:05:16 (GMT) |
---|---|---|
committer | Robb Matzke <matzke@llnl.gov> | 1998-08-14 21:05:16 (GMT) |
commit | 25b825965ed5910a3d0c7b98db3bc183e57a499a (patch) | |
tree | ddebdb78d0c226d3891bc8428e048bb8768bca97 /test/links.c | |
parent | a7e57b27793e548d7c0cf374f0b986f06e2cce13 (diff) | |
download | hdf5-25b825965ed5910a3d0c7b98db3bc183e57a499a.zip hdf5-25b825965ed5910a3d0c7b98db3bc183e57a499a.tar.gz hdf5-25b825965ed5910a3d0c7b98db3bc183e57a499a.tar.bz2 |
[svn-r594] Changes since 19980813
----------------------
./src/H5G.c
./src/H5Gpublic.h
./test/links.c
Fixed a bug in H5Gstat() that caused the wrong information to
be returned sometimes. Added check for named data types.
./test/extend.c
./test/links.c
./test/mtime.c
Added `all tests passed' messages.
Diffstat (limited to 'test/links.c')
-rw-r--r-- | test/links.c | 261 |
1 files changed, 240 insertions, 21 deletions
diff --git a/test/links.c b/test/links.c index 006bf37..0a766c7 100644 --- a/test/links.c +++ b/test/links.c @@ -10,8 +10,20 @@ #include <hdf5.h> #include <stdlib.h> +#include <H5config.h> +#ifndef HAVE_ATTRIBUTE +# undef __attribute__ +# define __attribute__(X) /*void*/ +# define __unused__ /*void*/ +#else +# define __unused__ __attribute__((unused)) +#endif + #define TEST_FILE_NAME "links.h5" +#define FALSE 0 +#define TRUE 1 + /*------------------------------------------------------------------------- * Function: cleanup @@ -37,54 +49,261 @@ cleanup(void) /*------------------------------------------------------------------------- - * Function: main + * Function: display_error_cb * - * Purpose: Tests links. + * Purpose: Displays the error stack after printing "*FAILED*". * * Return: Success: 0 * - * Failure: non-zero + * Failure: -1 * * Programmer: Robb Matzke - * Friday, April 10, 1998 + * Wednesday, March 4, 1998 * * Modifications: * *------------------------------------------------------------------------- */ -int -main (void) +static herr_t +display_error_cb (void __unused__ *client_data) { - hid_t file, scalar, grp, d1; - hsize_t size[1] = {1}; + puts ("*FAILED*"); + H5Eprint (stdout); + return 0; +} + + +/*------------------------------------------------------------------------- + * Function: mklinks + * + * Purpose: Build a file with assorted links. + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Robb Matzke + * Friday, August 14, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static int +mklinks(void) +{ + hid_t file, scalar, grp, d1; + static hsize_t size[1] = {1}; + + printf("%-70s", "Testing link creation"); /* Create a file */ - file = H5Fcreate (TEST_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - scalar = H5Screate_simple (1, size, size); + if ((file=H5Fcreate(TEST_FILE_NAME, H5F_ACC_TRUNC, + H5P_DEFAULT, H5P_DEFAULT))<0) { + goto error; + } + if ((scalar=H5Screate_simple (1, size, size))<0) goto error; /* Create a group */ - grp = H5Gcreate (file, "grp1", 0); - H5Gclose (grp); + if ((grp=H5Gcreate (file, "grp1", 0))<0) goto error; + if (H5Gclose (grp)<0) goto error; /* Create a dataset */ - d1 = H5Dcreate (file, "d1", H5T_NATIVE_INT, scalar, H5P_DEFAULT); - H5Dclose (d1); + if ((d1=H5Dcreate (file, "d1", H5T_NATIVE_INT, scalar, H5P_DEFAULT))<0) { + goto error; + } + if (H5Dclose (d1)<0) goto error; /* Create a hard link */ - H5Glink (file, H5G_LINK_HARD, "d1", "grp1/hard"); + if (H5Glink (file, H5G_LINK_HARD, "d1", "grp1/hard")<0) goto error; /* Create a symbolic link */ - H5Glink (file, H5G_LINK_SOFT, "/d1", "grp1/soft"); + if (H5Glink (file, H5G_LINK_SOFT, "/d1", "grp1/soft")<0) goto error; /* Create a symbolic link to something that doesn't exist */ - H5Glink (file, H5G_LINK_SOFT, "foobar", "grp1/dangle"); + if (H5Glink (file, H5G_LINK_SOFT, "foobar", "grp1/dangle")<0) goto error; /* Create a recursive symbolic link */ - H5Glink (file, H5G_LINK_SOFT, "/grp1/recursive", "/grp1/recursive"); - + if (H5Glink (file, H5G_LINK_SOFT, "/grp1/recursive", + "/grp1/recursive")<0) { + goto error; + } + /* Close */ - H5Sclose (scalar); - H5Fclose (file); + if (H5Sclose (scalar)<0) goto error; + if (H5Fclose (file)<0) goto error; + + puts(" PASSED"); + return 0; + + error: + return -1; +} + + +/*------------------------------------------------------------------------- + * Function: cklinks + * + * Purpose: Open the file created in the first step and check that the + * links look correct. + * + * Return: Success: 0 + * + * Failure: -1 + * + * Programmer: Robb Matzke + * Friday, August 14, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static int +cklinks(void) +{ + hid_t file; + H5G_stat_t sb1, sb2; + char linkval[1024]; + herr_t status; + + printf("%-70s", "Testing link queries"); + fflush(stdout); + + /* Open the file */ + if ((file=H5Fopen(TEST_FILE_NAME, H5F_ACC_RDONLY, H5P_DEFAULT))<0) { + goto error; + } + + /* Hard link */ + if (H5Gstat(file, "d1", TRUE, &sb1)<0) goto error; + if (H5Gstat(file, "grp1/hard", TRUE, &sb2)<0) goto error; + if (H5G_DATASET!=sb2.type) { + puts("*FAILED*"); + puts(" Unexpected object type should have been a dataset"); + goto error; + } + if (sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1]) { + puts("*FAILED*"); + puts(" Hard link test failed. Link seems not to point to the "); + puts(" expected file location."); + goto error; + } + + /* Symbolic link */ + if (H5Gstat(file, "grp1/soft", TRUE, &sb2)<0) goto error; + if (H5G_DATASET!=sb2.type) { + puts("*FAILED*"); + puts(" Unexpected object type should have been a dataset"); + goto error; + } + if (sb1.objno[0]!=sb2.objno[0] || sb1.objno[1]!=sb2.objno[1]) { + puts("*FAILED*"); + puts(" Soft link test failed. Link seems not to point to the "); + puts(" expected file location."); + goto error; + } + if (H5Gget_linkval(file, "grp1/soft", sizeof linkval, linkval)<0) { + goto error; + } + if (strcmp(linkval, "/d1")) { + puts("*FAILED*"); + puts(" Soft link test failed. Wrong link value"); + goto error; + } + + /* Dangling link */ + H5E_BEGIN_TRY { + status = H5Gstat(file, "grp1/dangle", TRUE, &sb2); + } H5E_END_TRY; + if (status>=0) { + puts("*FAILED*"); + puts(" H5Gstat() should have failed for a dangling link."); + goto error; + } + if (H5Gstat(file, "grp1/dangle", FALSE, &sb2)<0) goto error; + if (H5G_LINK!=sb2.type) { + puts("*FAILED*"); + puts(" Unexpected object type should have been a symbolic link"); + goto error; + } + if (H5Gget_linkval(file, "grp1/dangle", sizeof linkval, linkval)<0) { + goto error; + } + if (strcmp(linkval, "foobar")) { + puts("*FAILED*"); + puts(" Dangling link test failed. Wrong link value"); + goto error; + } + + /* Recursive link */ + H5E_BEGIN_TRY { + status = H5Gstat(file, "grp1/recursive", TRUE, &sb2); + } H5E_END_TRY; + if (status>=0) { + puts("*FAILED*"); + puts(" H5Gstat() should have failed for a recursive link."); + goto error; + } + if (H5Gstat(file, "grp1/recursive", FALSE, &sb2)<0) goto error; + if (H5G_LINK!=sb2.type) { + puts("*FAILED*"); + puts(" Unexpected object type should have been a symbolic link"); + goto error; + } + if (H5Gget_linkval(file, "grp1/recursive", sizeof linkval, linkval)<0) { + goto error; + } + if (strcmp(linkval, "/grp1/recursive")) { + puts("*FAILED*"); + puts(" Recursive link test failed. Wrong link value"); + goto error; + } + + /* Cleanup */ + if (H5Fclose(file)<0) goto error; + puts(" PASSED"); + return 0; + + error: + return -1; +} + + +/*------------------------------------------------------------------------- + * Function: main + * + * Purpose: Test links + * + * Return: Success: exit(0) + * + * Failure: exit(non-zero) + * + * Programmer: Robb Matzke + * Friday, August 14, 1998 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +int +main(void) +{ + int nerrors = 0; + + /* Set error handling to print `*FAILED*' before the error stack */ + H5Eset_auto(display_error_cb, NULL); + + /* The tests... */ + nerrors += mklinks() < 0 ? 1 : 0; + nerrors += cklinks() < 0 ? 1 : 0; + + /* Results */ + if (nerrors) { + printf("***** %d LINK TEST%s FAILED! *****\n", + nerrors, 1 == nerrors ? "" : "S"); + exit(1); + } + printf("All link tests passed.\n"); cleanup(); return 0; } |