diff options
author | Quincey Koziol <koziol@hdfgroup.org> | 2004-01-10 01:41:13 (GMT) |
---|---|---|
committer | Quincey Koziol <koziol@hdfgroup.org> | 2004-01-10 01:41:13 (GMT) |
commit | 987f5d5e4de41c02b682464fa8e94252553ed57c (patch) | |
tree | 2bf74eb88dee718490af7b7dda0e585b0d1b8a95 /c++/test | |
parent | 12dca9ab3c362fc190feb330232bec4bd552df3c (diff) | |
download | hdf5-987f5d5e4de41c02b682464fa8e94252553ed57c.zip hdf5-987f5d5e4de41c02b682464fa8e94252553ed57c.tar.gz hdf5-987f5d5e4de41c02b682464fa8e94252553ed57c.tar.bz2 |
[svn-r8048] Purpose:
Code cleanup & reorganization
Description:
Move further in the testing framework cleanup, eliminating all the
global variables (moving them into testframe.c as static variables) from the
testing framework code and moving it into the libh5test.a.
Platforms tested:
FreeBSD 4.9 (sleipnir) w & w/o thread-safety, c++ & parallel
h5committested
Diffstat (limited to 'c++/test')
-rw-r--r-- | c++/test/Makefile.in | 8 | ||||
-rw-r--r-- | c++/test/testhdf5.cpp | 283 | ||||
-rw-r--r-- | c++/test/th5s.cpp | 3 |
3 files changed, 35 insertions, 259 deletions
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in index 094849c..f70b871 100644 --- a/c++/test/Makefile.in +++ b/c++/test/Makefile.in @@ -22,6 +22,7 @@ HDF_CXX="yes" hdf5_srcdir=$(top_srcdir)/src hdf5_builddir=$(top_builddir)/src +hdf5_testdir=$(top_builddir)/test ## Add include directory to the cpp preprocessor flags; note that the ## hdf5/test directory is needed for the use of h5test @@ -30,6 +31,7 @@ CPPFLAGS=-I. -I../src -I$(srcdir)/../src -I$(top_srcdir)/test -I$(hdf5_builddir) ## Add the C++ API library and the hdf5 library to the library lists LIB=../src/libhdf5_cpp.la LIBHDF5=$(hdf5_builddir)/libhdf5.la +LIBH5TEST=$(hdf5_testdir)/libh5test.la ## These are our main targets. They should be listed in the order to be ## executed, generally most specific tests to least specific tests. @@ -47,12 +49,12 @@ TEST_SCRIPTS= DISTCLEAN=$(TEST_PROGS_SRC:.cpp=.lo) $(TEST_PROGS_SRC:.cpp=.o) -$(TEST_PROGS): $(LIB) $(LIBHDF5) +$(TEST_PROGS): $(LIB) $(LIBHDF5) $(LIBH5TEST) testhdf5: $(TEST_OBJ) - @$(LT_LINK_CXX_EXE) $(CXXFLAGS) -o $@ $(TESTHDF5_OBJ) $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS) $(DEFAULT_LIBS) + @$(LT_LINK_CXX_EXE) $(CXXFLAGS) -o $@ $(TESTHDF5_OBJ) $(LIB) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS) $(DEFAULT_LIBS) dsets: dsets.lo h5cpputil.lo - @$(LT_LINK_CXX_EXE) $(CXXFLAGS) -o $@ dsets.lo h5cpputil.lo $(hdf5_builddir)/../test/h5test.lo $(LIB) $(LIBHDF5) $(LDFLAGS) $(LIBS) $(DEFAULT_LIBS) + @$(LT_LINK_CXX_EXE) $(CXXFLAGS) -o $@ dsets.lo h5cpputil.lo $(hdf5_builddir)/../test/h5test.lo $(LIB) $(LIBH5TEST) $(LIBHDF5) $(LDFLAGS) $(LIBS) $(DEFAULT_LIBS) @CONCLUDE@ diff --git a/c++/test/testhdf5.cpp b/c++/test/testhdf5.cpp index f8aecbd..a532eae 100644 --- a/c++/test/testhdf5.cpp +++ b/c++/test/testhdf5.cpp @@ -35,284 +35,57 @@ ***************************************************************************/ -#ifdef __MWERKS__ -#include <console.h> -#endif /* __MWERKS__ */ - -#include <stdarg.h> - -#define MAXNUMOFTESTS 30 -#define HDF5_TEST_MASTER - -/* Internal Variables */ -static int Index = 0; - // Use C version of the header file testhdf5.h instead of re-coding it #include "testhdf5.h" -#ifdef OLD_HEADER_FILENAME -#include <iostream.h> -#else -#include <iostream> -#endif - #include "H5Cpp.h" #ifndef H5_NO_NAMESPACE using namespace H5; #endif /* !H5_NO_NAMESPACE */ -#include "h5cpputil.h" - -struct TestStruct { - int NumErrors; - char Description[64]; - int SkipFlag; - char Name[16]; - void (*Call) (void); - void (*Cleanup) (void); -} Test[MAXNUMOFTESTS]; - -static void InitTest(const char *, void (*) (void), void (*) (void), const char *TheDescr); -static void usage(void); - -static void InitTest(const char *TheName, void (*TheCall) (void), void (*Cleanup) (void), const char *TheDescr) -{ - if (Index >= MAXNUMOFTESTS) { - print_func("Uh-oh, too many tests added, increase MAXNUMOFTEST!\n"); - exit(-1); - } - - HDstrcpy(Test[Index].Description, TheDescr); - HDstrcpy(Test[Index].Name, TheName); - Test[Index].Call = TheCall; - Test[Index].Cleanup = Cleanup; - Test[Index].NumErrors = -1; - Test[Index].SkipFlag = 0; - Index++; -} - -static void -usage(void) -{ - print_func("Usage: testhdf5 [-v[erbose] (l[ow]|m[edium]|h[igh]|0-10)] \n"); - print_func(" [-[e]x[clude] name+] \n"); - print_func(" [-o[nly] name+] \n"); - print_func(" [-b[egin] name] \n"); - print_func(" [-s[ummary]] \n"); - print_func(" [-c[leanoff]] \n"); - print_func(" [-n[ocaching]] \n"); - print_func(" [-h[elp]] \n"); - print_func("\n\n"); - print_func("verbose controls the amount of information displayed\n"); - print_func("exclude to exclude tests by name\n"); - print_func("only to name tests which should be run\n"); - print_func("begin start at the name of the test givin\n"); - print_func("summary prints a summary of test results at the end\n"); - print_func("cleanoff does not delete *.hdf files after execution of tests\n"); - print_func("nocaching do not turn on low-level DD caching\n"); - print_func("help print out this information\n"); - print_func("\n\n"); - print_func("This program currently tests the following: \n\n"); - print_func("%16s %s\n", "Name", "Description"); - print_func("%16s %s\n", "----", "-----------"); - - for (int i = 0; i < Index; i++) - print_func("%16s %s\n", Test[i].Name, Test[i].Description); - - print_func("\n\n"); -} - -/* - * This routine is designed to provide equivalent functionality to 'printf' - * and allow easy replacement for environments which don't have stdin/stdout - * available. (i.e. Windows & the Mac) - */ -int -print_func(const char *format,...) -{ - va_list arglist; - int ret_value; - - va_start(arglist, format); - ret_value = vprintf(format, arglist); - va_end(arglist); - return ret_value; -} - int main(int argc, char *argv[]) { - int CLLoop; /* Command Line Loop */ - int Loop, Loop1; int Summary = 0; int CleanUp = 1; - int Cache = 1; - -#ifdef __MWERKS__ - argc = ccommand(&argv); -#endif /* __MWERKS__ */ - -#if !(defined MAC || defined __MWERKS__ || defined SYMANTEC_C) - /* Un-buffer the stdout and stderr */ - setbuf(stderr, NULL); - setbuf(stdout, NULL); -#endif /* !(MAC || __MWERKS__ || SYMANTEC_C) */ - /* - * Turn off automatic error reporting since we do it ourselves. Besides, - * half the functions this test calls are private, so automatic error - * reporting wouldn't do much good since it's triggered at the API layer. - */ - Exception::dontPrint(); + /* Initialize testing framework */ + TestInit(); // testing file creation and opening in tfile.cpp - InitTest("file", test_file, cleanup_file, "File I/O Operations"); + AddTest("file", test_file, cleanup_file, "File I/O Operations"); // testing dataspace functionalities in th5s.cpp - InitTest("h5s", test_h5s, cleanup_h5s, "Dataspaces"); - - /* Comment out tests that are not done yet. - BMR, Feb 2001 - InitTest("attr", test_attr, cleanup_attr, "Attributes"); - InitTest("select", test_select, cleanup_select, "Selections"); - InitTest("time", test_time, cleanup_time, "Time Datatypes"); - InitTest("reference", test_reference, cleanup_reference, "References"); - InitTest("vltypes", test_vltypes, cleanup_vltypes, "Variable-Length Datatypes"); - InitTest("vlstrings", test_vlstrings, cleanup_vlstrings, "Variable-Length Strings"); - InitTest("iterate", test_iterate, cleanup_iterate, "Group & Attribute Iteration"); - InitTest("array", test_array, cleanup_array, "Array Datatypes"); - InitTest("genprop", test_genprop, cleanup_genprop, "Generic Properties"); + AddTest("h5s", test_h5s, cleanup_h5s, "Dataspaces"); + +/* Comment out tests that are not done yet. - BMR, Feb 2001 + AddTest("attr", test_attr, cleanup_attr, "Attributes"); + AddTest("select", test_select, cleanup_select, "Selections"); + AddTest("time", test_time, cleanup_time, "Time Datatypes"); + AddTest("reference", test_reference, cleanup_reference, "References"); + AddTest("vltypes", test_vltypes, cleanup_vltypes, "Variable-Length Datatypes"); + AddTest("vlstrings", test_vlstrings, cleanup_vlstrings, "Variable-Length Strings"); + AddTest("iterate", test_iterate, cleanup_iterate, "Group & Attribute Iteration"); + AddTest("array", test_array, cleanup_array, "Array Datatypes"); + AddTest("genprop", test_genprop, cleanup_genprop, "Generic Properties"); Comment out tests that are not done yet */ - Verbosity = 4; /* Default Verbosity is Low */ - unsigned major, minor, release; - H5Library::getLibVersion( major, minor, release); - - print_func("\nFor help use: testhdf5 -help\n"); - print_func("Linked with hdf5 version %u.%u release %u\n", - (unsigned)major, (unsigned)minor, (unsigned)release); - - for (CLLoop = 1; CLLoop < argc; CLLoop++) { - if ((argc > CLLoop + 1) && ((HDstrcmp(argv[CLLoop], "-verbose") == 0) || - (HDstrcmp(argv[CLLoop], "-v") == 0))) { - if (argv[CLLoop + 1][0] == 'l') - Verbosity = 4; - else if (argv[CLLoop + 1][0] == 'm') - Verbosity = 6; - else if (argv[CLLoop + 1][0] == 'h') - Verbosity = 10; - else - Verbosity = atoi(argv[CLLoop + 1]); - } - - if ((argc > CLLoop) && ((HDstrcmp(argv[CLLoop], "-summary") == 0) || - (HDstrcmp(argv[CLLoop], "-s") == 0))) - Summary = 1; - - if ((argc > CLLoop) && ((HDstrcmp(argv[CLLoop], "-help") == 0) || - (HDstrcmp(argv[CLLoop], "-h") == 0))) { - usage(); - exit(0); - } - - if ((argc > CLLoop) && ((HDstrcmp(argv[CLLoop], "-cleanoff") == 0) || - (HDstrcmp(argv[CLLoop], "-c") == 0))) - CleanUp = 0; - - if ((argc > CLLoop) && ((HDstrcmp(argv[CLLoop], "-nocache") == 0) || - (HDstrcmp(argv[CLLoop], "-n") == 0))) { - Cache = 0; - printf ("Cache = %d\n", Cache); - } - - if ((argc > CLLoop + 1) && ((HDstrcmp(argv[CLLoop], "-exclude") == 0) || - (HDstrcmp(argv[CLLoop], "-x") == 0))) { - Loop = CLLoop + 1; - - while ((Loop < argc) && (argv[Loop][0] != '-')) { - for (Loop1 = 0; Loop1 < Index; Loop1++) - if (HDstrcmp(argv[Loop], Test[Loop1].Name) == 0) - Test[Loop1].SkipFlag = 1; - - Loop++; - } - } - - if ((argc > CLLoop + 1) && ((HDstrcmp(argv[CLLoop], "-begin") == 0) || - (HDstrcmp(argv[CLLoop], "-b") == 0))) { - Loop = CLLoop + 1; - - while ((Loop < argc) && (argv[Loop][0] != '-')) { - for (Loop1 = 0; Loop1 < Index; Loop1++) { - if (HDstrcmp(argv[Loop], Test[Loop1].Name) != 0) - Test[Loop1].SkipFlag = 1; - if (HDstrcmp(argv[Loop], Test[Loop1].Name) == 0) - Loop1 = Index; - } - - Loop++; - } - } - - if ((argc > CLLoop + 1) && ((HDstrcmp(argv[CLLoop], "-only") == 0) || - (HDstrcmp(argv[CLLoop], "-o") == 0))) { - for (Loop = 0; Loop < Index; Loop++) - Test[Loop].SkipFlag = 1; - Loop = CLLoop + 1; - while ((Loop < argc) && (argv[Loop][0] != '-')) { - for (Loop1 = 0; Loop1 < Index; Loop1++) - if (HDstrcmp(argv[Loop], Test[Loop1].Name) == 0) - Test[Loop1].SkipFlag = 0; - Loop++; - } - } - } - -#ifdef NOT_YET - if (Cache) /* turn on caching, unless we were instucted not to */ - Hcache(CACHE_ALL_FILES, TRUE); -#endif /* NOT_YET */ - - for (Loop = 0; Loop < Index; Loop++) { - if (Test[Loop].SkipFlag) { - MESSAGE(2, ("Skipping -- %s \n", Test[Loop].Description)); - } else { - 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, ("===============================================\n")); - MESSAGE(5, ("There were %d errors detected.\n\n", (int) Test[Loop].NumErrors)); - } - } - - MESSAGE(2, ("\n\n")) - test_report(num_errs, string(" HDF5 Base")); - if (Summary) { - print_func("Summary of Test Results:\n"); - print_func("Name of Test Errors Description of Test\n"); - print_func("---------------- ------ --------------------------------------\n"); + /* Display testing information */ + TestInfo(argv[0]); - for (Loop = 0; Loop < Index; Loop++) { - if (Test[Loop].NumErrors == -1) - print_func("%16s %6s %s\n", Test[Loop].Name, "N/A", Test[Loop].Description); - else - print_func("%16s %6d %s\n", Test[Loop].Name, (int) Test[Loop].NumErrors, - Test[Loop].Description); - } + /* Parse command line arguments */ + TestParseCmdLine(argc,argv,&Summary,&CleanUp); - print_func("\n\n"); - } + /* Perform requested testing */ + PerformTests(); - if (CleanUp && !getenv("HDF5_NOCLEANUP")) { - MESSAGE(2, ("\nCleaning Up temp files...\n\n")); + /* Display test summary, if requested */ + if (Summary) + TestSummary(); - /* call individual cleanup routines in each source module */ - for (Loop = 0; Loop < Index; Loop++) - if (!Test[Loop].SkipFlag && Test[Loop].Cleanup!=NULL) - (*Test[Loop].Cleanup) (); - } + /* Clean up test files, if allowed */ + if (CleanUp && !getenv("HDF5_NOCLEANUP")) + TestCleanup(); - return num_errs; + return (GetTestNumErrs()); } diff --git a/c++/test/th5s.cpp b/c++/test/th5s.cpp index 443b310..821a98f 100644 --- a/c++/test/th5s.cpp +++ b/c++/test/th5s.cpp @@ -476,7 +476,8 @@ test_h5s_compound_scalar_read(void) << space4_data.f << ", read_data4.f=" << rdata.f << endl; cout << "scalar data different: space4_data.c1=" << space4_data.c1 << ", read_data4.c1=" << rdata.c2 << endl; - num_errs++; + TestErrPrintf("scalar data different: space4_data.c1=%c, read_data4.c1=%c\n", + space4_data.c1, rdata.c2); } /* end if */ } // end of try block catch (Exception error) |