diff options
Diffstat (limited to 'hl/c++/test')
-rw-r--r-- | hl/c++/test/CMakeLists.txt | 59 | ||||
-rw-r--r-- | hl/c++/test/CMakeTests.cmake | 11 | ||||
-rw-r--r-- | hl/c++/test/Makefile.am | 2 | ||||
-rw-r--r-- | hl/c++/test/Makefile.in | 28 | ||||
-rw-r--r-- | hl/c++/test/ptableTest.cpp | 600 | ||||
-rw-r--r-- | hl/c++/test/ptableTest.h | 4 |
6 files changed, 376 insertions, 328 deletions
diff --git a/hl/c++/test/CMakeLists.txt b/hl/c++/test/CMakeLists.txt index b48d147..9a1d6fd 100644 --- a/hl/c++/test/CMakeLists.txt +++ b/hl/c++/test/CMakeLists.txt @@ -1,30 +1,37 @@ -cmake_minimum_required (VERSION 3.10) -PROJECT (HDF5_HL_CPP_TEST) - -#----------------------------------------------------------------------------- -# Setup include Directories -#----------------------------------------------------------------------------- -INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/src) -INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/c++/src) - -# -------------------------------------------------------------------- -# Add in the unit tests for the packet table c++ wrapper -# -------------------------------------------------------------------- - -INCLUDE_DIRECTORIES (${HDF5_TEST_SRC_DIR}) -INCLUDE_DIRECTORIES (${HDF5_HL_SRC_DIR}/test) -INCLUDE_DIRECTORIES (${HDF5_CPP_SRC_DIR}/src) +cmake_minimum_required (VERSION 3.12) +project (HDF5_HL_CPP_TEST CXX) add_executable (hl_ptableTest ${HDF5_HL_CPP_TEST_SOURCE_DIR}/ptableTest.cpp) -TARGET_C_PROPERTIES (hl_ptableTest STATIC " " " ") -target_link_libraries ( - hl_ptableTest - ${HDF5_LIB_TARGET} - ${HDF5_TEST_LIB_TARGET} - ${HDF5_CPP_LIB_TARGET} - ${HDF5_HL_LIB_TARGET} - ${HDF5_HL_CPP_LIB_TARGET} -) +target_compile_options(hl_ptableTest PRIVATE "${HDF5_CMAKE_CXX_FLAGS}") +target_include_directories (hl_ptableTest PRIVATE "${HDF5_HL_SRC_DIR}/test;${HDF5_SRC_DIR};${HDF5_SRC_BINARY_DIR};$<$<BOOL:${HDF5_ENABLE_PARALLEL}>:${MPI_C_INCLUDE_DIRS}>") +if (NOT BUILD_SHARED_LIBS) + TARGET_C_PROPERTIES (hl_ptableTest STATIC) + target_link_libraries (hl_ptableTest PRIVATE + ${HDF5_LIB_TARGET} + ${HDF5_TEST_LIB_TARGET} + ${HDF5_CPP_LIB_TARGET} + ${HDF5_HL_LIB_TARGET} + ${HDF5_HL_CPP_LIB_TARGET} + ) +else () + TARGET_C_PROPERTIES (hl_ptableTest SHARED) + target_link_libraries (hl_ptableTest PRIVATE + ${HDF5_LIBSH_TARGET} + ${HDF5_TEST_LIBSH_TARGET} + ${HDF5_CPP_LIBSH_TARGET} + ${HDF5_HL_LIBSH_TARGET} + ${HDF5_HL_CPP_LIBSH_TARGET} + ) +endif () set_target_properties (hl_ptableTest PROPERTIES FOLDER test/hl/cpp) -include (CMakeTests.cmake) +#----------------------------------------------------------------------------- +# Add Target to clang-format +#----------------------------------------------------------------------------- +if (HDF5_ENABLE_FORMATTERS) + clang_format (HDF5_HL_CPP_TEST_FORMAT hl_ptableTest) +endif () + +if (HDF5_TEST_CPP AND HDF5_TEST_SERIAL) + include (CMakeTests.cmake) +endif () diff --git a/hl/c++/test/CMakeTests.cmake b/hl/c++/test/CMakeTests.cmake index 785abca..28ee5df 100644 --- a/hl/c++/test/CMakeTests.cmake +++ b/hl/c++/test/CMakeTests.cmake @@ -5,7 +5,7 @@ # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. +# distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # @@ -16,10 +16,16 @@ ############################################################################## ############################################################################## +add_test ( + NAME HL_CPP_ptableTest-clear-objects + COMMAND ${CMAKE_COMMAND} + -E remove ${example}.txt +) if (HDF5_ENABLE_USING_MEMCHECKER) - add_test (NAME HL_CPP_ptableTest COMMAND $<TARGET_FILE:hl_ptableTest>) + add_test (NAME HL_CPP_ptableTest COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} $<TARGET_FILE:hl_ptableTest>) else () add_test (NAME HL_CPP_ptableTest COMMAND "${CMAKE_COMMAND}" + -D "TEST_EMULATOR=${CMAKE_CROSSCOMPILING_EMULATOR}" -D "TEST_PROGRAM=$<TARGET_FILE:hl_ptableTest>" -D "TEST_ARGS:STRING=" -D "TEST_EXPECT=0" @@ -30,3 +36,4 @@ else () -P "${HDF_RESOURCES_EXT_DIR}/runTest.cmake" ) endif () +set_tests_properties (HL_CPP_ptableTest PROPERTIES DEPENDS HL_CPP_ptableTest-clear-objects) diff --git a/hl/c++/test/Makefile.am b/hl/c++/test/Makefile.am index 7031c34..a6759f3 100644 --- a/hl/c++/test/Makefile.am +++ b/hl/c++/test/Makefile.am @@ -6,7 +6,7 @@ # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. +# distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. ## diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in index 388c00c..33c2829 100644 --- a/hl/c++/test/Makefile.in +++ b/hl/c++/test/Makefile.in @@ -22,7 +22,7 @@ # This file is part of HDF5. The full HDF5 copyright notice, including # terms governing use, modification, and redistribution, is contained in # the COPYING file, which can be found at the root of the source code -# distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. +# distribution tree, or in https://www.hdfgroup.org/licenses. # If you do not have access to either file, you may request a copy from # help@hdfgroup.org. # @@ -401,14 +401,14 @@ AMTAR = @AMTAR@ # AM_CFLAGS is an automake construct which should be used by Makefiles # instead of CFLAGS, as CFLAGS is reserved solely for the user to define. # This applies to FCFLAGS, CXXFLAGS, CPPFLAGS, and LDFLAGS as well. -AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@ +AM_CFLAGS = @AM_CFLAGS@ @H5_CFLAGS@ @H5_ECFLAGS@ # Include directories AM_CPPFLAGS = @AM_CPPFLAGS@ @H5_CPPFLAGS@ -I$(top_srcdir)/src \ -I$(top_srcdir)/c++/src -I$(top_srcdir)/hl/src \ -I$(top_srcdir)/hl/c++/src -I$(top_srcdir)/test \ -I$(top_builddir)/hl/test -I$(top_srcdir)/hl/test -AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@ +AM_CXXFLAGS = @AM_CXXFLAGS@ @H5_CXXFLAGS@ @H5_ECXXFLAGS@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AM_FCFLAGS = @AM_FCFLAGS@ @H5_FCFLAGS@ AM_LDFLAGS = @AM_LDFLAGS@ @H5_LDFLAGS@ @@ -423,6 +423,7 @@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CC_VERSION = @CC_VERSION@ CFLAGS = @CFLAGS@ +CLANG_SANITIZE_CHECKS = @CLANG_SANITIZE_CHECKS@ CLEARFILEBUF = @CLEARFILEBUF@ CODESTACK = @CODESTACK@ CONFIG_DATE = @CONFIG_DATE@ @@ -441,6 +442,7 @@ DEFAULT_API_VERSION = @DEFAULT_API_VERSION@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DEPRECATED_SYMBOLS = @DEPRECATED_SYMBOLS@ +DEV_WARNINGS = @DEV_WARNINGS@ DIRECT_VFD = @DIRECT_VFD@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ @@ -468,6 +470,8 @@ GREP = @GREP@ H5_CFLAGS = @H5_CFLAGS@ H5_CPPFLAGS = @H5_CPPFLAGS@ H5_CXXFLAGS = @H5_CXXFLAGS@ +H5_ECFLAGS = @H5_ECFLAGS@ +H5_ECXXFLAGS = @H5_ECXXFLAGS@ H5_FCFLAGS = @H5_FCFLAGS@ H5_FORTRAN_SHARED = @H5_FORTRAN_SHARED@ H5_LDFLAGS = @H5_LDFLAGS@ @@ -475,9 +479,12 @@ H5_VERSION = @H5_VERSION@ HADDR_T = @HADDR_T@ HAVE_DMALLOC = @HAVE_DMALLOC@ HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@ +HAVE_LIBHDFS = @HAVE_LIBHDFS@ HAVE_PTHREAD = @HAVE_PTHREAD@ HDF5_HL = @HDF5_HL@ HDF5_INTERFACES = @HDF5_INTERFACES@ +HDF5_TESTS = @HDF5_TESTS@ +HDF5_TOOLS = @HDF5_TOOLS@ HDF_CXX = @HDF_CXX@ HDF_FORTRAN = @HDF_FORTRAN@ HDF_FORTRAN2003 = @HDF_FORTRAN2003@ @@ -493,6 +500,7 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTRUMENT = @INSTRUMENT@ INSTRUMENT_LIBRARY = @INSTRUMENT_LIBRARY@ +JNI_LDFLAGS = @JNI_LDFLAGS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ @@ -514,6 +522,7 @@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJECT_NAMELEN_DEFAULT_F = @OBJECT_NAMELEN_DEFAULT_F@ OBJEXT = @OBJEXT@ +OPTIMIZATION = @OPTIMIZATION@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ @@ -526,8 +535,10 @@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARALLEL = @PARALLEL@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ +PROFILING = @PROFILING@ RANLIB = @RANLIB@ ROOT = @ROOT@ +ROS3_VFD = @ROS3_VFD@ RUNPARALLEL = @RUNPARALLEL@ RUNSERIAL = @RUNSERIAL@ R_INTEGER = @R_INTEGER@ @@ -541,6 +552,7 @@ STATIC_EXEC = @STATIC_EXEC@ STATIC_SHARED = @STATIC_SHARED@ STRICT_FORMAT_CHECKS = @STRICT_FORMAT_CHECKS@ STRIP = @STRIP@ +SYMBOLS = @SYMBOLS@ TESTPARALLEL = @TESTPARALLEL@ THREADSAFE = @THREADSAFE@ TIME = @TIME@ @@ -582,6 +594,7 @@ docdir = $(exec_prefix)/doc dvidir = @dvidir@ enable_shared = @enable_shared@ enable_static = @enable_static@ +examplesdir = @examplesdir@ exec_prefix = @exec_prefix@ fortran_linux_linker_option = @fortran_linux_linker_option@ host = @host@ @@ -677,11 +690,11 @@ ptableTest_SOURCES = ptableTest.cpp # Tell conclude.am that these are C++ tests. CXX_API = yes -# Automake needs to be taught how to build lib, dyn, progs, and tests targets. +# Automake needs to be taught how to build lib, progs and tests targets. # These will be filled in automatically for the most part (e.g., # lib_LIBRARIES are built for lib target), but EXTRA_LIB, EXTRA_PROG, and # EXTRA_TEST variables are supplied to allow the user to force targets to -# be built at certain times. +# be built at certain times. LIB = $(lib_LIBRARIES) $(lib_LTLIBRARIES) $(noinst_LIBRARIES) \ $(noinst_LTLIBRARIES) $(check_LIBRARIES) $(check_LTLIBRARIES) $(EXTRA_LIB) @@ -1153,6 +1166,7 @@ uninstall-am: help: @$(top_srcdir)/bin/makehelp + # lib/progs/tests targets recurse into subdirectories. build-* targets # build files in this directory. build-lib: $(LIB) @@ -1188,7 +1202,7 @@ all-local: $(EXTRA_LIB) $(EXTRA_PROG) $(chk_TESTS) # make install-doc doesn't do anything outside of doc directory, but # Makefiles should recognize it. # UPDATE: docs no longer reside in this build tree, so this target -# is depreciated. +# is deprecated. install-doc uninstall-doc: @echo "Nothing to be done." @@ -1349,7 +1363,7 @@ build-check-p: $(LIB) $(PROGS) $(chk_TESTS) echo "**** Hint ****"; \ echo "Parallel test files reside in the current directory" \ "by default."; \ - echo "Set HDF5_PARAPREFIX to use another directory. E.g.,"; \ + echo "Set HDF5_PARAPREFIX to use another directory. e.g.,"; \ echo " HDF5_PARAPREFIX=/PFS/user/me"; \ echo " export HDF5_PARAPREFIX"; \ echo " make check"; \ diff --git a/hl/c++/test/ptableTest.cpp b/hl/c++/test/ptableTest.cpp index 340912e..bf60402 100644 --- a/hl/c++/test/ptableTest.cpp +++ b/hl/c++/test/ptableTest.cpp @@ -6,7 +6,7 @@ * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * + * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -22,41 +22,40 @@ using namespace std; #define TEST_FILE "packettest.h5" /* Main test function */ -int main(void) +int +main(void) { herr_t err; herr_t num_errors = 0; /* Create new HDF5 file */ fileID = H5Fcreate(TEST_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); - if(fileID <0) - { + if (fileID < 0) { fprintf(stderr, "Couldn't create file.\n"); num_errors = 1; } else { - num_errors += BasicTest(); + num_errors += BasicTest(); - num_errors += TestCompoundDatatype(); + num_errors += TestCompoundDatatype(); - num_errors += TestGetPacket(); + num_errors += TestGetPacket(); - num_errors += TestGetNext(); + num_errors += TestGetNext(); - num_errors += TestCompress(); + num_errors += TestCompress(); - num_errors += TestErrors(); + num_errors += TestErrors(); - num_errors += SystemTest(); + num_errors += SystemTest(); - /* Test data corruption in packed structs */ - num_errors += TestHDFFV_9758(); + /* Test data corruption in packed structs */ + num_errors += TestHDFFV_9758(); /* Terminate access to the file. */ err = H5Fclose(fileID); - if( err < 0 ) - { + if (err < 0) { fprintf(stderr, "Failed to close file.\n"); num_errors++; } @@ -66,37 +65,39 @@ int main(void) } if (num_errors == 0) - /* ALL TESTS PASSED */ - return 0; + /* ALL TESTS PASSED */ + return 0; else - /* ERRORS */ - return -1; + /* ERRORS */ + return -1; } -const char* BASICTEST_PT("/basicTest"); -int BasicTest() +const char *BASICTEST_PT("/basicTest"); +int +BasicTest() { - herr_t err; - int myRecord; + herr_t err; + int myRecord; hsize_t count; - int error; + int error; - TESTING("basic functionality") + printf("Testing %-62s", "basic functionality"); + HDfflush(stdout); FL_PacketTable wrapper(fileID, H5P_DEFAULT, BASICTEST_PT, H5T_NATIVE_INT, 1); - if(! wrapper.IsValid()) - goto error; + if (!wrapper.IsValid()) + goto error; /* Ensure initial count is zero */ count = wrapper.GetPacketCount(error); - if(count != 0 || error != 0) - goto error; + if (count != 0 || error != 0) + goto error; myRecord = 1; /* add some records test */ err = wrapper.AppendPacket(&myRecord); - if(err < 0) + if (err < 0) goto error; myRecord = 2; @@ -105,22 +106,22 @@ int BasicTest() /* get number of records test */ count = wrapper.GetPacketCount(); - if(count != 2) - goto error; + if (count != 2) + goto error; /* get records test */ err = wrapper.GetPacket(0, &myRecord); - if(err < 0) - goto error; + if (err < 0) + goto error; - if(myRecord != 1) - goto error; + if (myRecord != 1) + goto error; err = wrapper.GetPacket(1, &myRecord); - if(err < 0) - goto error; - if(myRecord != 2) - goto error; + if (err < 0) + goto error; + if (myRecord != 2) + goto error; PASSED(); return 0; @@ -130,57 +131,58 @@ error: return 1; } -const char* CMPDTEST_PT("/compoundTest"); -int TestCompoundDatatype() +const char *CMPDTEST_PT("/compoundTest"); +int +TestCompoundDatatype() { - hid_t dtypeID; + hid_t dtypeID; hsize_t count; - int error; + int error; - TESTING("compound datatypes") + printf("Testing %-62s", "compound datatypes"); + HDfflush(stdout); /* Create compound datatype */ - typedef struct compoundType - { + typedef struct { short a, b, c; - int e; + int e; } compoundType; - dtypeID = H5Tcreate( H5T_COMPOUND, sizeof(compoundType)); + dtypeID = H5Tcreate(H5T_COMPOUND, sizeof(compoundType)); - H5Tinsert(dtypeID, "abbey", HOFFSET( compoundType, a ), H5T_NATIVE_SHORT); - H5Tinsert(dtypeID, "bert", HOFFSET( compoundType, b ), H5T_NATIVE_SHORT); - H5Tinsert(dtypeID, "charlie", HOFFSET( compoundType, c ), H5T_NATIVE_SHORT); - H5Tinsert(dtypeID, "ebert", HOFFSET( compoundType, e ), H5T_NATIVE_INT); + H5Tinsert(dtypeID, "abbey", HOFFSET(compoundType, a), H5T_NATIVE_SHORT); + H5Tinsert(dtypeID, "bert", HOFFSET(compoundType, b), H5T_NATIVE_SHORT); + H5Tinsert(dtypeID, "charlie", HOFFSET(compoundType, c), H5T_NATIVE_SHORT); + H5Tinsert(dtypeID, "ebert", HOFFSET(compoundType, e), H5T_NATIVE_INT); /* Create packet table using default property list. */ FL_PacketTable wrapper(fileID, H5P_DEFAULT, CMPDTEST_PT, dtypeID, 1); - if(! wrapper.IsValid()) - goto error; + if (!wrapper.IsValid()) + goto error; compoundType first; first.a = 1; first.b = first.c = 3; - first.e = 5; + first.e = 5; /* Write packet */ wrapper.AppendPacket(&first); count = wrapper.GetPacketCount(error); - if(count != 1) - goto error; + if (count != 1) + goto error; first.a = first.b = first.c = 0; - first.e = 0; + first.e = 0; /* Read packet back */ wrapper.GetPacket(0, &first); - if(first.a != 1) - goto error; - if(first.e != 5) - goto error; + if (first.a != 1) + goto error; + if (first.e != 5) + goto error; PASSED(); @@ -189,69 +191,71 @@ int TestCompoundDatatype() error: - H5E_BEGIN_TRY { - H5Tclose(dtypeID); - } H5E_END_TRY; - + H5E_BEGIN_TRY { H5Tclose(dtypeID); } + H5E_END_TRY; H5_FAILED(); return 1; } -const char* GETNEXT_PT("/TestGetNext"); -int TestGetNext() +const char *GETNEXT_PT("/TestGetNext"); +int +TestGetNext() { int error; int record; int records[2]; int i; - TESTING("GetNextPacket") + printf("Testing %-62s", "GetNextPacket"); + HDfflush(stdout); /* Create a dataset */ FL_PacketTable wrapper(fileID, H5P_DEFAULT, GETNEXT_PT, H5T_NATIVE_INT, 500); - if(! wrapper.IsValid()) - goto error; + if (!wrapper.IsValid()) + goto error; /* Append 5 records to the dataset */ - for(record = 1; record < 6; record++) + for (record = 1; record < 6; record++) wrapper.AppendPacket(&record); /* Ensure that we can interate through the records and get the right ones */ - for(i = 1; i < 6; i++) - { + for (i = 1; i < 6; i++) { wrapper.GetNextPacket(&record); - if(record != i) - goto error; + if (record != i) + goto error; } /* Reset the index and check that it worked */ wrapper.ResetIndex(); - if(wrapper.GetIndex(error) != 0) goto error; - if(error < 0) goto error; + if (wrapper.GetIndex(error) != 0) + goto error; + if (error < 0) + goto error; /* Ensure that we can interate through the records and get the right ones */ - for(i = 1; i < 6; i++) - { + for (i = 1; i < 6; i++) { error = wrapper.GetNextPacket(&record); - if(record != i || error <0) - goto error; + if (record != i || error < 0) + goto error; } wrapper.SetIndex(1); - if(wrapper.GetIndex(error) != 1) goto error; - if(error < 0) goto error; + if (wrapper.GetIndex(error) != 1) + goto error; + if (error < 0) + goto error; /* Ensure we can get multiple records with our index pointer */ wrapper.GetNextPackets(2, records); - if(records[0] != 2 || records[1] != 3) - goto error; + if (records[0] != 2 || records[1] != 3) + goto error; /* Ensure our pointer was updated correctly */ wrapper.GetNextPacket(&record); - if(record != 4) - goto error; + if (record != 4) + goto error; PASSED(); return 0; @@ -261,27 +265,29 @@ error: return 1; } -const char* COMPRESS_PT("/compressTest"); -int TestCompress() +const char *COMPRESS_PT("/compressTest"); +int +TestCompress() { - unsigned int flags = 0; - unsigned int config = 0; - size_t cd_nelemts = 0; - - TESTING("compression") #ifdef H5_HAVE_FILTER_DEFLATE + unsigned int flags = 0; + unsigned int config = 0; + size_t cd_nelemts = 0; + + printf("Testing %-62s", "compression"); + HDfflush(stdout); try { - /* Prepare property list to set compression, randomly use deflate */ - DSetCreatPropList dscreatplist; - dscreatplist.setDeflate(6); + /* Prepare property list to set compression, randomly use deflate */ + DSetCreatPropList dscreatplist; + dscreatplist.setDeflate(6); /* Create packet table with compression. */ FL_PacketTable wrapper(fileID, COMPRESS_PT, H5T_NATIVE_CHAR, 100, dscreatplist.getId()); - /* Close the property list */ - dscreatplist.close(); + /* Close the property list */ + dscreatplist.close(); - /* Verify that the deflate filter is set */ + /* Verify that the deflate filter is set */ /* Create an HDF5 C++ file object */ H5File file; @@ -293,52 +299,54 @@ int TestCompress() DSetCreatPropList dcpl = dset.getCreatePlist(); - char filter_name[8]; + char filter_name[8]; dcpl.getFilterById(H5Z_FILTER_DEFLATE, flags, cd_nelemts, NULL, 8, filter_name, config); - if (HDstrncmp(filter_name, "deflate", 7) != 0) - H5_FAILED() - } catch (Exception e) { - H5_FAILED(); - return 1; + if (HDstrncmp(filter_name, "deflate", 7) != 0) + H5_FAILED() + } + catch (Exception e) { + H5_FAILED(); + return 1; } PASSED(); #else SKIPPED(); - puts(" deflate filter not enabled"); + HDputs(" deflate filter not enabled"); #endif /* H5_HAVE_FILTER_DEFLATE */ return 0; } -const char* PT_TESTGETPT = "/TestGetPacket"; -int TestGetPacket() +const char *PT_TESTGETPT = "/TestGetPacket"; +int +TestGetPacket() { int record; int theRecs[3]; int i; - TESTING("GetPacket") + printf("Testing %-62s", "GetPacket"); + HDfflush(stdout); /* Create a dataset. Does not need to specify property list because there is no compression. */ FL_PacketTable wrapper(fileID, PT_TESTGETPT, H5T_NATIVE_INT, 1); - if(! wrapper.IsValid()) - goto error; + if (!wrapper.IsValid()) + goto error; /* Append 5 records to the dataset */ - for(record = 1; record < 6; record++) + for (record = 1; record < 6; record++) wrapper.AppendPacket(&record); /* Ensure that the records were written properly */ wrapper.GetPacket(1, &record); - if(record != 2) - goto error; + if (record != 2) + goto error; /* Ensure that we can retrieve multiple records */ wrapper.GetPackets(1, 3, theRecs); - for(i = 0; i < 3; i++) - { - if(theRecs[i] != i+2) - goto error; + for (i = 0; i < 3; i++) { + if (theRecs[i] != i + 2) + goto error; } PASSED(); @@ -349,108 +357,116 @@ error: return 1; } -const char* PT_TESTERROR = "/TestErrors"; +const char *PT_TESTERROR = "/TestErrors"; -int TestErrors() +int +TestErrors() { - TESTING("error conditions") + printf("Testing %-62s", "error conditions"); + HDfflush(stdout); /* Create a dataset */ FL_PacketTable wrapper(fileID, PT_TESTERROR, H5T_NATIVE_INT, 1); - if(! wrapper.IsValid()) - goto error; + if (!wrapper.IsValid()) + goto error; int record; int records[3]; int error; /* Append 4 records to the dataset */ - for(record = 1; record < 5; record++) + for (record = 1; record < 5; record++) wrapper.AppendPacket(&record); /* Try to confuse functions with bad indexes */ error = wrapper.GetPacket(static_cast<unsigned>(-1), &record); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPacket(4, &record); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPacket(static_cast<unsigned>(-250), &record); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPacket(3000, &record); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPacket(1, &record); - if(error < 0) - goto error; + if (error < 0) + goto error; error = wrapper.GetPackets(static_cast<unsigned>(-1), 1, records); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPackets(2, 4, records); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPackets(static_cast<unsigned>(-60), static_cast<unsigned>(-62), records); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPackets(10, 12, records); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPackets(0, 2, records); - if(error < 0) - goto error; + if (error < 0) + goto error; error = wrapper.GetPackets(2, 0, records); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetPackets(1, 1, records); - if(error < 0) - goto error; + if (error < 0) + goto error; error = wrapper.GetPackets(1, 3, records); - if(error < 0) - goto error; + if (error < 0) + goto error; wrapper.ResetIndex(); error = wrapper.SetIndex(static_cast<unsigned>(-1)); - if(error >= 0) - goto error; - if(wrapper.GetIndex(error) != 0) goto error; - if(error < 0) goto error; + if (error >= 0) + goto error; + if (wrapper.GetIndex(error) != 0) + goto error; + if (error < 0) + goto error; error = wrapper.GetNextPacket(&record); - if(error < 0) - goto error; - if(record != 1) - goto error; - if(wrapper.GetIndex(error) != 1) goto error; - if(error < 0) goto error; + if (error < 0) + goto error; + if (record != 1) + goto error; + if (wrapper.GetIndex(error) != 1) + goto error; + if (error < 0) + goto error; error = wrapper.SetIndex(20); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetNextPacket(&record); - if(error < 0) - goto error; - if(record != 2) - goto error; + if (error < 0) + goto error; + if (record != 2) + goto error; wrapper.SetIndex(3); error = wrapper.GetNextPacket(&record); - if(error < 0) - goto error; - if(record != 4) - goto error; - if(wrapper.GetIndex(error) != 4) goto error; - if(error < 0) goto error; + if (error < 0) + goto error; + if (record != 4) + goto error; + if (wrapper.GetIndex(error) != 4) + goto error; + if (error < 0) + goto error; error = wrapper.GetNextPacket(&record); - if(error >= 0) - goto error; + if (error >= 0) + goto error; wrapper.ResetIndex(); error = wrapper.GetNextPackets(10, records); - if(error >= 0) - goto error; + if (error >= 0) + goto error; error = wrapper.GetNextPackets(0, records); - if(error < 0) - goto error; + if (error < 0) + goto error; PASSED(); return 0; @@ -460,44 +476,44 @@ error: return 1; } -const char* PT_SYSTEMTST1 = "/SystemTest1"; -const char* PT_SYSTEMTST2 = "/SystemTest2"; -int SystemTest() +const char *PT_SYSTEMTST1 = "/SystemTest1"; +const char *PT_SYSTEMTST2 = "/SystemTest2"; +int +SystemTest() { - TESTING("multiple datatypes") + printf("Testing %-62s", "multiple datatypes"); + HDfflush(stdout); - hid_t dtypeID1, dtypeID2; + hid_t dtypeID1, dtypeID2; hsize_t count; - int error; + int error; /* Creating two inter-related datatypes. Create two datasets and put * one datatype in each. */ - typedef struct compoundType - { + typedef struct { short a, b, c; - int e; + int e; } compoundType; dtypeID1 = H5Tcreate(H5T_COMPOUND, sizeof(compoundType)); - H5Tinsert(dtypeID1, "abbey", HOFFSET( compoundType, a ), H5T_NATIVE_SHORT); - H5Tinsert(dtypeID1, "bert", HOFFSET( compoundType, b ), H5T_NATIVE_SHORT); - H5Tinsert(dtypeID1, "charlie", HOFFSET( compoundType, c ), H5T_NATIVE_SHORT); - H5Tinsert(dtypeID1, "ebert", HOFFSET( compoundType, e ), H5T_NATIVE_INT); + H5Tinsert(dtypeID1, "abbey", HOFFSET(compoundType, a), H5T_NATIVE_SHORT); + H5Tinsert(dtypeID1, "bert", HOFFSET(compoundType, b), H5T_NATIVE_SHORT); + H5Tinsert(dtypeID1, "charlie", HOFFSET(compoundType, c), H5T_NATIVE_SHORT); + H5Tinsert(dtypeID1, "ebert", HOFFSET(compoundType, e), H5T_NATIVE_INT); - typedef struct cType2 - { - char f; + typedef struct { + char f; compoundType g; } cType2; dtypeID2 = H5Tcreate(H5T_COMPOUND, sizeof(cType2)); - H5Tinsert(dtypeID2, "f", HOFFSET( cType2, f ), H5T_NATIVE_CHAR); - H5Tinsert(dtypeID2, "g", HOFFSET( cType2, g ), dtypeID1); + H5Tinsert(dtypeID2, "f", HOFFSET(cType2, f), H5T_NATIVE_CHAR); + H5Tinsert(dtypeID2, "g", HOFFSET(cType2, g), dtypeID1); cType2 ct2[10]; - ct2[0].f = 'h'; + ct2[0].f = 'h'; ct2[0].g.a = 9; ct2[0].g.b = -13; ct2[0].g.c = 0; @@ -507,17 +523,17 @@ int SystemTest() FL_PacketTable wrapper1(fileID, PT_SYSTEMTST1, dtypeID1, 1); FL_PacketTable wrapper2(fileID, H5P_DEFAULT, PT_SYSTEMTST2, dtypeID2, 1); - if(! wrapper1.IsValid()) - goto error; - if(! wrapper2.IsValid()) - goto error; + if (!wrapper1.IsValid()) + goto error; + if (!wrapper2.IsValid()) + goto error; /* Write and read packets, ensure that nothing is unusual */ wrapper2.AppendPacket(ct2); count = wrapper1.GetPacketCount(); - if(count != 0) - goto error; + if (count != 0) + goto error; compoundType ct1[10]; ct1[0].a = 31; @@ -534,13 +550,17 @@ int SystemTest() wrapper1.ResetIndex(); wrapper1.GetNextPacket(&ct1[1]); wrapper2.GetPacket(1, &ct2[2]); - if(wrapper1.GetIndex(error) != 1) goto error; - if(error < 0) goto error; - if(wrapper2.GetIndex(error) != 0) goto error; - if(error < 0) goto error; + if (wrapper1.GetIndex(error) != 1) + goto error; + if (error < 0) + goto error; + if (wrapper2.GetIndex(error) != 0) + goto error; + if (error < 0) + goto error; - if(ct1[1].b != ct2[2].g.b) - goto error; + if (ct1[1].b != ct2[2].g.b) + goto error; H5Tclose(dtypeID1); H5Tclose(dtypeID2); @@ -549,10 +569,12 @@ int SystemTest() return 0; error: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Tclose(dtypeID1); H5Tclose(dtypeID2); - } H5E_END_TRY; + } + H5E_END_TRY; H5_FAILED(); return 1; @@ -560,120 +582,117 @@ error: /*------------------------------------------------------------------------- * TestHDFFV_9758(): Test that a packet table with compound datatype which - * contains string type can be created and written correctly. (HDFFV-9758) + * contains string type can be created and written correctly. (HDFFV-9758) * * Notes: - * Previously, data of the field that follows the string was read back - * as garbage when #pragma pack(1) is used. + * Previously, data of the field that follows the string was read back + * as garbage when #pragma pack(1) is used. * 2016/10/20 -BMR * Updated: - * #pragma pack(1) caused failure on Emu because Sparc cannot - * access misaligned data. Changed it to pack() to do the - * default alignment. + * #pragma pack(1) caused failure on Emu because Sparc cannot + * access misaligned data. Changed it to pack() to do the + * default alignment. * 2016/10/25 -BMR *------------------------------------------------------------------------- */ -#pragma pack() // default alignment -const char* ABHI_PT("/abhiTest"); -const hsize_t NUM_PACKETS = 5; -const int STRING_LENGTH = 19; // including terminating NULL -int TestHDFFV_9758() +#pragma pack() // default alignment +const char * ABHI_PT("/abhiTest"); +const hsize_t NUM_PACKETS = 5; +const int STRING_LENGTH = 19; // including terminating NULL +int +TestHDFFV_9758() { - hid_t strtype; - hid_t compound_type; + hid_t strtype; + hid_t compound_type; herr_t err; - struct s1_t - { - int a; - float b; + struct s1_t { + int a; + float b; double c; - char d[STRING_LENGTH]; // null terminated string - int e; + char d[STRING_LENGTH]; // null terminated string + int e; }; s1_t s1[NUM_PACKETS]; - - for (hsize_t i = 0; i < NUM_PACKETS; i++) - { + + for (hsize_t i = 0; i < NUM_PACKETS; i++) { s1[i].a = i; s1[i].b = 1.f * static_cast<float>(i * i); s1[i].c = 1. / (i + 1); - sprintf(s1[i].d, "string%d", (int)i); - s1[i].e = 100+i; + HDsprintf(s1[i].d, "string%d", (int)i); + s1[i].e = 100 + i; } - TESTING("data corruption in packed structs (HDFFV-9758)") + printf("Testing %-62s", "data corruption in packed structs (HDFFV-9758)"); + HDfflush(stdout); // Build a compound datatype compound_type = H5Tcreate(H5T_COMPOUND, sizeof(s1_t)); if (compound_type < 0) - goto error; - + goto error; + err = H5Tinsert(compound_type, "a_name", HOFFSET(s1_t, a), H5T_NATIVE_INT); if (err < 0) - goto error; + goto error; err = H5Tinsert(compound_type, "b_name", HOFFSET(s1_t, b), H5T_NATIVE_FLOAT); if (err < 0) - goto error; + goto error; err = H5Tinsert(compound_type, "c_name", HOFFSET(s1_t, c), H5T_NATIVE_DOUBLE); if (err < 0) - goto error; + goto error; - strtype = H5Tcopy (H5T_C_S1); + strtype = H5Tcopy(H5T_C_S1); if (compound_type < 0) - goto error; - err = H5Tset_size (strtype, STRING_LENGTH); /* create string */ + goto error; + err = H5Tset_size(strtype, STRING_LENGTH); /* create string */ if (err < 0) - goto error; + goto error; err = H5Tinsert(compound_type, "d_name", HOFFSET(s1_t, d), strtype); if (err < 0) - goto error; + goto error; err = H5Tinsert(compound_type, "e_name", HOFFSET(s1_t, e), H5T_NATIVE_INT); if (err < 0) - goto error; + goto error; { // so ptable will go out of scope before PASSED - // Create a packet table - FL_PacketTable ptable(fileID, "/examplePacketTable", compound_type, 1); - if (!ptable.IsValid()) - goto error; + // Create a packet table + FL_PacketTable ptable(fileID, "/examplePacketTable", compound_type, 1); + if (!ptable.IsValid()) + goto error; + + // Add packets to the table + for (size_t i = 0; i < NUM_PACKETS; i++) { + /* Appends one packet at the current position */ + err = ptable.AppendPacket(s1 + i); + if (err < 0) + goto error; + } - // Add packets to the table - for (size_t i = 0; i < NUM_PACKETS; i++) - { - /* Appends one packet at the current position */ - err = ptable.AppendPacket(s1 + i); - if (err < 0) goto error; - } + // Check packet count + const hsize_t count = ptable.GetPacketCount(err); + if (err < 0) + goto error; - // Check packet count - const hsize_t count = ptable.GetPacketCount(err); - if (err < 0) - goto error; - - if (count != NUM_PACKETS) - { - std::cerr - << "Number of packets in packet table should be " << NUM_PACKETS - << " but is " << count << endl; - } + if (count != NUM_PACKETS) { + std::cerr << "Number of packets in packet table should be " << NUM_PACKETS << " but is " << count + << endl; + } - // Read and verify the data - ptable.ResetIndex(); - for (size_t i = 0; i < NUM_PACKETS; i++) - { - s1_t s2; - memset(&s2, 0, sizeof(s1_t)); - err = ptable.GetNextPacket(&s2); - if (err < 0) - goto error; - - if (s2.a != s1[i].a || s2.e != s1[i].e) - goto error; - else if (HDstrcmp(s2.d, s1[i].d)) - goto error; - } + // Read and verify the data + ptable.ResetIndex(); + for (size_t i = 0; i < NUM_PACKETS; i++) { + s1_t s2; + HDmemset(&s2, 0, sizeof(s1_t)); + err = ptable.GetNextPacket(&s2); + if (err < 0) + goto error; + + if (s2.a != s1[i].a || s2.e != s1[i].e) + goto error; + else if (HDstrcmp(s2.d, s1[i].d)) + goto error; + } } // end of ptable block PASSED(); @@ -681,13 +700,14 @@ int TestHDFFV_9758() error: - H5E_BEGIN_TRY { + H5E_BEGIN_TRY + { H5Tclose(strtype); H5Tclose(compound_type); H5Fclose(fileID); - } H5E_END_TRY; + } + H5E_END_TRY; H5_FAILED(); return 1; } - diff --git a/hl/c++/test/ptableTest.h b/hl/c++/test/ptableTest.h index 8af7bff..7504eb2 100644 --- a/hl/c++/test/ptableTest.h +++ b/hl/c++/test/ptableTest.h @@ -6,7 +6,7 @@ * This file is part of HDF5. The full HDF5 copyright notice, including * * terms governing use, modification, and redistribution, is contained in * * the COPYING file, which can be found at the root of the source code * - * distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. * + * distribution tree, or in https://www.hdfgroup.org/licenses. * * If you do not have access to either file, you may request a copy from * * help@hdfgroup.org. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ @@ -21,9 +21,9 @@ #ifndef PTABLETEST #define PTABLETEST +#include "h5hltest.h" #include "H5PacketTable.h" #include "H5Cpp.h" -#include "h5hltest.h" static hid_t fileID; |