From a2fc33b419a6db1b933fc3b1825bd187363e714c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Sun, 13 Sep 2020 17:00:26 -0400 Subject: [PATCH] update c-library tests --- unittest/c-library/test_library_commands.cpp | 122 +++++++++-------- unittest/c-library/test_library_open.cpp | 123 ++++++++++-------- .../c-library/test_library_properties.cpp | 2 +- 3 files changed, 138 insertions(+), 109 deletions(-) diff --git a/unittest/c-library/test_library_commands.cpp b/unittest/c-library/test_library_commands.cpp index 8cd2200f8a..c9633301fc 100644 --- a/unittest/c-library/test_library_commands.cpp +++ b/unittest/c-library/test_library_commands.cpp @@ -1,103 +1,121 @@ // unit tests for issuing command to a LAMMPS instance through the library interface -#include "library.h" #include "lammps.h" +#include "library.h" #include +#include "gmock/gmock.h" #include "gtest/gtest.h" -const char *demo_input[] = { - "region box block 0 $x 0 2 0 2", - "create_box 1 box", - "create_atoms 1 single 1.0 1.0 ${zpos}" }; -const char *cont_input[] = { - "create_atoms 1 single &", - "0.2 0.1 0.1" }; +#include "test_main.h" -class LAMMPS_commands : public ::testing::Test -{ +using ::testing::HasSubstr; +using ::testing::StartsWith; + +const char *demo_input[] = {"region box block 0 $x 0 2 0 2", "create_box 1 box", + "create_atoms 1 single 1.0 1.0 ${zpos}"}; +const char *cont_input[] = {"create_atoms 1 single &", "0.2 0.1 0.1"}; + +class LAMMPS_commands : public ::testing::Test { protected: void *lmp; - LAMMPS_commands() {}; - ~LAMMPS_commands() override {}; + LAMMPS_commands(){}; + ~LAMMPS_commands() override{}; + + void SetUp() override + { + const char *args[] = {"LAMMPS_test", "-log", "none", "-echo", "screen", "-nocite", + "-var", "x", "2", "-var", "zpos", "1.5"}; - void SetUp() override { - const char *args[] = {"LAMMPS_test", - "-log", "none", - "-echo", "screen", - "-nocite", "-var","x","2", - "-var", "zpos", "1.5"}; char **argv = (char **)args; - int argc = sizeof(args)/sizeof(char *); + int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); - lmp = lammps_open_no_mpi(argc, argv, NULL); + lmp = lammps_open_no_mpi(argc, argv, NULL); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,8).c_str(), "LAMMPS ("); + if (verbose) std::cout << output; + EXPECT_THAT(output, StartsWith("LAMMPS (")); } - void TearDown() override { + void TearDown() override + { ::testing::internal::CaptureStdout(); lammps_close(lmp); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,16).c_str(), "Total wall time:"); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; lmp = nullptr; } }; -TEST_F(LAMMPS_commands, from_file) { +TEST_F(LAMMPS_commands, from_file) +{ FILE *fp; const char demo_file[] = "in.test"; const char cont_file[] = "in.cont"; - fp = fopen(demo_file,"w"); - for (unsigned int i=0; i < sizeof(demo_input)/sizeof(char *); ++i) { - fputs(demo_input[i],fp); - fputc('\n',fp); + fp = fopen(demo_file, "w"); + for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { + fputs(demo_input[i], fp); + fputc('\n', fp); } fclose(fp); - fp = fopen(cont_file,"w"); - for (unsigned int i=0; i < sizeof(cont_input)/sizeof(char *); ++i) { - fputs(cont_input[i],fp); - fputc('\n',fp); + fp = fopen(cont_file, "w"); + for (unsigned int i = 0; i < sizeof(cont_input) / sizeof(char *); ++i) { + fputs(cont_input[i], fp); + fputc('\n', fp); } fclose(fp); - EXPECT_EQ(lammps_get_natoms(lmp),0); - lammps_file(lmp,demo_file); - lammps_file(lmp,cont_file); - EXPECT_EQ(lammps_get_natoms(lmp),2); + EXPECT_EQ(lammps_get_natoms(lmp), 0); + if (!verbose) ::testing::internal::CaptureStdout(); + lammps_file(lmp, demo_file); + if (!verbose) ::testing::internal::GetCapturedStdout(); + EXPECT_EQ(lammps_get_natoms(lmp), 1); + if (!verbose) ::testing::internal::CaptureStdout(); + lammps_file(lmp, cont_file); + if (!verbose) ::testing::internal::GetCapturedStdout(); + EXPECT_EQ(lammps_get_natoms(lmp), 2); unlink(demo_file); unlink(cont_file); }; -TEST_F(LAMMPS_commands, from_line) { - EXPECT_EQ(lammps_get_natoms(lmp),0); - for (unsigned int i=0; i < sizeof(demo_input)/sizeof(char *); ++i) { - lammps_command(lmp,demo_input[i]); +TEST_F(LAMMPS_commands, from_line) +{ + EXPECT_EQ(lammps_get_natoms(lmp), 0); + if (!verbose) ::testing::internal::CaptureStdout(); + for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { + lammps_command(lmp, demo_input[i]); } - EXPECT_EQ(lammps_get_natoms(lmp),1); + if (!verbose) ::testing::internal::GetCapturedStdout(); + EXPECT_EQ(lammps_get_natoms(lmp), 1); }; -TEST_F(LAMMPS_commands, from_list) { - EXPECT_EQ(lammps_get_natoms(lmp),0); - lammps_commands_list(lmp,sizeof(demo_input)/sizeof(char *),demo_input); - lammps_commands_list(lmp,sizeof(cont_input)/sizeof(char *),cont_input); - EXPECT_EQ(lammps_get_natoms(lmp),2); +TEST_F(LAMMPS_commands, from_list) +{ + EXPECT_EQ(lammps_get_natoms(lmp), 0); + if (!verbose) ::testing::internal::CaptureStdout(); + lammps_commands_list(lmp, sizeof(demo_input) / sizeof(char *), demo_input); + lammps_commands_list(lmp, sizeof(cont_input) / sizeof(char *), cont_input); + if (!verbose) ::testing::internal::GetCapturedStdout(); + EXPECT_EQ(lammps_get_natoms(lmp), 2); }; -TEST_F(LAMMPS_commands, from_string) { +TEST_F(LAMMPS_commands, from_string) +{ std::string cmds(""); - for (unsigned int i=0; i < sizeof(demo_input)/sizeof(char *); ++i) { + for (unsigned int i = 0; i < sizeof(demo_input) / sizeof(char *); ++i) { cmds += demo_input[i]; cmds += "\n"; } - for (unsigned int i=0; i < sizeof(cont_input)/sizeof(char *); ++i) { + for (unsigned int i = 0; i < sizeof(cont_input) / sizeof(char *); ++i) { cmds += cont_input[i]; cmds += "\n"; } - EXPECT_EQ(lammps_get_natoms(lmp),0); - lammps_commands_string(lmp,cmds.c_str()); - EXPECT_EQ(lammps_get_natoms(lmp),2); + EXPECT_EQ(lammps_get_natoms(lmp), 0); + if (!verbose) ::testing::internal::CaptureStdout(); + lammps_commands_string(lmp, cmds.c_str()); + if (!verbose) ::testing::internal::GetCapturedStdout(); + EXPECT_EQ(lammps_get_natoms(lmp), 2); }; diff --git a/unittest/c-library/test_library_open.cpp b/unittest/c-library/test_library_open.cpp index 16d25eca13..a948295017 100644 --- a/unittest/c-library/test_library_open.cpp +++ b/unittest/c-library/test_library_open.cpp @@ -1,21 +1,29 @@ -// unit tests for the LAMMPS base class +// unit tests creating LAMMPS instances via the library interface -#include "library.h" #include "lammps.h" +#include "library.h" +#include // for stdin, stdout #include -#include // for stdin, stdout #include +#include "gmock/gmock.h" #include "gtest/gtest.h" -TEST(lammps_open, null_args) { +#include "test_main.h" + +using ::testing::HasSubstr; +using ::testing::StartsWith; + +TEST(lammps_open, null_args) +{ ::testing::internal::CaptureStdout(); - void *handle = lammps_open(0,NULL, MPI_COMM_WORLD, NULL); + void *handle = lammps_open(0, NULL, MPI_COMM_WORLD, NULL); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,6).c_str(),"LAMMPS"); - int mpi_init=0; + EXPECT_THAT(output, StartsWith("LAMMPS (")); + if (verbose) std::cout << output; + int mpi_init = 0; MPI_Initialized(&mpi_init); - EXPECT_GT(mpi_init,0); + EXPECT_GT(mpi_init, 0); LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; EXPECT_EQ(lmp->world, MPI_COMM_WORLD); EXPECT_EQ(lmp->infile, stdin); @@ -24,25 +32,26 @@ TEST(lammps_open, null_args) { ::testing::internal::CaptureStdout(); lammps_close(handle); output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,16).c_str(), "Total wall time:"); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; } -TEST(lammps_open, with_args) { - const char *args[] = {"liblammps", - "-log", "none", - "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args)/sizeof(char *); +TEST(lammps_open, with_args) +{ + const char *args[] = {"liblammps", "-log", "none", "-nocite"}; + char **argv = (char **)args; + int argc = sizeof(args) / sizeof(char *); // MPI is already initialized MPI_Comm mycomm; MPI_Comm_split(MPI_COMM_WORLD, 0, 1, &mycomm); ::testing::internal::CaptureStdout(); void *alt_ptr; - void *handle = lammps_open(argc, argv, mycomm, &alt_ptr); + void *handle = lammps_open(argc, argv, mycomm, &alt_ptr); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,6).c_str(),"LAMMPS"); - EXPECT_EQ(handle,alt_ptr); + EXPECT_THAT(output, StartsWith("LAMMPS (")); + if (verbose) std::cout << output; + EXPECT_EQ(handle, alt_ptr); LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; // MPI STUBS uses no real communicators @@ -60,24 +69,24 @@ TEST(lammps_open, with_args) { ::testing::internal::CaptureStdout(); lammps_close(handle); output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,16).c_str(), "Total wall time:"); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; } -TEST(lammps_open, with_kokkos) { +TEST(lammps_open, with_kokkos) +{ if (!LAMMPS_NS::LAMMPS::is_installed_pkg("KOKKOS")) GTEST_SKIP(); - const char *args[] = {"liblammps", - "-k", "on", "t", "2", - "-sf", "kk", - "-log", "none" }; - char **argv = (char **)args; - int argc = sizeof(args)/sizeof(char *); + const char *args[] = {"liblammps", "-k", "on", "t", "2", "-sf", "kk", "-log", "none"}; + char **argv = (char **)args; + int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); void *alt_ptr; - void *handle = lammps_open(argc, argv, MPI_COMM_WORLD, &alt_ptr); + void *handle = lammps_open(argc, argv, MPI_COMM_WORLD, &alt_ptr); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,6).c_str(),"LAMMPS"); - EXPECT_EQ(handle,alt_ptr); + EXPECT_THAT(output, StartsWith("LAMMPS (")); + if (verbose) std::cout << output; + EXPECT_EQ(handle, alt_ptr); LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; EXPECT_EQ(lmp->world, MPI_COMM_WORLD); @@ -91,23 +100,22 @@ TEST(lammps_open, with_kokkos) { ::testing::internal::CaptureStdout(); lammps_close(handle); output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,16).c_str(), "Total wall time:"); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; } -TEST(lammps_open_no_mpi, no_screen) { - const char *args[] = {"liblammps", - "-log", "none", - "-screen", "none", - "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args)/sizeof(char *); +TEST(lammps_open_no_mpi, no_screen) +{ + const char *args[] = {"liblammps", "-log", "none", "-screen", "none", "-nocite"}; + char **argv = (char **)args; + int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); void *alt_ptr; - void *handle = lammps_open_no_mpi(argc, argv, &alt_ptr); + void *handle = lammps_open_no_mpi(argc, argv, &alt_ptr); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.c_str(),""); - EXPECT_EQ(handle,alt_ptr); + EXPECT_STREQ(output.c_str(), ""); + EXPECT_EQ(handle, alt_ptr); LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; EXPECT_EQ(lmp->world, MPI_COMM_WORLD); @@ -125,22 +133,21 @@ TEST(lammps_open_no_mpi, no_screen) { EXPECT_STREQ(output.c_str(), ""); } -TEST(lammps_open_no_mpi, with_omp) { +TEST(lammps_open_no_mpi, with_omp) +{ if (!LAMMPS_NS::LAMMPS::is_installed_pkg("USER-OMP")) GTEST_SKIP(); - const char *args[] = {"liblammps", - "-pk", "omp", "2", "neigh", "no", - "-sf", "omp", - "-log", "none", - "-nocite"}; - char **argv = (char **)args; - int argc = sizeof(args)/sizeof(char *); + const char *args[] = {"liblammps", "-pk", "omp", "2", "neigh", "no", + "-sf", "omp", "-log", "none", "-nocite"}; + char **argv = (char **)args; + int argc = sizeof(args) / sizeof(char *); ::testing::internal::CaptureStdout(); void *alt_ptr; - void *handle = lammps_open_no_mpi(argc, argv, &alt_ptr); + void *handle = lammps_open_no_mpi(argc, argv, &alt_ptr); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,6).c_str(),"LAMMPS"); - EXPECT_EQ(handle,alt_ptr); + EXPECT_THAT(output, StartsWith("LAMMPS (")); + if (verbose) std::cout << output; + EXPECT_EQ(handle, alt_ptr); LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; EXPECT_EQ(lmp->world, MPI_COMM_WORLD); @@ -155,18 +162,21 @@ TEST(lammps_open_no_mpi, with_omp) { ::testing::internal::CaptureStdout(); lammps_close(handle); output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,16).c_str(), "Total wall time:"); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; } -TEST(lammps_open_fortran, no_args) { +TEST(lammps_open_fortran, no_args) +{ // MPI is already initialized MPI_Comm mycomm; MPI_Comm_split(MPI_COMM_WORLD, 0, 1, &mycomm); int fcomm = MPI_Comm_c2f(mycomm); ::testing::internal::CaptureStdout(); - void *handle = lammps_open_fortran(0, NULL, fcomm); + void *handle = lammps_open_fortran(0, NULL, fcomm); std::string output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,6).c_str(),"LAMMPS"); + EXPECT_THAT(output, StartsWith("LAMMPS (")); + if (verbose) std::cout << output; LAMMPS_NS::LAMMPS *lmp = (LAMMPS_NS::LAMMPS *)handle; // MPI STUBS uses no real communicators @@ -182,5 +192,6 @@ TEST(lammps_open_fortran, no_args) { ::testing::internal::CaptureStdout(); lammps_close(handle); output = ::testing::internal::GetCapturedStdout(); - EXPECT_STREQ(output.substr(0,16).c_str(), "Total wall time:"); + EXPECT_THAT(output, HasSubstr("Total wall time:")); + if (verbose) std::cout << output; } diff --git a/unittest/c-library/test_library_properties.cpp b/unittest/c-library/test_library_properties.cpp index 030ff96795..b279a11fdb 100644 --- a/unittest/c-library/test_library_properties.cpp +++ b/unittest/c-library/test_library_properties.cpp @@ -1,7 +1,7 @@ // unit tests for checking and changing simulation properties through the library interface -#include "lammps.h" #include "library.h" +#include "lammps.h" #include #include "gmock/gmock.h"