From 1487c46f971c3321bc6241ee16922a1a21e4aad2 Mon Sep 17 00:00:00 2001
From: tbeu <tc@tbeu.de>
Date: Sun, 18 Aug 2024 10:30:31 +0200
Subject: [PATCH] Update test suite

---
 .github/workflows/checkCI.yml                 |  6 +--
 .../Resources/BuildProjects/CMake/test.cmake  | 51 +++++++++++++++++--
 .../Resources/Test/TablesFromMatFile.cc       |  3 +-
 3 files changed, 53 insertions(+), 7 deletions(-)

diff --git a/.github/workflows/checkCI.yml b/.github/workflows/checkCI.yml
index e647de8..8fb8a3e 100644
--- a/.github/workflows/checkCI.yml
+++ b/.github/workflows/checkCI.yml
@@ -49,7 +49,7 @@ jobs:
           elif [ "${{ matrix.compiler }}" == "mingw" ]; then
             cmake -S "$SRCDIR" -B build -DMODELICA_UTILITIES_INCLUDE_DIR="$TESTDIR" -DBUILD_TESTING=ON -DMODELICA_DEBUG_TIME_EVENTS=ON -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -G "MinGW Makefiles"
           else
-            cmake -S "$SRCDIR" -B build -DMODELICA_UTILITIES_INCLUDE_DIR="$TESTDIR" -DBUILD_TESTING=ON -DMODELICA_DEBUG_TIME_EVENTS=ON -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DCMAKE_C_FLAGS="-std=c89 -Wall -Wextra"
+            cmake -S "$SRCDIR" -B build -DMODELICA_UTILITIES_INCLUDE_DIR="$TESTDIR" -DBUILD_TESTING=ON -DMODELICA_DEBUG_TIME_EVENTS=ON -DCMAKE_BUILD_TYPE=${{ matrix.configuration }} -DCMAKE_C_FLAGS="-Wall -Wextra"
           fi
         env:
           SRCDIR: ${{ github.workspace }}/ModelicaTableAdditions/Resources
@@ -74,7 +74,7 @@ jobs:
   build_cmake_windows-cygwin:
     name: build_cmake_windows-cygwin
     runs-on: windows-latest
-    timeout-minutes: 5
+    timeout-minutes: 10
     strategy:
       matrix:
         configuration:
@@ -106,7 +106,7 @@ jobs:
       - name: Build with gcc
         run: |
           export PATH=/usr/bin:$PATH
-          cmake --build build -- -j8
+          cmake --build build
         shell: C:\cygwin\bin\bash.exe -eo pipefail -o igncr '{0}'
       - name: Run tests
         run: |
diff --git a/ModelicaTableAdditions/Resources/BuildProjects/CMake/test.cmake b/ModelicaTableAdditions/Resources/BuildProjects/CMake/test.cmake
index ef5fe87..93926d6 100644
--- a/ModelicaTableAdditions/Resources/BuildProjects/CMake/test.cmake
+++ b/ModelicaTableAdditions/Resources/BuildProjects/CMake/test.cmake
@@ -41,9 +41,53 @@ if(CYGWIN)
   file(WRITE "${zlib_SOURCE_DIR}/win32/zlib1.rc" "${ZLIB_RC_CONTENT}")
 endif()
 
+set(ZLIB_FOUND ON)
 set(ZLIB_INCLUDE_DIR ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR})
+set(ZLIB_INCLUDE_DIRS ${zlib_SOURCE_DIR} ${zlib_BINARY_DIR})
+set(ZLIB_USE_EXTERNAL ON)
 
