Test with newer compilers in CI
authorMark Abraham <mark.j.abraham@gmail.com>
Wed, 30 Jun 2021 11:14:21 +0000 (11:14 +0000)
committerAndrey Alekseenko <al42and@gmail.com>
Wed, 30 Jun 2021 11:14:21 +0000 (11:14 +0000)
Now compiles with clang 12 and gcc 11 without warnings in various
configurations. Did not update santizer configurations as they're
already on clang 11.

Adjusted various CI job intents to be either accurate or placed on
more suitable configurations.

Eliminated one build container, since we target only gcc versions that
are most recent supported, oldest supported, and if needed also those
required for e.g. support of most recent and oldest supported CUDA
versions.

Code changes mostly related to false positives.

Suppresses a false-positive warning in GoogleTest

Avoids warnings about loop variables referring to temporaries. Our
usage was safe, but the warning is potentially valuable elsewhere, so
we should respect it.

Rewrote a test with idiomatic value-parametrization to avoid a warning
about a reference to a temporary

Refs #3912

32 files changed:
admin/containers/buildall.sh
admin/containers/scripted_gmx_docker_builds.py
admin/containers/utility.py
admin/gitlab-ci/gromacs.gitlab-ci.yml
admin/gitlab-ci/gromacs.matrix.gitlab-ci.yml
admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-mpi.gitlab-ci.yml [moved from admin/gitlab-ci/gromacs.matrix/gromacs.clang-9-mpi.gitlab-ci.yml with 68% similarity]
admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-release.gitlab-ci.yml [moved from admin/gitlab-ci/gromacs.matrix/gromacs.clang-9-release.gitlab-ci.yml with 72% similarity]
admin/gitlab-ci/gromacs.matrix/gromacs.clang-static-analyzer.gitlab-ci.yml
admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml [moved from admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10-coverage.gitlab-ci.yml with 78% similarity]
admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml [moved from admin/gitlab-ci/gromacs.matrix/gromacs.gcc-9-release.gitlab-ci.yml with 74% similarity]
admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml [moved from admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10.gitlab-ci.yml with 77% similarity]
admin/gitlab-ci/gromacs.matrix/gromacs.hipsycl-dev.gitlab-ci.yml
admin/gitlab-ci/python-gmxapi01.gitlab-ci.yml
admin/gitlab-ci/python-gmxapi02.gitlab-ci.yml
admin/gitlab-ci/sample_restraint.gitlab-ci.yml
src/external/googletest/README.Gromacs
src/external/googletest/googletest/cmake/internal_utils.cmake
src/gromacs/gmxpreprocess/h_db.cpp
src/gromacs/utility/tests/path.cpp
src/gromacs/utility/tests/refdata/PathTest_SearchOperationsWork.xml [deleted file]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_0.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_1.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_10.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_2.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_3.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_4.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_5.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_6.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_7.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_8.xml [new file with mode: 0644]
src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_9.xml [new file with mode: 0644]
src/programs/mdrun/tests/periodicactions.cpp

index 75d6292f0d730e954ef099753ac6ff780dd882d1..7acf6888ef957261841277fb92fbc793441e508f 100755 (executable)
@@ -9,13 +9,12 @@ SCRIPT=$PWD/scripted_gmx_docker_builds.py
 # images needed, because the same one can test library,
 # thread and no MPI configurations.
 
