From 0d050fcd579bf1db6db2d8a1d3fec617114bfd1f Mon Sep 17 00:00:00 2001 From: Robb Matzke Date: Thu, 7 Aug 1997 14:23:41 -0500 Subject: [svn-r16] ./src/test/Makefile Added new files ./test/testhdf5.c ./test/testhdf5.h Added calls for object header testing. ./test/theap.c Turned off some output. --- test/Makefile | 5 +- test/testhdf5.c | 1 + test/testhdf5.h | 1 + test/theap.c | 5 +- test/tohdr.c | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 test/tohdr.c diff --git a/test/Makefile b/test/Makefile index ec8bcf5..c967547 100644 --- a/test/Makefile +++ b/test/Makefile @@ -14,7 +14,7 @@ DEFS = -I../src INCL = ../src/hdf5.h testhdf5.h -OBJ = testhdf5.o tmeta.o tfile.o theap.o +OBJ = testhdf5.o tmeta.o tfile.o theap.o tohdr.o LIBS = ../src/libhdf5.a @@ -47,4 +47,7 @@ tfile.o: tfile.c $(INCL) theap.o: theap.c $(INCL) $(CC) $(CFLAGS) $(DEFS) theap.c +tohdr.o: tohdr.c $(INCL) + $(CC) $(CFLAGS) $(DEFS) tohdr.c + diff --git a/test/testhdf5.c b/test/testhdf5.c index 60959fa..eaedee8 100644 --- a/test/testhdf5.c +++ b/test/testhdf5.c @@ -149,6 +149,7 @@ int main(int argc, char *argv[]) InitTest("metadata", test_metadata, "Encode/decode metadata code"); InitTest("file", test_file, "Low-Level File I/O"); InitTest("heap", test_heap, "Object and Name Heaps"); + InitTest("ohdr", test_ohdr, "Object Headers"); Verbosity = 4; /* Default Verbosity is Low */ H5version(&major, &minor, &release, &patch); diff --git a/test/testhdf5.h b/test/testhdf5.h index 1b482d2..63ea109 100644 --- a/test/testhdf5.h +++ b/test/testhdf5.h @@ -110,6 +110,7 @@ int print_func(const char *, ...); void test_metadata(void); void test_file(void); void test_heap (void); +void test_ohdr (void); #endif /* HDF5TEST_H */ diff --git a/test/theap.c b/test/theap.c index 41a9cbc..0ab60f5 100644 --- a/test/theap.c +++ b/test/theap.c @@ -58,12 +58,11 @@ test_heap (void) CHECK (f, NULL, "H5Aatom_object"); /* Create a new heap */ - heap = H5H_new (f, 0); + heap = H5H_new (f, H5H_LOCAL, 0); CHECK_I (heap, "H5H_new"); /* Add stuff to the heap */ for (i=0; i4) buf[j] = '\0'; @@ -78,7 +77,7 @@ test_heap (void) /* Read the objects back out */ for (i=0; i + * + * Purpose: + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +#include "testhdf5.h" + +#include "H5ACprivate.h" +#include "H5Fprivate.h" +#include "H5Gprivate.h" +#include "H5Oprivate.h" + + +/*------------------------------------------------------------------------- + * Function: test_ohdr + * + * Purpose: Test object headers. + * + * Return: void + * + * Programmer: Robb Matzke + * robb@maya.nuance.com + * Aug 6 1997 + * + * Modifications: + * + *------------------------------------------------------------------------- + */ +void +test_ohdr (void) +{ + hatom_t fid; + hdf5_file_t *f; + haddr_t oh; + H5O_stab_t stab, ro; + herr_t status; + void *ptr; + H5G_entry_t ent; + hbool_t ent_mod; + int i; + + MESSAGE (5, print_func("Testing Object Headers\n");); + + /* create the file */ + fid = H5Fcreate ("tohdr.h5", H5ACC_OVERWRITE, 0, 0); + CHECK (fid, FAIL, "H5Fcreate"); + f = H5Aatom_object (fid); + CHECK (f, NULL, "H5Aatom_object"); + + /* the new object header */ + MESSAGE (8, print_func("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");); + stab.btree = 11111111; + stab.heap = 22222222; + status = H5O_modify (f, oh, NULL, NULL, H5O_STAB, H5O_NEW_MESG, &stab); + CHECK (status, FAIL, "H5O_modify"); + + H5AC_flush (f, NULL, 0, TRUE); + ptr = H5O_read (f, oh, NULL, H5O_STAB, 0, &ro); + CHECK_PTR (ptr, "H5O_read"); + VERIFY (ptr, &ro, "H5O_read"); + VERIFY (ro.btree, stab.btree, "H5O_read"); + VERIFY (ro.heap, stab.heap, "H5O_read"); + + /* + * Test modification of an existing message. + */ + MESSAGE (8, print_func("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"); + + H5AC_flush (f, NULL, 0, TRUE); + ptr = H5O_read (f, oh, NULL, H5O_STAB, 0, &ro); + CHECK_PTR (ptr, "H5O_read"); + VERIFY (ptr, &ro, "H5O_read"); + VERIFY (ro.btree, stab.btree, "H5O_read"); + VERIFY (ro.heap, stab.heap, "H5O_read"); + + /* + * Test creation of a second message of the same type with a symbol + * table. + */ + MESSAGE (8, print_func("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 (ent_mod, TRUE, "H5O_modify"); + VERIFY (ent.type, H5G_CACHED_STAB, "H5O_modify"); + VERIFY (ent.cache.stab.heap, stab.heap, "H5O_modify"); + VERIFY (ent.cache.stab.btree, stab.btree, "H5O_modify"); + + H5AC_flush (f, NULL, 0, TRUE); + ptr = H5O_read (f, oh, NULL, H5O_STAB, 1, &ro); + CHECK_PTR (ptr, "H5O_read"); + VERIFY (ptr, &ro, "H5O_read"); + VERIFY (ro.btree, stab.btree, "H5O_read"); + VERIFY (ro.heap, stab.heap, "H5O_read"); + + /* + * Test modification of the second message with a symbol table. + */ + MESSAGE (8, print_func("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 (ent_mod, TRUE, "H5O_modify"); + VERIFY (ent.type, H5G_CACHED_STAB, "H5O_modify"); + VERIFY (ent.cache.stab.heap, stab.heap, "H5O_modify"); + VERIFY (ent.cache.stab.btree, stab.btree, "H5O_modify"); + + H5AC_flush (f, NULL, 0, TRUE); + ptr = H5O_read (f, oh, NULL, H5O_STAB, 1, &ro); + CHECK_PTR (ptr, "H5O_read"); + VERIFY (ptr, &ro, "H5O_read"); + VERIFY (ro.btree, stab.btree, "H5O_read"); + VERIFY (ro.heap, stab.heap, "H5O_read"); + + /* + * 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");); + 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"); + } + H5AC_flush (f, NULL, 0, TRUE); + + /* + * 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");); + 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"); + H5AC_flush (f, NULL, 0, TRUE); + } + + + + + /* close the file */ + H5Fclose (fid); +} -- cgit v0.12