-set_target_properties(gtest gtest_main zlib zlibstatic PROPERTIES FOLDER "Test/Third-party")
+FetchContent_Declare(
+  hdf5
+  GIT_REPOSITORY https://github.com/HDFGroup/hdf5.git
+  GIT_TAG hdf5_1.14.4.3
+)
+
+set(HDF5_EXTERNALLY_CONFIGURED ON CACHE BOOL "" FORCE)
+set(HDF5_DISABLE_COMPILER_WARNINGS ON CACHE BOOL "" FORCE)
+set(HDF5_ENABLE_ALL_WARNINGS OFF CACHE BOOL "" FORCE)
+set(HDF5_ENABLE_DEPRECATED_SYMBOLS OFF CACHE BOOL "" FORCE)
+set(HDF5_ENABLE_NONSTANDARD_FEATURES OFF CACHE BOOL "" FORCE)
+set(HDF5_ENABLE_SZIP_SUPPORT OFF CACHE BOOL "" FORCE)
+set(HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "" FORCE)
+set(HDF5_ENABLE_WARNINGS_AS_ERRORS OFF CACHE BOOL "" FORCE)
+set(HDF5_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
+set(HDF5_BUILD_PARALLEL_TOOLS OFF CACHE BOOL "" FORCE)
+set(HDF5_BUILD_TOOLS OFF CACHE BOOL "" FORCE)
+set(HDF5_BUILD_UTILS OFF CACHE BOOL "" FORCE)
+set(HDF5_BUILD_HL_LIB OFF CACHE BOOL "" FORCE)
+set(HDF5_INSTALL_NO_DEVELOPMENT ON CACHE BOOL "" FORCE)
+set(HDF5_TEST_CPP OFF CACHE BOOL "" FORCE)
+set(HDF5_TEST_EXAMPLES OFF CACHE BOOL "" FORCE)
+set(HDF5_TEST_SERIAL OFF CACHE BOOL "" FORCE)
+set(HDF5_TEST_SWMR OFF CACHE BOOL "" FORCE)
+set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE)
+
+FetchContent_MakeAvailable(hdf5)
+
+# Patch CMakeLists.txt file to skip any installation
+file(READ "${hdf5_SOURCE_DIR}/CMakeLists.txt" HDF5_CMAKELISTS_CONTENT)
+string(REPLACE "include (CMakeInstallation.cmake)" "" HDF5_CMAKELISTS_CONTENT "${HDF5_CMAKELISTS_CONTENT}")
+file(WRITE "${hdf5_SOURCE_DIR}/CMakeLists.txt" "${HDF5_CMAKELISTS_CONTENT}")
+
+# Patch CMakeLists.txt file to skip any installation
+file(READ "${hdf5_SOURCE_DIR}/src/CMakeLists.txt" HDF5_CMAKELISTS_CONTENT)
+string(REPLACE "# Add Target(s) to CMake Install for import into other projects" "if (FALSE)" HDF5_CMAKELISTS_CONTENT "${HDF5_CMAKELISTS_CONTENT}")
+string(REPLACE "# Option to build documentation" "endif()" HDF5_CMAKELISTS_CONTENT "${HDF5_CMAKELISTS_CONTENT}")
+file(WRITE "${hdf5_SOURCE_DIR}/src/CMakeLists.txt" "${HDF5_CMAKELISTS_CONTENT}")
+
+set(HDF5_INCLUDE_DIR "${hdf5_SOURCE_DIR}/src" "${hdf5_SOURCE_DIR}/src/H5FDsubfiling" "${hdf5_BINARY_DIR}/src")
+
+set_target_properties(gtest gtest_main hdf5-static zlib zlibstatic PROPERTIES FOLDER "Test/Third-party")
 
 set(MODELICA_TABLE_ADDITIONS_TEST_DIR "${MODELICA_TABLE_ADDITIONS_RESOURCES_DIR}/Test")
 if(EXISTS "${MODELICA_TABLE_ADDITIONS_TEST_DIR}")
@@ -82,8 +126,8 @@ if(EXISTS "${MODELICA_TABLE_ADDITIONS_TEST_DIR}")
   if(MSVC)
     target_compile_options(ModelicaTableAdditionsTestCommon PRIVATE /wd4267)
   endif()
-  target_compile_definitions(ModelicaTableAdditionsTestCommon PRIVATE -DHAVE_ZLIB=1)
-  target_include_directories(ModelicaTableAdditionsTestCommon PRIVATE ${ZLIB_INCLUDE_DIR})
+  target_compile_definitions(ModelicaTableAdditionsTestCommon PRIVATE -DHAVE_ZLIB=1 -DHAVE_HDF5=1)
+  target_include_directories(ModelicaTableAdditionsTestCommon PRIVATE ${ZLIB_INCLUDE_DIR} ${HDF5_INCLUDE_DIR})
 
   set(MODELICA_TESTS
     Tables
@@ -106,6 +150,7 @@ if(EXISTS "${MODELICA_TABLE_ADDITIONS_TEST_DIR}")
       ModelicaTableAdditionsTestCommon
       parson
       gtest
+      hdf5-static
       zlibstatic
     )
     if(UNIX)
diff --git a/ModelicaTableAdditions/Resources/Test/TablesFromMatFile.cc b/ModelicaTableAdditions/Resources/Test/TablesFromMatFile.cc
index 9bfaac8..d18678d 100644
--- a/ModelicaTableAdditions/Resources/Test/TablesFromMatFile.cc
+++ b/ModelicaTableAdditions/Resources/Test/TablesFromMatFile.cc
@@ -33,7 +33,8 @@ INSTANTIATE_TEST_SUITE_P(
     ::testing::Values(
         std::make_pair("../Data/Tables/test_v4.mat", "tab1"),
         std::make_pair("../Data/Tables/test_v6.mat", "tab1"),
-        std::make_pair("../Data/Tables/test_v7.mat", "tab1"))
+        std::make_pair("../Data/Tables/test_v7.mat", "tab1"),
+        std::make_pair("../Data/Tables/test_v7.3.mat", "tab1"))
 );
 
 } // namespace