summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--test/testhdf5.c23
-rw-r--r--test/testhdf5.h2
-rw-r--r--test/tfile.c6
-rw-r--r--test/theap.c4
-rw-r--r--test/tmeta.c2
-rw-r--r--test/tohdr.c28
-rw-r--r--test/tstab.c229
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; i<NOBJS; i++) {
s = H5H_peek (f, heap, obj[i]);
- MESSAGE (8, print_func ("object is `%s'\n", s););
+ MESSAGE (8, ("object is `%s'\n", s));
}
/* Close the file */
diff --git a/test/tmeta.c b/test/tmeta.c
index 567ab96..64f6b75 100644
--- a/test/tmeta.c
+++ b/test/tmeta.c
@@ -67,7 +67,7 @@ void test_metadata(void)
uint8 *p; /* pointer into the buffer being en/de-coded */
/* Output message about test being performed */
- MESSAGE(5, print_func("Testing Metadata encode/decode code\n"););
+ MESSAGE(5, ("Testing Metadata encode/decode code\n"));
/* Start by encoding the values above */
p=encode_buffer;
diff --git a/test/tohdr.c b/test/tohdr.c
index c1ecb0e..5e192e9 100644
--- a/test/tohdr.c
+++ b/test/tohdr.c
@@ -51,7 +51,7 @@ test_ohdr (void)
hbool_t ent_mod;
int i;
- MESSAGE (5, print_func("Testing Object Headers\n"););
+ MESSAGE (5, ("Testing Object Headers\n"));
/* create the file */
fid = H5Fcreate ("tohdr.h5", H5ACC_OVERWRITE, 0, 0);
@@ -60,17 +60,17 @@ test_ohdr (void)
CHECK (f, NULL, "H5Aatom_object");
/* the new object header */
- MESSAGE (8, print_func("Creating new object header...\n"););
+ MESSAGE (8, ("Creating new object header...\n"));
oh = H5O_new (f, 1, 64);
/*
* Test creation of a new message.
*/
- MESSAGE (8, print_func("Creating new message...\n"););
+ MESSAGE (8, ("Creating new message...\n"));
stab.btree = 11111111;
stab.heap = 22222222;
status = H5O_modify (f, oh, NULL, NULL, H5O_STAB, H5O_NEW_MESG, &stab);
- CHECK (status, FAIL, "H5O_modify");
+ VERIFY (status, 0, "H5O_modify");
H5AC_flush (f, NULL, 0, TRUE);
ptr = H5O_read (f, oh, NULL, H5O_STAB, 0, &ro);
@@ -82,11 +82,11 @@ test_ohdr (void)
/*
* Test modification of an existing message.
*/
- MESSAGE (8, print_func("Modifying message...\n"););
+ MESSAGE (8, ("Modifying message...\n"));
stab.btree = 33333333;
stab.heap = 44444444;
status = H5O_modify (f, oh, NULL, NULL, H5O_STAB, 0, &stab);
- CHECK (status, FAIL, "H5O_modify");
+ VERIFY (status, 0, "H5O_modify");
H5AC_flush (f, NULL, 0, TRUE);
ptr = H5O_read (f, oh, NULL, H5O_STAB, 0, &ro);
@@ -99,13 +99,13 @@ test_ohdr (void)
* Test creation of a second message of the same type with a symbol
* table.
*/
- MESSAGE (8, print_func("Creating a duplicate message...\n"););
+ MESSAGE (8, ("Creating a duplicate message...\n"));
ent.header = 0;
ent.type = H5G_NOTHING_CACHED;
stab.btree = 55555555;
stab.heap = 66666666;
status = H5O_modify (f, oh, &ent, &ent_mod, H5O_STAB, H5O_NEW_MESG, &stab);
- CHECK (status, FAIL, "H5O_modify");
+ VERIFY (status, 1, "H5O_modify");
VERIFY (ent_mod, TRUE, "H5O_modify");
VERIFY (ent.type, H5G_CACHED_STAB, "H5O_modify");
VERIFY (ent.cache.stab.heap, stab.heap, "H5O_modify");
@@ -121,11 +121,11 @@ test_ohdr (void)
/*
* Test modification of the second message with a symbol table.
*/
- MESSAGE (8, print_func("Modifying the duplicate message...\n"););
+ MESSAGE (8, ("Modifying the duplicate message...\n"));
stab.btree = 77777777;
stab.heap = 88888888;
status = H5O_modify (f, oh, &ent, &ent_mod, H5O_STAB, 1, &stab);
- CHECK (status, FAIL, "H5O_modify");
+ VERIFY (status, 1, "H5O_modify");
VERIFY (ent_mod, TRUE, "H5O_modify");
VERIFY (ent.type, H5G_CACHED_STAB, "H5O_modify");
VERIFY (ent.cache.stab.heap, stab.heap, "H5O_modify");
@@ -142,12 +142,12 @@ test_ohdr (void)
* Test creation of a bunch of messages one after another to see
* what happens when the object header overflows in core.
*/
- MESSAGE (8, print_func("Overflowing header in core...\n"););
+ MESSAGE (8, ("Overflowing header in core...\n"));
for (i=0; i<40; i++) {
stab.btree = (i+1)*1000 + 1;
stab.heap = (i+1)*1000 + 2;
status = H5O_modify (f, oh, NULL, NULL, H5O_STAB, H5O_NEW_MESG, &stab);
- CHECK (status, FAIL, "H5O_modify");
+ VERIFY (status, 2+i, "H5O_modify");
}
H5AC_flush (f, NULL, 0, TRUE);
@@ -155,12 +155,12 @@ test_ohdr (void)
* Test creation of a bunch of messages one after another to see
* what happens when the object header overflows on disk.
*/
- MESSAGE (8, print_func("Overflowing header on disk...\n"););
+ MESSAGE (8, ("Overflowing header on disk...\n"));
for (i=0; i<10; i++) {
stab.btree = (i+1)*1000 + 10;
stab.heap = (i+1)*1000 + 20;
status = H5O_modify (f, oh, NULL, NULL, H5O_STAB, H5O_NEW_MESG, &stab);
- CHECK (status, FAIL, "H5O_modify");
+ VERIFY (status, 42+i, "H5O_modify");
H5AC_flush (f, NULL, 0, TRUE);
}
diff --git a/test/tstab.c b/test/tstab.c
index 329b762..47beae7 100644
--- a/test/tstab.c
+++ b/test/tstab.c
@@ -24,22 +24,207 @@
/*-------------------------------------------------------------------------
- * Function: test_stab
+ * Function: test_1
*
- * Purpose: Test symbol tables
+ * Purpose: Tests the non-directory features of the HDF5 file. If the
+ * file has just one non-directory object, then that object
+ * should be the root object and there is no directory.
*
* Return: void
*
* Programmer: Robb Matzke
- * matzke@viper.llnl.gov
- * Aug 7 1997
+ * robb@maya.nuance.com
+ * Aug 29 1997
*
* Modifications:
*
*-------------------------------------------------------------------------
*/
-void
-test_stab (void)
+static void
+test_1 (void)
+{
+ hatom_t fid;
+ hdf5_file_t *f;
+ H5G_entry_t ent, ent2, dir_ent;
+ herr_t status;
+ H5O_name_t name_mesg;
+ void *status_ptr;
+
+ MESSAGE (2, ("........non-directory files\n"));
+
+ /*
+ * Test 1A: Create an empty file and add a non-directory object
+ * to the file with the name `/'. The object should become the
+ * root object and should not have a name message.
+ */
+
+ /* 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, "/", &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<nsyms; i++) {
sprintf (name, "%05d%05d", rand()%100000, i);
- MESSAGE (8, print_func ("%s\n", name););
+ MESSAGE (8, ("%s\n", name));
#if 1
status = H5G_insert (f, &cwd, NULL, name, &sub);
CHECK_I (status, "H5G_insert");
@@ -86,4 +271,28 @@ test_stab (void)
/* close the file */
H5Fclose (fid);
+}
+
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_stab
+ *
+ * Purpose: Test symbol tables
+ *
+ * Return: void
+ *
+ * Programmer: Robb Matzke
+ * matzke@viper.llnl.gov
+ * Aug 7 1997
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+test_stab (void)
+{
+ test_1();
+ test_2();
}