From 3d526ab6cb594c656497fce7efe0589c0f840272 Mon Sep 17 00:00:00 2001 From: Robb Matzke Date: Fri, 29 Aug 1997 11:59:28 -0500 Subject: [svn-r51] ./test/tstab.c ./test/tohdr.c ./test/tmeta.c ./test/theap.c ./test/tfile.c ./test/testhdf5.h ./test/testhdf5.c Changed the MESSAGE macro so it doesn't have a semicolon inside the argument list and automatic indentation tools work better. Old call: MESSAGE (5, printfunc("foo%s %d", s, i);); New call: MESSAGE (5, ("foo%s %d", s, i)); The parentheses are required. ./test/tstab.c Added more tests. --- test/testhdf5.c | 23 ++---- test/testhdf5.h | 2 +- test/tfile.c | 6 +- test/theap.c | 4 +- test/tmeta.c | 2 +- test/tohdr.c | 28 +++---- test/tstab.c | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++--- 7 files changed, 248 insertions(+), 46 deletions(-) diff --git a/test/testhdf5.c b/test/testhdf5.c index bee3bfb..21dd790 100644 --- a/test/testhdf5.c +++ b/test/testhdf5.c @@ -250,28 +250,22 @@ int main(int argc, char *argv[]) { if (Test[Loop].SkipFlag) { - MESSAGE(2, print_func("Skipping -- %s \n", Test[Loop].Description); - ); + MESSAGE(2, ("Skipping -- %s \n", Test[Loop].Description)); } else { - MESSAGE(2, print_func("Testing -- %s (%s) \n", Test[Loop].Description, - Test[Loop].Name); - ); - MESSAGE(5, print_func("===============================================\n"); - ); + MESSAGE(2, ("Testing -- %s (%s) \n", Test[Loop].Description, + Test[Loop].Name)); + MESSAGE(5, ("===============================================\n")); Test[Loop].NumErrors = num_errs; (*Test[Loop].Call) (); Test[Loop].NumErrors = num_errs - Test[Loop].NumErrors; - MESSAGE(5, print_func("===============================================\n"); - ); - MESSAGE(5, print_func("There were %d errors detected.\n\n", (int) Test[Loop].NumErrors); - ); + MESSAGE(5, ("===============================================\n")); + MESSAGE(5, ("There were %d errors detected.\n\n", (int) Test[Loop].NumErrors)); } /* end else */ } /* end for */ - MESSAGE(2, print_func("\n\n"); - ) + MESSAGE(2, ("\n\n")) if (num_errs) print_func("!!! %d Error(s) were detected !!!\n\n", (int) num_errs); else @@ -296,8 +290,7 @@ int main(int argc, char *argv[]) if (CleanUp) { - MESSAGE(2, print_func("\nCleaning Up...\n\n"); - ); + MESSAGE(2, ("\nCleaning Up...\n\n")); #if !(defined DOS386 | defined WIN386) system("rm -f *.hdf *.tmp"); #else /* OLD_WAY */ diff --git a/test/testhdf5.h b/test/testhdf5.h index 2a9af68..fb67428 100644 --- a/test/testhdf5.h +++ b/test/testhdf5.h @@ -74,7 +74,7 @@ if(ret == FAIL) {print_func("*** UNEXPECTED RETURN from %s is %ld at line %4d in } while(0) /* Used to document process through a test */ -#define MESSAGE(v,a) {if (Verbosity>v) {a}} +#define MESSAGE(V,A) {if (Verbosity>(V)) print_func A;} /* definitions for command strings */ #define VERBOSITY_STR "Verbosity" diff --git a/test/tfile.c b/test/tfile.c index e83424e..7fd1a3d 100644 --- a/test/tfile.c +++ b/test/tfile.c @@ -68,7 +68,7 @@ static void test_file_create(void) herr_t ret; /* Generic return value */ /* Output message about test being performed */ - MESSAGE(5, print_func("Testing Low-Level File Creation I/O\n");); + MESSAGE(5, ("Testing Low-Level File Creation I/O\n")); /* Create first file */ fid1=H5Fcreate(FILE1,H5ACC_OVERWRITE,0,0); @@ -247,7 +247,7 @@ static void test_file_open(void) herr_t ret; /* Generic return value */ /* Output message about test being performed */ - MESSAGE(5, print_func("Testing Low-Level File Opening I/O\n");); + MESSAGE(5, ("Testing Low-Level File Opening I/O\n")); /* Open second file */ fid1=H5Fopen(FILE2,H5ACC_WRITE,0); @@ -296,7 +296,7 @@ static void test_file_open(void) void test_file(void) { /* Output message about test being performed */ - MESSAGE(5, print_func("Testing Low-Level File I/O\n");); + MESSAGE(5, ("Testing Low-Level File I/O\n")); test_file_create(); /* Test file creation (also creation templates) */ test_file_open(); /* Test file opening */ diff --git a/test/theap.c b/test/theap.c index 5237e4c..7f9b642 100644 --- a/test/theap.c +++ b/test/theap.c @@ -50,7 +50,7 @@ test_heap (void) const char *s; off_t obj[NOBJS]; - MESSAGE (5, print_func("Testing Heaps\n");); + MESSAGE (5, ("Testing Heaps\n")); /* Create the file */ fid = H5Fcreate ("theap.h5", H5ACC_OVERWRITE, 0, 0); @@ -78,7 +78,7 @@ test_heap (void) /* Read the objects back out */ for (i=0; iroot_sym, &dir_ent, "/", &ent); + CHECK_I (status, "H5G_insert"); + + /* is it really the root symbol? */ + VERIFY (dir_ent.header, 0, "H5G_insert"); + VERIFY (ent.header, f->root_sym->header, "H5G_insert"); + + /* look for a name message -- it shouldn't be present */ + status_ptr = H5O_read (f, ent.header, &ent, H5O_NAME, 0, &name_mesg); + VERIFY (status_ptr, NULL, "H5O_read [didn't fail but should have]"); + + + + /* + * Test 1B: Attempt to read the root object using the name `/'. + */ + + HDmemset (&dir_ent, 0, sizeof(H5G_entry_t)); + HDmemset (&ent2, 0, sizeof(H5G_entry_t)); + status = H5G_find (f, NULL, &dir_ent, "/", &ent2); + CHECK_I (status, "H5G_find"); + VERIFY (dir_ent.header, 0, "H5G_find"); + VERIFY (ent2.header, ent.header, "H5G_find"); + + + + /* + * Test 1C: Add a second object to the file to see if the first object + * gets moved into the new root directory along with the second object. + */ + + /* create the object */ + ent2.header = H5O_new (f, 0, 64); + CHECK_I (ent2.header, "H5O_new"); + ent2.type = H5G_NOTHING_CACHED; + + /* give the object a name */ + status = H5G_insert (f, f->root_sym, &dir_ent, "/second", &ent2); + CHECK_I (status, "H5G_insert"); + CHECK (dir_ent.header, 0, "H5G_insert"); + + /* try to read the first object */ + HDmemset (&ent2, 0, sizeof(H5G_entry_t)); + status = H5G_find (f, NULL, NULL, "/Root Object", &ent2); + CHECK_I (status, "H5G_find"); + VERIFY (ent2.header, ent.header, "H5G_find"); + + /* close the file */ + H5Fclose (fid); + + + + /* + * Test 1D: Create an empty file and add a non-directory object + * to the file with the name `/foo'. The object should become the + * root object and should have a name message with the value `foo'. + */ + + /* create the file */ + fid = H5Fcreate ("tstab1.h5", H5ACC_OVERWRITE, 0, 0); + CHECK (fid, FAIL, "H5Fcreate"); + f = H5Aatom_object (fid); + CHECK (f, NULL, "H5Aatom_object"); + + /* create the object */ + ent.header = H5O_new (f, 0, 64); + CHECK_I (ent.header, "H5O_new"); + ent.type = H5G_NOTHING_CACHED; + + /* give the object a name */ + status = H5G_insert (f, f->root_sym, &dir_ent, "/foo", &ent); + CHECK_I (status, "H5G_insert"); + + /* is it really the root symbol? */ + VERIFY (dir_ent.header, 0, "H5G_insert"); + VERIFY (ent.header, f->root_sym->header, "H5G_insert"); + + /* does it have the correct name message? */ + status_ptr = H5O_read (f, ent.header, &ent, H5O_NAME, 0, &name_mesg); + CHECK_PTR (status_ptr, "H5O_read"); + CHECK_PTR (name_mesg.s, "H5O_read"); + VERIFY (strcmp(name_mesg.s, "foo"), 0, "H5O_read"); + + + + /* + * Test 1E: Try to read the root object with the name `/' and `/foo' + */ + + HDmemset (&dir_ent, 0, sizeof(H5G_entry_t)); + HDmemset (&ent2, 0, sizeof(H5G_entry_t)); + status = H5G_find (f, NULL, &dir_ent, "/", &ent2); + CHECK_I (status, "H5G_find"); + VERIFY (dir_ent.header, 0, "H5G_find"); + VERIFY (ent2.header, ent.header, "H5G_find"); + + HDmemset (&dir_ent, 0, sizeof(H5G_entry_t)); + HDmemset (&ent2, 0, sizeof(H5G_entry_t)); + status = H5G_find (f, NULL, &dir_ent, "/foo", &ent2); + CHECK_I (status, "H5G_find"); + VERIFY (dir_ent.header, 0, "H5G_find"); + VERIFY (ent2.header, ent.header, "H5G_find"); + + + + /* + * Test 1F: Create another object. This should create a root directory + * and move the previous root object into that directory. + */ + + /* create the object */ + ent2.header = H5O_new (f, 0, 64); + CHECK_I (ent2.header, "H5O_new"); + ent2.type = H5G_NOTHING_CACHED; + + /* give the object a name */ + status = H5G_insert (f, f->root_sym, &dir_ent, "/second", &ent2); + CHECK_I (status, "H5G_insert"); + CHECK (dir_ent.header, 0, "H5G_insert"); + + /* try to read the first object */ + HDmemset (&ent2, 0, sizeof(H5G_entry_t)); + status = H5G_find (f, NULL, NULL, "/foo", &ent2); + CHECK_I (status, "H5G_find"); + VERIFY (ent2.header, ent.header, "H5G_find"); + +#if 0 /* H5O_remove() is not implemented yet */ + /* the first object should not have a name message */ + status_ptr = H5O_read (f, ent.header, &ent, H5O_NAME, 0, &name_mesg); + VERIFY (status_ptr, NULL, "H5O_read [didn't fail but should have]"); +#endif + + /* close the file */ + H5Fclose (fid); + +} + + +/*------------------------------------------------------------------------- + * Function: test_2 + * + * Purpose: Creates a really large directory. + * + * Return: void + * + * Programmer: Robb Matzke + * robb@maya.nuance.com + * Aug 29 1997 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +static void +test_2 (void) { hatom_t fid; hdf5_file_t *f; @@ -50,10 +235,10 @@ test_stab (void) herr_t status; int nsyms = 5000; - MESSAGE (5, print_func("Testing Symbol Tables\n");); + MESSAGE (2, ("........large directories\n")); /* create the file */ - fid = H5Fcreate ("tstab.h5", H5ACC_OVERWRITE, 0, 0); + fid = H5Fcreate ("tstab2.h5", H5ACC_OVERWRITE, 0, 0); CHECK (fid, FAIL, "H5Fcreate"); f = H5Aatom_object (fid); CHECK (f, NULL, "H5Aatom_object"); @@ -66,12 +251,12 @@ test_stab (void) CHECK_I (status, "H5G_new"); addr = H5G_stab_new (f, &sub, 0); CHECK_I (addr, "H5G_stab_new"); - MESSAGE (8, print_func ("Address %lu\n", (unsigned long)addr);); + MESSAGE (8, ("Address %lu\n", (unsigned long)addr)); for (i=0; i