-args[${#args[@]}]="--gcc 10 --clfft --mpi openmpi --rocm"
-args[${#args[@]}]="--gcc 9 --clfft --mpi openmpi --rocm"
+args[${#args[@]}]="--gcc 11 --clfft --mpi openmpi --rocm"
 args[${#args[@]}]="--gcc 10 --cuda 11.2.2 --clfft --mpi openmpi"
 args[${#args[@]}]="--gcc 7 --cuda 11.0 --clfft --mpi openmpi"
 args[${#args[@]}]="--llvm 11 --tsan"
 args[${#args[@]}]="--llvm 8 --cuda 11.0 --clfft --mpi openmpi"
-args[${#args[@]}]="--llvm 9 --clfft --mpi openmpi --rocm"
+args[${#args[@]}]="--llvm 12 --clfft --mpi openmpi --rocm"
 args[${#args[@]}]="--oneapi 2021.1.1"
 args[${#args[@]}]="--oneapi 2021.2.0 --intel-compute-runtime 21.21.19914"
 args[${#args[@]}]="--llvm --doxygen --mpi openmpi --venvs 3.7.7"
index 4071663ef2f4bbda0ba58474bbb432ffd3f0c1af..d50ab66cde2771a1238134c1b24fed4f3161b63b 100755 (executable)
@@ -208,6 +208,27 @@ def base_image_tag(args) -> str:
             raise RuntimeError('Logic error: no Linux distribution selected.')
     return base_image_tag
 
+# Convert the linux distribution variables into something that hpccm
+# understands.
+def hpccm_distro_name(args) -> str:
+    if args.centos is not None:
+        name_mapping = { '7': 'centos7',
+                         '8': 'centos8' }
+        if args.centos in name_mapping:
+            hpccm_name = name_mapping[args.centos]
+        else:
+            raise RuntimeError('Logic error: unsupported CentOS distribution selected.')
+    elif args.ubuntu is not None:
+        name_mapping = { '20.04': 'ubuntu20',
+                         '18.04': 'ubuntu18',
+                         '16.04': 'ubuntu16' }
+        if args.ubuntu in name_mapping:
+            hpccm_name = name_mapping[args.ubuntu]
+        else:
+            raise RuntimeError('Logic error: unsupported Ubuntu distribution selected.')
+    else:
+        raise RuntimeError('Logic error: no Linux distribution selected.')
+    return hpccm_name
 
 def get_llvm_packages(args) -> typing.Iterable[str]:
     # If we use the package version of LLVM, we need to install extra packages for it.
@@ -247,7 +268,10 @@ def get_compiler(args, compiler_build_stage: hpccm.Stage = None) -> bb_base:
                 raise RuntimeError('No TSAN compiler build stage!')
         # Build the default compiler if we don't need special support
         else:
-            compiler = hpccm.building_blocks.llvm(extra_repository=True, version=args.llvm)
+            # Currently the focal apt repositories do not contain
+            # llvm higher than 11, so we work around that. This will
+            # need further work when we start supporting ubuntu 22.04
+            compiler = hpccm.building_blocks.llvm(version=args.llvm, upstream=True if int(args.llvm) > 11 else False)
 
     elif args.oneapi is not None:
         if compiler_build_stage is not None:
@@ -634,6 +658,11 @@ def build_stages(args) -> typing.Iterable[hpccm.Stage]:
     building_blocks['base_packages'] = hpccm.building_blocks.packages(
         ospackages=_common_packages)
 
+    # Normally in hpccm the first call to baseimage sets the context
+    # for other packages, e.g. for which apt respository to
+    # use. We want to set that early on.
+    hpccm.config.set_linux_distro(hpccm_distro_name(args))
+
     # These are the most expensive and most reusable layers, so we put them first.
     building_blocks['compiler'] = get_compiler(args, compiler_build_stage=stages.get('compiler_build'))
     building_blocks['gdrcopy'] = get_gdrcopy(args, building_blocks['compiler'])
index 192a1ffd59005160a934b504d21905d9b87c347b..dfa27e331fadc09d51929f766da9fb470f938653 100644 (file)
@@ -174,7 +174,8 @@ def image_name(configuration: argparse.Namespace) -> str:
     if configuration.intel_compute_runtime is not None:
         elements.append('intel-' + configuration.intel_compute_runtime)
     if configuration.rocm is not None:
-        elements.append('rocm-' + configuration.rocm)
+        if (configuration.rocm != 'debian'):
+            elements.append('rocm-' + configuration.rocm)
 
     # Check for special cases
     # The following attribute keys indicate the image is built for the named
index 29b94d6140dac1ed811738ef7114f56285308353..7d2af7a1e644b2bf4e4eca717a7ad144fc9fb664 100644 (file)
@@ -9,7 +9,7 @@
 #   Scope: configure, build, unit tests
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
-#   Compiler: Clang 9
+#   Compiler: Clang 12
 #   FFT: FFTW3
 #   Parallelism nt/ntomp: 4/2
 
@@ -21,7 +21,8 @@ simple-build:
     - .use-clang:base
     - .rules:basic-push
   stage: pre-build
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
+
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     KUBERNETES_CPU_LIMIT: 8
@@ -33,7 +34,7 @@ simple-build:
     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=Debug"
     CMAKE_GPU_OPTIONS: "-DGMX_GPU=OFF"
     CMAKE_GMXAPI_OPTIONS: "-DGMX_PYTHON_PACKAGE=OFF"
-    COMPILER_MAJOR_VERSION: 9
+    COMPILER_MAJOR_VERSION: 12
     BUILD_DIR: simple-build
   script:
     - CMAKE=${CMAKE:-$(which cmake)}
index a664ff14f35280f1d0b6115a4c92b07cdb630369..5ce725e4f2517fef85c390bdca6319cc70e22245 100644 (file)
 include:
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8-cuda-11.0-release.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-8.gitlab-ci.yml'
-  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-9-mpi.gitlab-ci.yml'
-  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-9-release.gitlab-ci.yml'
+  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-mpi.gitlab-ci.yml'
+  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-release.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-11-cuda-11.2.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-ASAN.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-static-analyzer.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-TSAN.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.clang-UBSAN.gitlab-ci.yml'
-  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10.gitlab-ci.yml'
-  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10-coverage.gitlab-ci.yml'  
+  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml'
+  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-7-cuda-11.0.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10-cuda-11.2.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10-cuda-11.2-release.gitlab-ci.yml'
-  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-9-release.gitlab-ci.yml'
+  - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.hipsycl-dev.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.1.1-opencl.gitlab-ci.yml'
   - local: '/admin/gitlab-ci/gromacs.matrix/gromacs.oneapi-2021.1.1-opencl-release.gitlab-ci.yml'
similarity index 68%
rename from admin/gitlab-ci/gromacs.matrix/gromacs.clang-9-mpi.gitlab-ci.yml
rename to admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-mpi.gitlab-ci.yml
index d3010839981d0036cc39908e0fd78ef1c8fe4308..85713c08c33d53944ed1714be17f6d8bdbaf7eb0 100644 (file)
@@ -1,7 +1,7 @@
 # Test goal: Clang build with MPI and double precision
 # Test intents (should change rarely and conservatively):
 #   OS: Ubuntu oldest supported
-#   Compiler: Clang
+#   Compiler: Clang newest supported
 #   GPU: no
 #   MPI: OpenMPI
 #   Features: double precision FP
@@ -9,28 +9,28 @@
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
 #   Build type: Debug
-#   Compiler: Clang 9
+#   Compiler: Clang 12
 #   MPI: OpenMPI 3.1
 #   SIMD: AVX2_256
 #   FFT: FFTW3
 #   Parallelism np/ntomp: 4/2
 #   Subcyclecounting: Active
 
-gromacs:clang-9-mpi:configure:
+gromacs:clang-12-mpi:configure:
   extends:
    - .gromacs:base:configure
    - .use-clang:base
    - .use-mpi
    - .rules:merge-requests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.17.2/bin/cmake
-    COMPILER_MAJOR_VERSION: 9
+    COMPILER_MAJOR_VERSION: 12
     CMAKE_PRECISION_OPTIONS: -DGMX_DOUBLE=ON
     CMAKE_EXTRA_OPTIONS: -DGMX_CYCLE_SUBCOUNTERS=ON -DGMX_INSTALL_LEGACY_API=ON
 
-gromacs:clang-9-mpi:build:
-  # Test using configuration: gromacs:clang-9-mpi:configure
+gromacs:clang-12-mpi:build:
+  # Test using configuration: gromacs:clang-12-mpi:configure
   # Test scope: build
   extends:
     - .variables:default
@@ -38,29 +38,29 @@ gromacs:clang-9-mpi:build:
     - .before_script:default
     - .use-ccache
     - .rules:merge-requests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.17.2/bin/cmake
   needs:
-    - job: gromacs:clang-9-mpi:configure
+    - job: gromacs:clang-12-mpi:configure
 
-gromacs:clang-9-mpi:test:
+gromacs:clang-12-mpi:test:
   extends:
     - .gromacs:base:test
     - .rules:merge-requests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.17.2/bin/cmake
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:clang-9-mpi:build
+    - job: gromacs:clang-12-mpi:build
 
-gromacs:clang-9:regressiontest:
+gromacs:clang-12:regressiontest:
   extends:
     - .gromacs:base:regressiontest
     - .rules:merge-requests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.17.2/bin/cmake
     REGRESSIONTEST_DOUBLE: "-double"
@@ -68,6 +68,6 @@ gromacs:clang-9:regressiontest:
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:clang-9-mpi:build
+    - job: gromacs:clang-12-mpi:build
     - job: regressiontests:prepare
 
similarity index 72%
rename from admin/gitlab-ci/gromacs.matrix/gromacs.clang-9-release.gitlab-ci.yml
rename to admin/gitlab-ci/gromacs.matrix/gromacs.clang-12-release.gitlab-ci.yml
index 32ad653109cd5591f4e4e45c4362ca41a024c424..67363c4e53e11ee8731440578b21248b7356f433 100644 (file)
@@ -1,7 +1,7 @@
 # Test goal: Release build with Clang, MPI, and double-precision
 # Test intents (should change rarely and conservatively):
 #   OS: Ubuntu oldest supported
-#   Compiler: Clang
+#   Compiler: Clang newest supported
 #   MPI: OpenMPI
 #   GPU: no
 #   Features: double precision FP
@@ -9,22 +9,22 @@
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
 #   Build type: RelWithAssert
-#   Compiler: Clang 9
+#   Compiler: Clang 12
 #   MPI: OpenMPI 3.1
 #   SIMD: AVX2_256
 #   FFT: FFTW3
 #   Parallelism np/ntomp: 4/2
 
-gromacs:clang-9:release:configure:
+gromacs:clang-12:release:configure:
   extends:
     - .gromacs:base:release:configure
     - .use-clang:base
     - .use-mpi
     - .rules:nightly-only-for-release
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
-    COMPILER_MAJOR_VERSION: 9
+    COMPILER_MAJOR_VERSION: 12
     RELEASE_BUILD_DIR: release-builds-clang
     CMAKE_PRECISION_OPTIONS: "-DGMX_DOUBLE=ON"
     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
@@ -33,7 +33,7 @@ gromacs:clang-9:release:configure:
     - regressiontests:package
     - prepare-release-version
 
-gromacs:clang-9:release:build:
+gromacs:clang-12:release:build:
   extends:
     - .variables:default
     - .gromacs:base:build
@@ -44,29 +44,29 @@ gromacs:clang-9:release:build:
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     BUILD_DIR: release-builds-clang
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   needs:
-    - job: gromacs:clang-9:release:configure
+    - job: gromacs:clang-12:release:configure
 
-gromacs:clang-9:release:test:
+gromacs:clang-12:release:test:
   extends:
     - .gromacs:base:test
     - .rules:nightly-only-for-release
   stage: release-tests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     BUILD_DIR: release-builds-clang
   needs:
-    - job: gromacs:clang-9:release:configure
-    - job: gromacs:clang-9:release:build
+    - job: gromacs:clang-12:release:configure
+    - job: gromacs:clang-12:release:build
 
-gromacs:clang-9:release:regressiontest:
+gromacs:clang-12:release:regressiontest:
   extends:
     - .gromacs:base:regressiontest
     - .rules:nightly-only-for-release
   stage: release-tests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-llvm-12
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     BUILD_DIR: release-builds-clang
@@ -75,6 +75,6 @@ gromacs:clang-9:release:regressiontest:
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:clang-9:release:build
+    - job: gromacs:clang-12:release:build
     - job: regressiontests:package
 
index 39536fb831315f2c059f684a34c58cc460a939e5..722e5a28f879247c5555802f7abeefb066c198f1 100644 (file)
@@ -10,7 +10,7 @@
 #   Scope: configure, build
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
-#   Compiler: Clang 8
+#   Compiler: Clang 11
 
 gromacs:clang-static-analyzer:configure:
   extends:
similarity index 78%
rename from admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10-coverage.gitlab-ci.yml
rename to admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-coverage.gitlab-ci.yml
index b8e2190c94fd112a069e760c7672a42fa8ab326a..82c2ede108c9a8f66316059f03197702959f9f1c 100644 (file)
@@ -1,53 +1,53 @@
 # Test goal: code coverage with newest GCC
 # Test intents (should change rarely and conservatively):
 #   OS: Ubuntu newest supported
-#   Compiler: GCC newest supported
+#   Compiler: GCC
 #   GPU: no
 #   Scope: configure, build, unit tests, coverage
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
 #   Build type: Debug
-#   Compiler: GCC 10
+#   Compiler: GCC 11
 #   MPI: thread_MPI
 #   SIMD: AVX2_256
 #   Parallelism nt/ntomp: 4/2 (unit tests)
 
-gromacs:gcc-10:coverage:configure:
+gromacs:gcc-11:coverage:configure:
   extends:
     - .gromacs:base:configure
     - .use-gcc:base
     - .rules:post-merge-acceptance
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.18.4/bin/cmake
     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
     CMAKE_EXTRA_OPTIONS: "-DGMX_BUILD_FOR_COVERAGE=ON"
-    COMPILER_MAJOR_VERSION: 10
+    COMPILER_MAJOR_VERSION: 11
 
-gromacs:gcc-10:coverage:build:
+gromacs:gcc-11:coverage:build:
   extends:
     - .variables:default
     - .gromacs:base:build
     - .before_script:default
     - .use-ccache
     - .rules:post-merge-acceptance
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.18.4/bin/cmake
   needs:
-    - job: gromacs:gcc-10:coverage:configure
+    - job: gromacs:gcc-11:coverage:configure
 
-gromacs:gcc-10:coverage:test:
+gromacs:gcc-11:coverage:test:
   extends:
     - .gromacs:base:test
     - .rules:post-merge-acceptance
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.18.4/bin/cmake
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:gcc-10:coverage:build
+    - job: gromacs:gcc-11:coverage:build
   artifacts:
     paths:
       - $BUILD_DIR
@@ -56,16 +56,16 @@ gromacs:coverage:analyse:
   variables:
     CMAKE: /usr/local/cmake-3.18.4/bin/cmake
     VENVPATH: "/root/venv/py3.7"
-    GCOVR_GENERAL_OPTIONS: "-r ../ /. --gcov-executable=gcov-10 --exclude-unreachable-branches --exclude-throw-branches -j$KUBERNETES_CPU_LIMIT"
+    GCOVR_GENERAL_OPTIONS: "-r ../ /. --gcov-executable=gcov-11 --exclude-unreachable-branches --exclude-throw-branches -j$KUBERNETES_CPU_LIMIT"
     GCOVR_EXCLUDE_OPTIONS: "--exclude-directories '^src/external/.*' --exclude-directories '^src/gromacs/selection/.*' --exclude-directories '.*tests.*" 
   extends:
     - .variables:default
     - .rules:post-merge-acceptance
   stage: post-test
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   needs:
-    - job: gromacs:gcc-10:coverage:build
-    - job: gromacs:gcc-10:coverage:test
+    - job: gromacs:gcc-11:coverage:build
+    - job: gromacs:gcc-11:coverage:test
 
   tags:
     - k8s-scilifelab
similarity index 74%
rename from admin/gitlab-ci/gromacs.matrix/gromacs.gcc-9-release.gitlab-ci.yml
rename to admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11-release.gitlab-ci.yml
index 846f36aaa58b5c52f71d99a7effe048d583cdca7..908ff6e91f4c439fae833254823fce8f1f826401 100644 (file)
@@ -1,30 +1,30 @@
 # Test goal: Release build with GCC and OpenCL
 # Test intents (should change rarely and conservatively):
 #   OS: Ubuntu oldest supported
-#   Compiler: GCC
+#   Compiler: GCC newest supported
 #   GPU: OpenCL
 #   HW: AMD GPU
 #   Scope: configure, build, unit tests, regression tests
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
 #   Build type: RelWithAssert
-#   Compiler: GCC 9
+#   Compiler: GCC 11
 #   MPI: thread_MPI
 #   SIMD: AVX2_256
 #   FFT: FFTW3
 #   Parallelism nt/ntomp: 4/2 (unit tests)
 #   Parallelism nt/ntomp: 2/1 (regression tests)
 
-gromacs:gcc-9:release:configure:
+gromacs:gcc-11:release:configure:
   extends:
     - .gromacs:base:release:configure
     - .use-gcc:base
     - .use-opencl
     - .rules:nightly-only-for-release
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
-    COMPILER_MAJOR_VERSION: 9
+    COMPILER_MAJOR_VERSION: 11
     RELEASE_BUILD_DIR: release-builds-gcc
     CMAKE_BUILD_TYPE_OPTIONS: "-DCMAKE_BUILD_TYPE=RelWithAssert"
   dependencies:
@@ -32,8 +32,8 @@ gromacs:gcc-9:release:configure:
     - regressiontests:package
     - prepare-release-version
 
-gromacs:gcc-9:release:build:
-  # Test using configuration: gromacs:gcc-9:release:configure
+gromacs:gcc-11:release:build:
+  # Test using configuration: gromacs:gcc-11:release:configure
   # Test scope: build
   extends:
     - .variables:default
@@ -45,16 +45,16 @@ gromacs:gcc-9:release:build:
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     BUILD_DIR: release-builds-gcc
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   needs:
-    - job: gromacs:gcc-9:release:configure
+    - job: gromacs:gcc-11:release:configure
 
-gromacs:gcc-9:release:test:
+gromacs:gcc-11:release:test:
   extends:
     - .gromacs:base:test
     - .rules:nightly-only-for-release
   stage: release-tests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     BUILD_DIR: release-builds-gcc
@@ -64,15 +64,15 @@ gromacs:gcc-9:release:test:
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:gcc-9:release:configure
-    - job: gromacs:gcc-9:release:build
+    - job: gromacs:gcc-11:release:configure
+    - job: gromacs:gcc-11:release:build
 
-gromacs:gcc-9:release:regressiontest:
+gromacs:gcc-11:release:regressiontest:
   extends:
     - .gromacs:base:regressiontest
     - .rules:nightly-only-for-release
   stage: release-tests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-9
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     BUILD_DIR: release-builds-gcc
@@ -85,6 +85,6 @@ gromacs:gcc-9:release:regressiontest:
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:gcc-9:release:build
+    - job: gromacs:gcc-11:release:build
     - job: regressiontests:package
 
similarity index 77%
rename from admin/gitlab-ci/gromacs.matrix/gromacs.gcc-10.gitlab-ci.yml
rename to admin/gitlab-ci/gromacs.matrix/gromacs.gcc-11.gitlab-ci.yml
index 64cb95d1b51865f6dc6cdc53f93c9512744b1c73..b08e1da0459fae3697a075728ea64645232dbe81 100644 (file)
@@ -9,43 +9,43 @@
 # Test implementation choices (free to change as needed):
 #   OS: Ubuntu 20.04
 #   Build type: Debug
-#   Compiler: GCC 10
+#   Compiler: GCC 11
 #   MPI: thread_MPI
 #   SIMD: AVX2_256
 #   Parallelism nt/ntomp: 4/2 (unit tests)
 #   Parallelism nt/ntomp: 2/1 (regression tests)
 
-gromacs:gcc-10:configure:
+gromacs:gcc-11:configure:
   extends:
     - .gromacs:base:configure
     - .use-gcc:base
     - .use-opencl
     - .rules:merge-and-post-merge-acceptance
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     CMAKE_SIMD_OPTIONS: "-DGMX_SIMD=AVX2_256"
     CMAKE_EXTRA_OPTIONS: "-DGMX_EXTERNAL_CLFFT=ON"
-    COMPILER_MAJOR_VERSION: 10
+    COMPILER_MAJOR_VERSION: 11
 
-gromacs:gcc-10:build:
+gromacs:gcc-11:build:
   extends:
     - .variables:default
     - .gromacs:base:build
     - .before_script:default
     - .use-ccache
     - .rules:merge-and-post-merge-acceptance
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
   needs:
-    - job: gromacs:gcc-10:configure
+    - job: gromacs:gcc-11:configure
 
-gromacs:gcc-10:test:
+gromacs:gcc-11:test:
   extends:
     - .gromacs:base:test
     - .rules:merge-requests
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
@@ -54,13 +54,13 @@ gromacs:gcc-10:test:
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:gcc-10:build
+    - job: gromacs:gcc-11:build
 
-gromacs:gcc-10:regressiontest:
+gromacs:gcc-11:regressiontest:
   extends:
     - .gromacs:base:regressiontest
     - .rules:post-merge-acceptance
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   variables:
     CMAKE: /usr/local/cmake-3.16.3/bin/cmake
     KUBERNETES_EXTENDED_RESOURCE_NAME: "amd.com/gpu"
@@ -72,6 +72,6 @@ gromacs:gcc-10:regressiontest:
   tags:
     - k8s-scilifelab
   needs:
-    - job: gromacs:gcc-10:build
+    - job: gromacs:gcc-11:build
     - job: regressiontests:prepare
 
index 93d645170c4e18adb4ef6260798515782d07a396..bd6b25e8f5c3d145332ee56c6405043cdb0c4e18 100644 (file)
@@ -1,7 +1,7 @@
 # Test goal: build with hipSYCL (both CUDA and ROCm backends) to check SYCL code compatibility
 # Test intents (should change rarely and conservatively):
 #   OS: Ubuntu newest supported
-#   Compiler: Clang newest supported
+#   Compiler: Clang
 #   GPU: hipSYCL
 #   Scope: configure, build
 # Test implementation choices (free to change as needed):
index 32de191be57460f81a52de89e0a5c1a710c76f04..280b2aa289131b9663262aa5fe95488ec8a5bdef 100644 (file)
@@ -74,11 +74,11 @@ gmxapi-0.1:clang-8:py-3.8.2:
     VENVPATH: "/root/venv/py3.8"
     PY_VER: "3.8.2"
 
-.gmxapi-0.2:gcc-10:gmx2021:
+.gmxapi-0.2:gcc-11:gmx2021:
   extends:
     - .variables:default
     - .use-clang:base
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   stage: test
   variables:
     KUBERNETES_CPU_LIMIT: 2
@@ -105,36 +105,36 @@ gmxapi-0.1:clang-8:py-3.8.2:
     - k8s-scilifelab
   # The dependency means we need to use the same tag restriction as upstream.
   needs:
-    - job: gromacs:gcc-10:build
+    - job: gromacs:gcc-11:build
       artifacts: true
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.6.10:
+gmxapi-0.2:gcc-11:gmx2021:py-3.6.10:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.6"
     PY_VER: "3.6.10"
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.7.7:
+gmxapi-0.2:gcc-11:gmx2021:py-3.7.7:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.7"
     PY_VER: "3.7.7"
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.8.2:
+gmxapi-0.2:gcc-11:gmx2021:py-3.8.2:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.8"
     PY_VER: "3.8.2"
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.9.1:
+gmxapi-0.2:gcc-11:gmx2021:py-3.9.1:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.9"
index fc267ecfa7e993db009f40ed381bf6662686e633..6e132b4b1ea3b1ee7bdd461a0eaf340de2269cb5 100644 (file)
@@ -2,11 +2,11 @@
 # Jobs to test gmxapi client (Python) packages
 #
 
-.gmxapi-0.2:gcc-10:gmx2021:
+.gmxapi-0.2:gcc-11:gmx2021:
   extends:
     - .variables:default
     - .use-clang:base
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   stage: test
   variables:
     KUBERNETES_CPU_LIMIT: 2
     - k8s-scilifelab
   # The dependency means we need to use the same tag restriction as upstream.
   needs:
-    - job: gromacs:gcc-10:build
+    - job: gromacs:gcc-11:build
       artifacts: true
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.6.10:
+gmxapi-0.2:gcc-11:gmx2021:py-3.6.10:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.6"
     PY_VER: "3.6.10"
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.7.7:
+gmxapi-0.2:gcc-11:gmx2021:py-3.7.7:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.7"
     PY_VER: "3.7.7"
 
-gmxapi-0.2:gcc-10:gmx2021:py-3.8.2:
+gmxapi-0.2:gcc-11:gmx2021:py-3.8.2:
   extends:
-    - .gmxapi-0.2:gcc-10:gmx2021
+    - .gmxapi-0.2:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.8"
index 629efb245dead094929003ec113c1c5edeb76041..652a6a43ae2b4db09fff0821668c81c32e9e7bbe 100644 (file)
@@ -1,9 +1,9 @@
 # Base job definition for sample_restraint tests against GROMACS 2021.
-.sample_restraint:gcc-10:gmx2021:
+.sample_restraint:gcc-11:gmx2021:
   extends:
     - .variables:default
     - .use-clang:base
-  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-10
+  image: ${CI_REGISTRY}/gromacs/gromacs/ci-ubuntu-20.04-gcc-11
   stage: test
   variables:
     KUBERNETES_CPU_LIMIT: 2
     - k8s-scilifelab
   # The dependency means we need to use the same tag restriction as upstream.
   needs:
-    - job: gromacs:gcc-10:build
+    - job: gromacs:gcc-11:build
       artifacts: true
 
-sample_restraint:gcc-10:gmx2021:py-3.6.10:
+sample_restraint:gcc-11:gmx2021:py-3.6.10:
   extends:
-    - .sample_restraint:gcc-10:gmx2021
+    - .sample_restraint:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.6"
     PY_VER: "3.6.10"
 
-sample_restraint:gcc-10:gmx2021:py-3.7.7:
+sample_restraint:gcc-11:gmx2021:py-3.7.7:
   extends:
-    - .sample_restraint:gcc-10:gmx2021
+    - .sample_restraint:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.7"
     PY_VER: "3.7.7"
 
-sample_restraint:gcc-10:gmx2021:py-3.8.2:
+sample_restraint:gcc-11:gmx2021:py-3.8.2:
   extends:
-    - .sample_restraint:gcc-10:gmx2021
+    - .sample_restraint:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.8"
     PY_VER: "3.8.2"
 
-sample_restraint:gcc-10:gmx2021:py-3.9.1:
+sample_restraint:gcc-11:gmx2021:py-3.9.1:
   extends:
-    - .sample_restraint:gcc-10:gmx2021
+    - .sample_restraint:gcc-11:gmx2021
     - .rules:merge-requests:release-2021
   variables:
     VENVPATH: "/root/venv/py3.9"
index 2af82650f8ef70c4f472596bf3408c10a7b8986a..06181514d665f0977c3e236e7ec8887c23102ed2 100644 (file)
@@ -58,7 +58,7 @@ Some compiler warnings cannot be suppressed through CMake machinery,
 such as for the clang static analyzer, and some lines are removed
 from consideration by wrapping with `#ifndef __clang_analyzer__`
 or marking them with `/*NOLINT*/` comment.
-... `#endif`.
+... `#endif`. A suppression is added to internal_utils.cmake.
 
 GoogleTest declares quite old minimum CMake versions, which newer
 CMake versions warn about. In practice, the CMake version requirement
index 8c1f9ba99cf50574f669dd7deba324dce40595f3..8d66ebd047ad495870fa21734419e79b4f13c22e 100644 (file)
@@ -102,6 +102,7 @@ macro(config_compiler_and_linker)
     set(cxx_base_flags "-Wall -Wshadow -Werror")
     if(NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 7.0.0)
       set(cxx_base_flags "${cxx_base_flags} -Wno-error=dangling-else")
+      set(cxx_base_flags "${cxx_base_flags} -Wno-maybe-uninitialized")
     endif()
     set(cxx_exception_flags "-fexceptions")
     set(cxx_no_exception_flags "-fno-exceptions")
index 14b4528320aa9e1f922875f22a7b4a723192e42d..1dbba4add8bbfbd5a3e7ba26d0044ed4877efdd2 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
  * Copyright (c) 2001-2004, The GROMACS development team.
  * Copyright (c) 2013,2014,2015,2016,2017 by the GROMACS development team.
- * Copyright (c) 2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2018,2019,2020,2021, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
@@ -116,7 +116,8 @@ void read_ab(char* line, const char* fn, MoleculePatch* hack)
                   ncontrol[hack->tp],
                   line);
     }
-    for (int i = 0; (i < hack->nctl); i++)
+    // (i < 4) is redundant, but it silences GCC-11 warning
+    for (int i = 0; (i < hack->nctl) && (i < 4); i++)
     {
         hack->a[i] = a[i];
     }
index 38638befd5dd6923e6c8013a9cbacf1d480cdeba..539b239c4feafd80c54d372d88c59a850ed0a48a 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * This file is part of the GROMACS molecular simulation package.
  *
- * Copyright (c) 2016,2018,2019,2020, by the GROMACS development team, led by
+ * Copyright (c) 2016,2018,2019,2020,2021, by the GROMACS development team, led by
  * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl,
  * and including many others, as listed in the AUTHORS file in the
  * top-level source directory and at http://www.gromacs.org.
@@ -72,60 +72,66 @@ TEST(PathTest, StripSourcePrefixWorks)
             << "This only affects source paths reported in fatal error messages.";
 }
 
-TEST(PathTest, SearchOperationsWork)
+class PathSearchTest : public testing::TestWithParam<std::string>
+{
+};
+
+TEST_P(PathSearchTest, SearchOperationsWork)
 {
     gmx::test::TestReferenceData    data;
     gmx::test::TestReferenceChecker rootChecker(data.rootChecker());
-    for (const std::string& input : { "",
-                                      "md.log",
-                                      "md",
-                                      "/tmp/absolute.txt",
-                                      "simpledir/traj.tng",
-                                      "simpledir/traj",
-                                      "windowsdir\\traj.tng",
-                                      "complex.dir/traj.tng",
-                                      "complex.dir/traj",
-                                      "nested/dir/conf.pdb",
-                                      "/tmp/absolutedir/conf.pdb" })
+    std::string                     input = GetParam();
+
+    auto checker = rootChecker.checkCompound("PathToTest", input);
+    {
+        std::string result;
+        ASSERT_NO_THROW_GMX(result = Path::getParentPath(input));
+        checker.checkString(result, "getParentPath");
+    }
+    {
+        std::string result;
+        ASSERT_NO_THROW_GMX(result = Path::getFilename(input));
+        checker.checkString(result, "getFilename");
+    }
     {
-        SCOPED_TRACE(std::string("for input '") + input + "'");
-        auto checker = rootChecker.checkCompound("PathToTest", input);
-        {
-            std::string result;
-            ASSERT_NO_THROW_GMX(result = Path::getParentPath(input));
-            checker.checkString(result, "getParentPath");
-        }
-        {
-            std::string result;
-            ASSERT_NO_THROW_GMX(result = Path::getFilename(input));
-            checker.checkString(result, "getFilename");
-        }
-        {
-            bool result = false;
-            ASSERT_NO_THROW_GMX(result = Path::hasExtension(input));
-            checker.checkBoolean(result, "hasExtension");
-        }
-        {
-            bool result = false;
-            ASSERT_NO_THROW_GMX(result = Path::extensionMatches(input, "pdb"));
-            checker.checkBoolean(result, "extensionMatchesPdb");
-            // The match is exclusive of the dot separator, so no
-            // input string can match.
-            ASSERT_FALSE(Path::extensionMatches(input, ".pdb"));
-        }
-        {
-            std::string result;
-            ASSERT_NO_THROW_GMX(result = Path::stripExtension(input));
-            checker.checkString(result, "stripExtension");
-        }
-        {
-            std::string result;
-            ASSERT_NO_THROW_GMX(result = Path::concatenateBeforeExtension(input, "_34"));
-            checker.checkString(result, "concatenateBeforeExtension");
-        }
+        bool result = false;
+        ASSERT_NO_THROW_GMX(result = Path::hasExtension(input));
+        checker.checkBoolean(result, "hasExtension");
+    }
+    {
+        bool result = false;
+        ASSERT_NO_THROW_GMX(result = Path::extensionMatches(input, "pdb"));
+        checker.checkBoolean(result, "extensionMatchesPdb");
+        // The match is exclusive of the dot separator, so no
+        // input string can match.
+        ASSERT_FALSE(Path::extensionMatches(input, ".pdb"));
+    }
+    {
+        std::string result;
+        ASSERT_NO_THROW_GMX(result = Path::stripExtension(input));
+        checker.checkString(result, "stripExtension");
+    }
+    {
+        std::string result;
+        ASSERT_NO_THROW_GMX(result = Path::concatenateBeforeExtension(input, "_34"));
+        checker.checkString(result, "concatenateBeforeExtension");
     }
 }
 
+INSTANTIATE_TEST_CASE_P(WithInputPaths,
+                        PathSearchTest,
+                        testing::Values("",
+                                        "md.log",
+                                        "md",
+                                        "/tmp/absolute.txt",
+                                        "simpledir/traj.tng",
+                                        "simpledir/traj",
+                                        "windowsdir\\traj.tng",
+                                        "complex.dir/traj.tng",
+                                        "complex.dir/traj",
+                                        "nested/dir/conf.pdb",
+                                        "/tmp/absolutedir/conf.pdb"));
+
 } // namespace
 } // namespace test
 } // namespace gmx
diff --git a/src/gromacs/utility/tests/refdata/PathTest_SearchOperationsWork.xml b/src/gromacs/utility/tests/refdata/PathTest_SearchOperationsWork.xml
deleted file mode 100644 (file)
index c864749..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
-<ReferenceData>
-  <PathToTest>
-    <String Name="getParentPath"></String>
-    <String Name="getFilename"></String>
-    <Bool Name="hasExtension">false</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension"></String>
-    <String Name="concatenateBeforeExtension">_34</String>
-  </PathToTest>
-  <PathToTest Name="md.log">
-    <String Name="getParentPath"></String>
-    <String Name="getFilename">md.log</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">md</String>
-    <String Name="concatenateBeforeExtension">md_34.log</String>
-  </PathToTest>
-  <PathToTest Name="md">
-    <String Name="getParentPath"></String>
-    <String Name="getFilename">md</String>
-    <Bool Name="hasExtension">false</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">md</String>
-    <String Name="concatenateBeforeExtension">md_34</String>
-  </PathToTest>
-  <PathToTest Name="/tmp/absolute.txt">
-    <String Name="getParentPath">/tmp</String>
-    <String Name="getFilename">absolute.txt</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">/tmp/absolute</String>
-    <String Name="concatenateBeforeExtension">/tmp/absolute_34.txt</String>
-  </PathToTest>
-  <PathToTest Name="simpledir/traj.tng">
-    <String Name="getParentPath">simpledir</String>
-    <String Name="getFilename">traj.tng</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">simpledir/traj</String>
-    <String Name="concatenateBeforeExtension">simpledir/traj_34.tng</String>
-  </PathToTest>
-  <PathToTest Name="simpledir/traj">
-    <String Name="getParentPath">simpledir</String>
-    <String Name="getFilename">traj</String>
-    <Bool Name="hasExtension">false</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">simpledir/traj</String>
-    <String Name="concatenateBeforeExtension">simpledir/traj_34</String>
-  </PathToTest>
-  <PathToTest Name="windowsdir\traj.tng">
-    <String Name="getParentPath">windowsdir</String>
-    <String Name="getFilename">traj.tng</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">windowsdir\traj</String>
-    <String Name="concatenateBeforeExtension">windowsdir\traj_34.tng</String>
-  </PathToTest>
-  <PathToTest Name="complex.dir/traj.tng">
-    <String Name="getParentPath">complex.dir</String>
-    <String Name="getFilename">traj.tng</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">complex.dir/traj</String>
-    <String Name="concatenateBeforeExtension">complex.dir/traj_34.tng</String>
-  </PathToTest>
-  <PathToTest Name="complex.dir/traj">
-    <String Name="getParentPath">complex.dir</String>
-    <String Name="getFilename">traj</String>
-    <Bool Name="hasExtension">false</Bool>
-    <Bool Name="extensionMatchesPdb">false</Bool>
-    <String Name="stripExtension">complex.dir/traj</String>
-    <String Name="concatenateBeforeExtension">complex.dir/traj_34</String>
-  </PathToTest>
-  <PathToTest Name="nested/dir/conf.pdb">
-    <String Name="getParentPath">nested/dir</String>
-    <String Name="getFilename">conf.pdb</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">true</Bool>
-    <String Name="stripExtension">nested/dir/conf</String>
-    <String Name="concatenateBeforeExtension">nested/dir/conf_34.pdb</String>
-  </PathToTest>
-  <PathToTest Name="/tmp/absolutedir/conf.pdb">
-    <String Name="getParentPath">/tmp/absolutedir</String>
-    <String Name="getFilename">conf.pdb</String>
-    <Bool Name="hasExtension">true</Bool>
-    <Bool Name="extensionMatchesPdb">true</Bool>
-    <String Name="stripExtension">/tmp/absolutedir/conf</String>
-    <String Name="concatenateBeforeExtension">/tmp/absolutedir/conf_34.pdb</String>
-  </PathToTest>
-</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_0.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_0.xml
new file mode 100644 (file)
index 0000000..5bf7e5f
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest>
+    <String Name="getParentPath"></String>
+    <String Name="getFilename"></String>
+    <Bool Name="hasExtension">false</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension"></String>
+    <String Name="concatenateBeforeExtension">_34</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_1.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_1.xml
new file mode 100644 (file)
index 0000000..309d8b0
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="md.log">
+    <String Name="getParentPath"></String>
+    <String Name="getFilename">md.log</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">md</String>
+    <String Name="concatenateBeforeExtension">md_34.log</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_10.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_10.xml
new file mode 100644 (file)
index 0000000..4380497
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="/tmp/absolutedir/conf.pdb">
+    <String Name="getParentPath">/tmp/absolutedir</String>
+    <String Name="getFilename">conf.pdb</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">true</Bool>
+    <String Name="stripExtension">/tmp/absolutedir/conf</String>
+    <String Name="concatenateBeforeExtension">/tmp/absolutedir/conf_34.pdb</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_2.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_2.xml
new file mode 100644 (file)
index 0000000..6974cfc
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="md">
+    <String Name="getParentPath"></String>
+    <String Name="getFilename">md</String>
+    <Bool Name="hasExtension">false</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">md</String>
+    <String Name="concatenateBeforeExtension">md_34</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_3.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_3.xml
new file mode 100644 (file)
index 0000000..aa31f1f
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="/tmp/absolute.txt">
+    <String Name="getParentPath">/tmp</String>
+    <String Name="getFilename">absolute.txt</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">/tmp/absolute</String>
+    <String Name="concatenateBeforeExtension">/tmp/absolute_34.txt</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_4.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_4.xml
new file mode 100644 (file)
index 0000000..2f2b994
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="simpledir/traj.tng">
+    <String Name="getParentPath">simpledir</String>
+    <String Name="getFilename">traj.tng</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">simpledir/traj</String>
+    <String Name="concatenateBeforeExtension">simpledir/traj_34.tng</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_5.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_5.xml
new file mode 100644 (file)
index 0000000..4e61b9d
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="simpledir/traj">
+    <String Name="getParentPath">simpledir</String>
+    <String Name="getFilename">traj</String>
+    <Bool Name="hasExtension">false</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">simpledir/traj</String>
+    <String Name="concatenateBeforeExtension">simpledir/traj_34</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_6.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_6.xml
new file mode 100644 (file)
index 0000000..eac2171
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="windowsdir\traj.tng">
+    <String Name="getParentPath">windowsdir</String>
+    <String Name="getFilename">traj.tng</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">windowsdir\traj</String>
+    <String Name="concatenateBeforeExtension">windowsdir\traj_34.tng</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_7.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_7.xml
new file mode 100644 (file)
index 0000000..28f13d9
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="complex.dir/traj.tng">
+    <String Name="getParentPath">complex.dir</String>
+    <String Name="getFilename">traj.tng</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">complex.dir/traj</String>
+    <String Name="concatenateBeforeExtension">complex.dir/traj_34.tng</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_8.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_8.xml
new file mode 100644 (file)
index 0000000..ff939d6
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="complex.dir/traj">
+    <String Name="getParentPath">complex.dir</String>
+    <String Name="getFilename">traj</String>
+    <Bool Name="hasExtension">false</Bool>
+    <Bool Name="extensionMatchesPdb">false</Bool>
+    <String Name="stripExtension">complex.dir/traj</String>
+    <String Name="concatenateBeforeExtension">complex.dir/traj_34</String>
+  </PathToTest>
+</ReferenceData>
diff --git a/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_9.xml b/src/gromacs/utility/tests/refdata/WithInputPaths_PathSearchTest_SearchOperationsWork_9.xml
new file mode 100644 (file)
index 0000000..b976f88
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<?xml-stylesheet type="text/xsl" href="referencedata.xsl"?>
+<ReferenceData>
+  <PathToTest Name="nested/dir/conf.pdb">
+    <String Name="getParentPath">nested/dir</String>
+    <String Name="getFilename">conf.pdb</String>
+    <Bool Name="hasExtension">true</Bool>
+    <Bool Name="extensionMatchesPdb">true</Bool>
+    <String Name="stripExtension">nested/dir/conf</String>
+    <String Name="concatenateBeforeExtension">nested/dir/conf_34.pdb</String>
+  </PathToTest>
+</ReferenceData>
index cbf98ae5776b86d136ad5e5f22a9b31eb4e5bf1c..81ee46702ff053e9ffddfccec7660468a383d9bf 100644 (file)
@@ -336,11 +336,14 @@ std::vector<PropagationParameters> propagationParametersWithCoupling()
     std::string nstcomm    = "5";
 
     std::vector<PropagationParameters> parameterSets;
-    for (const std::string& simulationName : { "argon12" })
+    std::vector<std::string>           simulations = { "argon12" };
+    for (const std::string& simulationName : simulations)
     {
-        for (const std::string& integrator : { "md", "sd", "md-vv" })
+        std::vector<std::string> integrators{ "md", "sd", "md-vv" };
+        for (const std::string& integrator : integrators)
         {
-            for (const std::string& tcoupl : { "no", "v-rescale", "Nose-Hoover" })
+            std::vector<std::string> tcouplValues{ "no", "v-rescale", "Nose-Hoover" };
+            for (const std::string& tcoupl : tcouplValues)
             {
                 // SD doesn't support temperature-coupling algorithms,
                 if (integrator == "sd" && tcoupl != "no")
@@ -403,11 +406,14 @@ std::vector<PropagationParameters> propagationParametersWithConstraints()
     std::string nstcomm    = "5";
 
     std::vector<PropagationParameters> parameterSets;
-    for (const std::string& simulationName : { "tip3p5" })
+    std::vector<std::string>           simulations = { "tip3p5" };
+    for (const std::string& simulationName : simulations)
     {
-        for (const std::string& integrator : { "md", "sd", "md-vv" })
+        std::vector<std::string> integrators{ "md", "sd", "md-vv" };
+        for (const std::string& integrator : integrators)
         {
-            for (const std::string& tcoupl : { "no", "v-rescale" })
+            std::vector<std::string> tcouplValues{ "no", "v-rescale" };
+            for (const std::string& tcoupl : tcouplValues)
             {
                 // SD doesn't support temperature-coupling algorithms,
                 if (integrator == "sd" && tcoupl != "no")