# # This file is part of the GROMACS molecular simulation package. # # Copyright (c) 2013,2014,2015,2016,2017 The GROMACS development team. # Copyright (c) 2018,2019,2020, 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. # # GROMACS is free software; you can redistribute it and/or # modify it under the terms of the GNU Lesser General Public License # as published by the Free Software Foundation; either version 2.1 # of the License, or (at your option) any later version. # # GROMACS is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with GROMACS; if not, see # http://www.gnu.org/licenses, or write to the Free Software Foundation, # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. # # If you want to redistribute modifications to GROMACS, please # consider that scientific software is very special. Version # control is crucial - bugs must be traceable. We will be happy to # consider code for inclusion in the official distribution, but # derived work must not be called official GROMACS. Details are found # in the README & COPYING files - if they are missing, get the # official version at http://www.gromacs.org. # # To help us fund GROMACS development, we humbly ask that you cite # the research papers on the package. Check out http://www.gromacs.org. # Make a static library for test infrastructure code that we re-use # in multiple test executables across the repository. gmx_add_unit_test_library(mdrun_test_infrastructure energyreader.cpp energycomparison.cpp moduletest.cpp simulatorcomparison.cpp terminationhelper.cpp trajectorycomparison.cpp trajectoryreader.cpp # pseudo-library for code for mdrun $ ) target_include_directories(mdrun_test_infrastructure SYSTEM PRIVATE ${PROJECT_SOURCE_DIR}/src/external) # To avoid running into test timeouts, some end-to-end tests of mdrun # functionality are split off. This can be rearranged in future as we # see fit. set(testname "MdrunOutputTests") set(exename "mdrun-output-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES compressed_x_output.cpp helpwriting.cpp outputfiles.cpp trajectory_writing.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) set(testname "MdrunModulesTests") set(exename "mdrun-modules-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES densityfittingmodule.cpp interactiveMD.cpp mimic.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) set(testname "MdrunIOTests") set(exename "mdrun-io-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES exactcontinuation.cpp grompp.cpp initialconstraints.cpp termination.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) set(testname "MdrunTests") set(exename "mdrun-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES ewaldsurfaceterm.cpp multiple_time_stepping.cpp orires.cpp simulator.cpp swapcoords.cpp tabulated_bonded_interactions.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) set(testname "MdrunPmeTests") set(exename "mdrun-pme-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES pmetest.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) set(testname "MdrunNonIntegratorTests") set(exename "mdrun-non-integrator-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES # files with code for tests minimize.cpp nonbonded_bench.cpp normalmodes.cpp rerun.cpp simple_mdrun.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) # TPI does not support OpenMP, so we need a separate test binary set(testname "MdrunTpiTests") set(exename "mdrun-tpi-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES # files with code for tests tpitest.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} INTEGRATION_TEST IGNORE_LEAKS) # Tests that only make sense to run with multiple ranks and/or real # MPI are implemented here. set(testname "MdrunMpiTests") set(exename "mdrun-mpi-test") gmx_add_gtest_executable(${exename} MPI CPP_SOURCE_FILES # files with code for tests domain_decomposition.cpp minimize.cpp mimic.cpp multisim.cpp multisimtest.cpp pmetest.cpp replicaexchange.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} MPI_RANKS 2 OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS) # Slow-running tests that target testing multiple-rank coordination behaviors set(exename "mdrun-mpi-coordination-test") gmx_add_gtest_executable(${exename} MPI CPP_SOURCE_FILES # files with code for tests periodicactions.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) # These tests are extremely slow without optimization or OpenMP, so only run them for # build types like Release or RelWithDebInfo and if the build has been configured # with OpenMP enabled. if (CMAKE_BUILD_TYPE MATCHES "Rel" AND GMX_OPENMP) set(testname "MdrunMpiCoordinationTestsOneRank") gmx_register_gtest_test(${testname} ${exename} MPI_RANKS 1 SLOW_TEST IGNORE_LEAKS) set(testname "MdrunMpiCoordinationTestsTwoRanks") gmx_register_gtest_test(${testname} ${exename} MPI_RANKS 2 SLOW_TEST IGNORE_LEAKS) endif() # Keeping the FEP tests separate for now to be able to judge runtime more easily # Can be included in mdrun tests later set(testname "MdrunFEPTests") set(exename "mdrunfep-test") gmx_add_gtest_executable(${exename} CPP_SOURCE_FILES # files with code for tests freeenergy.cpp # pseudo-library for code for mdrun $ ) target_link_libraries(${exename} PRIVATE mdrun_test_infrastructure) gmx_register_gtest_test(${testname} ${exename} OPENMP_THREADS 2 INTEGRATION_TEST IGNORE_LEAKS)