From f717debbd492f1bcbe61e6921d3ff3bd2d0b1d97 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 2 Feb 2023 21:09:45 -0500 Subject: [PATCH] use same main() function as with c-library interface. --- unittest/fortran/CMakeLists.txt | 58 +++++++++++++++--------------- unittest/fortran/test_main.cpp | 60 ++++++++++++++++++++++++++++++++ unittest/fortran/test_main.h | 19 ++++++++++ unittest/fortran/wrap_create.cpp | 4 +-- 4 files changed, 109 insertions(+), 32 deletions(-) create mode 100644 unittest/fortran/test_main.cpp create mode 100644 unittest/fortran/test_main.h diff --git a/unittest/fortran/CMakeLists.txt b/unittest/fortran/CMakeLists.txt index b03b4c32ca..6d6fe4cd54 100644 --- a/unittest/fortran/CMakeLists.txt +++ b/unittest/fortran/CMakeLists.txt @@ -30,69 +30,69 @@ if(CMAKE_Fortran_COMPILER) target_link_libraries(flammps PUBLIC gfortran) endif() - add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90) - target_link_libraries(test_fortran_create PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_create wrap_create.cpp test_fortran_create.f90 test_main.cpp) + target_link_libraries(test_fortran_create PRIVATE flammps lammps GTest::GMock) target_include_directories(test_fortran_create PRIVATE "${LAMMPS_SOURCE_DIR}/../fortran") add_test(NAME FortranOpen COMMAND test_fortran_create) - add_executable(test_fortran_commands wrap_commands.cpp test_fortran_commands.f90) - target_link_libraries(test_fortran_commands PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_commands wrap_commands.cpp test_fortran_commands.f90 test_main.cpp) + target_link_libraries(test_fortran_commands PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranCommands COMMAND test_fortran_commands) - add_executable(test_fortran_get_thermo wrap_get_thermo.cpp test_fortran_get_thermo.f90) - target_link_libraries(test_fortran_get_thermo PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_get_thermo wrap_get_thermo.cpp test_fortran_get_thermo.f90 test_main.cpp) + target_link_libraries(test_fortran_get_thermo PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranGetThermo COMMAND test_fortran_get_thermo) - add_executable(test_fortran_box wrap_box.cpp test_fortran_box.f90) - target_link_libraries(test_fortran_box PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_box wrap_box.cpp test_fortran_box.f90 test_main.cpp) + target_link_libraries(test_fortran_box PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranBox COMMAND test_fortran_box) - add_executable(test_fortran_properties wrap_properties.cpp test_fortran_properties.f90 test_fortran_commands.f90) + add_executable(test_fortran_properties wrap_properties.cpp test_fortran_properties.f90 test_fortran_commands.f90 test_main.cpp) target_link_libraries(test_fortran_properties PRIVATE flammps lammps GTest::GMockMain) add_test(NAME FortranProperties COMMAND test_fortran_properties) - add_executable(test_fortran_extract_global wrap_extract_global.cpp test_fortran_extract_global.f90) - target_link_libraries(test_fortran_extract_global PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_extract_global wrap_extract_global.cpp test_fortran_extract_global.f90 test_main.cpp) + target_link_libraries(test_fortran_extract_global PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranExtractGlobal COMMAND test_fortran_extract_global) - add_executable(test_fortran_extract_atom wrap_extract_atom.cpp test_fortran_extract_atom.f90) - target_link_libraries(test_fortran_extract_atom PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_extract_atom wrap_extract_atom.cpp test_fortran_extract_atom.f90 test_main.cpp) + target_link_libraries(test_fortran_extract_atom PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranExtractAtom COMMAND test_fortran_extract_atom) - add_executable(test_fortran_extract_compute wrap_extract_compute.cpp test_fortran_extract_compute.f90) - target_link_libraries(test_fortran_extract_compute PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_extract_compute wrap_extract_compute.cpp test_fortran_extract_compute.f90 test_main.cpp) + target_link_libraries(test_fortran_extract_compute PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranExtractCompute COMMAND test_fortran_extract_compute) - add_executable(test_fortran_extract_fix wrap_extract_fix.cpp test_fortran_extract_fix.f90) - target_link_libraries(test_fortran_extract_fix PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_extract_fix wrap_extract_fix.cpp test_fortran_extract_fix.f90 test_main.cpp) + target_link_libraries(test_fortran_extract_fix PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranExtractFix COMMAND test_fortran_extract_fix) - add_executable(test_fortran_extract_variable wrap_extract_variable.cpp test_fortran_extract_variable.f90) + add_executable(test_fortran_extract_variable wrap_extract_variable.cpp test_fortran_extract_variable.f90 test_main.cpp) target_compile_definitions(test_fortran_extract_variable PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) - target_link_libraries(test_fortran_extract_variable PRIVATE flammps lammps GTest::GTestMain) + target_link_libraries(test_fortran_extract_variable PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranExtractVariable COMMAND test_fortran_extract_variable) - add_executable(test_fortran_gather_scatter wrap_gather_scatter.cpp test_fortran_gather_scatter.f90) + add_executable(test_fortran_gather_scatter wrap_gather_scatter.cpp test_fortran_gather_scatter.f90 test_main.cpp) target_compile_definitions(test_fortran_gather_scatter PRIVATE -DTEST_INPUT_FOLDER=${CMAKE_CURRENT_SOURCE_DIR}) - target_link_libraries(test_fortran_gather_scatter PRIVATE flammps lammps GTest::GTestMain) + target_link_libraries(test_fortran_gather_scatter PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranGatherScatter COMMAND test_fortran_gather_scatter) - add_executable(test_fortran_create_atoms wrap_create_atoms.cpp test_fortran_create_atoms.f90) - target_link_libraries(test_fortran_create_atoms PRIVATE flammps lammps GTest::GTestMain) + add_executable(test_fortran_create_atoms wrap_create_atoms.cpp test_fortran_create_atoms.f90 test_main.cpp) + target_link_libraries(test_fortran_create_atoms PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranCreateAtoms COMMAND test_fortran_create_atoms) - add_executable(test_fortran_configuration wrap_configuration.cpp test_fortran_configuration.f90 test_fortran_commands.f90) - target_link_libraries(test_fortran_configuration PRIVATE flammps lammps GTest::GMockMain) + add_executable(test_fortran_configuration wrap_configuration.cpp test_fortran_configuration.f90 test_fortran_commands.f90 test_main.cpp) + target_link_libraries(test_fortran_configuration PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranConfiguration COMMAND test_fortran_configuration) - add_executable(test_fortran_neighlist wrap_neighlist.cpp test_fortran_neighlist.f90) - target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps GTest::GMockMain) + add_executable(test_fortran_neighlist wrap_neighlist.cpp test_fortran_neighlist.f90 test_main.cpp) + target_link_libraries(test_fortran_neighlist PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranNeighlist COMMAND test_fortran_neighlist) # gfortran from GCC 9 on ubuntu has an ICE compiling this test. if ((CMAKE_Fortran_COMPILER_ID STREQUAL "GNU") AND (CMAKE_Fortran_COMPILER_VERSION VERSION_GREATER 9.9)) - add_executable(test_fortran_fixexternal wrap_fixexternal.cpp test_fortran_fixexternal.f90) - target_link_libraries(test_fortran_fixexternal PRIVATE flammps lammps GTest::GMockMain) + add_executable(test_fortran_fixexternal wrap_fixexternal.cpp test_fortran_fixexternal.f90 test_main.cpp) + target_link_libraries(test_fortran_fixexternal PRIVATE flammps lammps GTest::GMock) add_test(NAME FortranFixExternal COMMAND test_fortran_fixexternal) endif() diff --git a/unittest/fortran/test_main.cpp b/unittest/fortran/test_main.cpp new file mode 100644 index 0000000000..ef1f921680 --- /dev/null +++ b/unittest/fortran/test_main.cpp @@ -0,0 +1,60 @@ +/* ---------------------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/, Sandia National Laboratories + LAMMPS Development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#include "test_main.h" +#include "pointers.h" +#include "utils.h" +#include "gmock/gmock.h" +#include "gtest/gtest.h" + +#include +#include + +// whether to print verbose output (i.e. not capturing LAMMPS screen output). +bool verbose = false; + +int main(int argc, char **argv) +{ + MPI_Init(&argc, &argv); + ::testing::InitGoogleMock(&argc, argv); + + if (argc < 1) { + return 1; + } + + // handle arguments passed via environment variable + if (const char *var = getenv("TEST_ARGS")) { + std::vector env = LAMMPS_NS::utils::split_words(var); + for (auto arg : env) { + if (arg == "-v") { + verbose = true; + } + } + } + + int iarg = 1; + while (iarg < argc) { + if (strcmp(argv[iarg], "-v") == 0) { + verbose = true; + ++iarg; + } else { + std::cerr << "unknown option: " << argv[iarg] << "\n\n"; + MPI_Finalize(); + return 1; + } + } + + int rv = RUN_ALL_TESTS(); + MPI_Finalize(); + return rv; +} diff --git a/unittest/fortran/test_main.h b/unittest/fortran/test_main.h new file mode 100644 index 0000000000..343a5ec8ae --- /dev/null +++ b/unittest/fortran/test_main.h @@ -0,0 +1,19 @@ +/* -*- c++ -*- ---------------------------------------------------------- + LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator + https://www.lammps.org/ Sandia National Laboratories + LAMMPS Development team: developers@lammps.org + + Copyright (2003) Sandia Corporation. Under the terms of Contract + DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains + certain rights in this software. This software is distributed under + the GNU General Public License. + + See the README file in the top-level LAMMPS directory. +------------------------------------------------------------------------- */ + +#ifndef TEST_MAIN_H +#define TEST_MAIN_H + +extern bool verbose; + +#endif diff --git a/unittest/fortran/wrap_create.cpp b/unittest/fortran/wrap_create.cpp index 789e9fca6a..260e6ba1f1 100644 --- a/unittest/fortran/wrap_create.cpp +++ b/unittest/fortran/wrap_create.cpp @@ -30,13 +30,11 @@ TEST(open_no_mpi, no_args) ::testing::internal::CaptureStdout(); int mpi_init = 0; MPI_Initialized(&mpi_init); - EXPECT_EQ(mpi_init, 0); + EXPECT_EQ(mpi_init, 1); void *handle = f_lammps_no_mpi_no_args(); std::string output = ::testing::internal::GetCapturedStdout(); EXPECT_STREQ(output.substr(0, 6).c_str(), "LAMMPS"); LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; - MPI_Initialized(&mpi_init); - EXPECT_NE(mpi_init, 0); EXPECT_EQ(lmp->world, MPI_COMM_WORLD); EXPECT_EQ(lmp->infile, stdin); EXPECT_EQ(lmp->screen, stdout);