diff --git a/unittest/commands/test_set_property.cpp b/unittest/commands/test_set_property.cpp index b75f0b465d..87dbaedddd 100644 --- a/unittest/commands/test_set_property.cpp +++ b/unittest/commands/test_set_property.cpp @@ -17,6 +17,7 @@ #include "compute.h" #include "domain.h" #include "math_const.h" +#include "modify.h" #include "../testing/core.h" #include "gmock/gmock.h" @@ -82,7 +83,12 @@ TEST_F(SetTest, NoBoxNoAtoms) BEGIN_HIDE_OUTPUT(); command("create_atoms 1 single 0.5 0.5 0.5"); + command("compute 0 all property/atom proc"); END_HIDE_OUTPUT(); + auto compute = lmp->modify->get_compute_by_id("0"); + compute->compute_peratom(); + ASSERT_EQ(compute->vector_atom[0], 0); + TEST_FAILURE(".*ERROR: Illegal set command: need at least four.*", command("set type 1 x");); TEST_FAILURE(".*ERROR: Unknown set command style: xxx.*", command("set xxx 1 x 0.0");); TEST_FAILURE(".*ERROR: Set keyword or custom property yyy does not exist.*", @@ -92,6 +98,11 @@ TEST_F(SetTest, NoBoxNoAtoms) command("set atom * spin/atom 1.0 1.0 0.0 0.0");); TEST_FAILURE(".*ERROR: Cannot set attribute spin/atom/random for atom style atomic.*", command("set atom * spin/atom/random 436273456 1.0");); + + TEST_FAILURE(".*ERROR: Illegal compute property/atom command: missing argument.*", + command("compute 1 all property/atom");); + TEST_FAILURE(".*ERROR: Compute property/atom mol is not available.*", + command("compute 1 all property/atom mol");); } TEST_F(SetTest, StylesTypes) @@ -104,7 +115,12 @@ TEST_F(SetTest, StylesTypes) command("set group top type 2"); command("set region back type 3"); command("set region left mol 2"); + command("compute 1 all property/atom id type mol"); END_HIDE_OUTPUT(); + auto compute = lmp->modify->get_compute_by_id("1"); + compute->compute_peratom(); + + ASSERT_NE(compute, nullptr); ASSERT_EQ(atom->type[0], 2); ASSERT_EQ(atom->type[1], 2); ASSERT_EQ(atom->type[2], 1); @@ -114,6 +130,45 @@ TEST_F(SetTest, StylesTypes) ASSERT_EQ(atom->type[6], 1); ASSERT_EQ(atom->type[7], 1); + ASSERT_EQ(atom->molecule[0], 2); + ASSERT_EQ(atom->molecule[1], 1); + ASSERT_EQ(atom->molecule[2], 2); + ASSERT_EQ(atom->molecule[3], 1); + ASSERT_EQ(atom->molecule[4], 2); + ASSERT_EQ(atom->molecule[5], 1); + ASSERT_EQ(atom->molecule[6], 2); + ASSERT_EQ(atom->molecule[7], 1); + + // atom ID + ASSERT_EQ(compute->array_atom[0][0], 1); + ASSERT_EQ(compute->array_atom[1][0], 2); + ASSERT_EQ(compute->array_atom[2][0], 3); + ASSERT_EQ(compute->array_atom[3][0], 4); + ASSERT_EQ(compute->array_atom[4][0], 5); + ASSERT_EQ(compute->array_atom[5][0], 6); + ASSERT_EQ(compute->array_atom[6][0], 7); + ASSERT_EQ(compute->array_atom[7][0], 8); + + // atom type + ASSERT_EQ(compute->array_atom[0][1], 2); + ASSERT_EQ(compute->array_atom[1][1], 2); + ASSERT_EQ(compute->array_atom[2][1], 1); + ASSERT_EQ(compute->array_atom[3][1], 1); + ASSERT_EQ(compute->array_atom[4][1], 2); + ASSERT_EQ(compute->array_atom[5][1], 2); + ASSERT_EQ(compute->array_atom[6][1], 1); + ASSERT_EQ(compute->array_atom[7][1], 1); + + // mol ID + ASSERT_EQ(compute->array_atom[0][2], 2); + ASSERT_EQ(compute->array_atom[1][2], 1); + ASSERT_EQ(compute->array_atom[2][2], 2); + ASSERT_EQ(compute->array_atom[3][2], 1); + ASSERT_EQ(compute->array_atom[4][2], 2); + ASSERT_EQ(compute->array_atom[5][2], 1); + ASSERT_EQ(compute->array_atom[6][2], 2); + ASSERT_EQ(compute->array_atom[7][2], 1); + BEGIN_HIDE_OUTPUT(); command("set mol 1 type 4"); command("set atom 4*7 type 5"); @@ -181,14 +236,14 @@ TEST_F(SetTest, PosVelCharge) command("set group top charge 1.0"); command("set atom 5*8 charge -1.0"); END_HIDE_OUTPUT(); - EXPECT_EQ(atom->q[0], 1); - EXPECT_EQ(atom->q[1], 1); - EXPECT_EQ(atom->q[2], 0); - EXPECT_EQ(atom->q[3], 0); - EXPECT_EQ(atom->q[4], -1); - EXPECT_EQ(atom->q[5], -1); - EXPECT_EQ(atom->q[6], -1); - EXPECT_EQ(atom->q[7], -1); + ASSERT_EQ(atom->q[0], 1); + ASSERT_EQ(atom->q[1], 1); + ASSERT_EQ(atom->q[2], 0); + ASSERT_EQ(atom->q[3], 0); + ASSERT_EQ(atom->q[4], -1); + ASSERT_EQ(atom->q[5], -1); + ASSERT_EQ(atom->q[6], -1); + ASSERT_EQ(atom->q[7], -1); BEGIN_HIDE_OUTPUT(); command("variable xpos atom 0.5-x"); @@ -196,55 +251,55 @@ TEST_F(SetTest, PosVelCharge) command("set atom * x v_xpos y v_ypos z 0.5"); command("set group all vx v_xpos vy v_ypos vz 0.5"); END_HIDE_OUTPUT(); - EXPECT_EQ(atom->x[0][0], 0.375); - EXPECT_EQ(atom->x[0][1], 0.0625); - EXPECT_EQ(atom->x[0][2], 0.5); - EXPECT_EQ(atom->x[1][0], -0.625); - EXPECT_EQ(atom->x[1][1], 0.0625); - EXPECT_EQ(atom->x[1][2], 0.5); - EXPECT_EQ(atom->x[2][0], 0.375); - EXPECT_EQ(atom->x[2][1], 0.5625); - EXPECT_EQ(atom->x[2][2], 0.5); - EXPECT_EQ(atom->x[3][0], -0.625); - EXPECT_EQ(atom->x[3][1], 0.5625); - EXPECT_EQ(atom->x[3][2], 0.5); - EXPECT_EQ(atom->x[4][0], 0.375); - EXPECT_EQ(atom->x[4][1], 0.0625); - EXPECT_EQ(atom->x[4][2], 0.5); - EXPECT_EQ(atom->x[5][0], -0.625); - EXPECT_EQ(atom->x[5][1], 0.0625); - EXPECT_EQ(atom->x[5][2], 0.5); - EXPECT_EQ(atom->x[6][0], 0.375); - EXPECT_EQ(atom->x[6][1], 0.5625); - EXPECT_EQ(atom->x[6][2], 0.5); - EXPECT_EQ(atom->x[7][0], -0.625); - EXPECT_EQ(atom->x[7][1], 0.5625); - EXPECT_EQ(atom->x[7][2], 0.5); + ASSERT_EQ(atom->x[0][0], 0.375); + ASSERT_EQ(atom->x[0][1], 0.0625); + ASSERT_EQ(atom->x[0][2], 0.5); + ASSERT_EQ(atom->x[1][0], -0.625); + ASSERT_EQ(atom->x[1][1], 0.0625); + ASSERT_EQ(atom->x[1][2], 0.5); + ASSERT_EQ(atom->x[2][0], 0.375); + ASSERT_EQ(atom->x[2][1], 0.5625); + ASSERT_EQ(atom->x[2][2], 0.5); + ASSERT_EQ(atom->x[3][0], -0.625); + ASSERT_EQ(atom->x[3][1], 0.5625); + ASSERT_EQ(atom->x[3][2], 0.5); + ASSERT_EQ(atom->x[4][0], 0.375); + ASSERT_EQ(atom->x[4][1], 0.0625); + ASSERT_EQ(atom->x[4][2], 0.5); + ASSERT_EQ(atom->x[5][0], -0.625); + ASSERT_EQ(atom->x[5][1], 0.0625); + ASSERT_EQ(atom->x[5][2], 0.5); + ASSERT_EQ(atom->x[6][0], 0.375); + ASSERT_EQ(atom->x[6][1], 0.5625); + ASSERT_EQ(atom->x[6][2], 0.5); + ASSERT_EQ(atom->x[7][0], -0.625); + ASSERT_EQ(atom->x[7][1], 0.5625); + ASSERT_EQ(atom->x[7][2], 0.5); - EXPECT_EQ(atom->v[0][0], 0.125); - EXPECT_EQ(atom->v[0][1], 0.03125); - EXPECT_EQ(atom->v[0][2], 0.5); - EXPECT_EQ(atom->v[1][0], 1.125); - EXPECT_EQ(atom->v[1][1], 0.03125); - EXPECT_EQ(atom->v[1][2], 0.5); - EXPECT_EQ(atom->v[2][0], 0.125); - EXPECT_EQ(atom->v[2][1], 0.28125); - EXPECT_EQ(atom->v[2][2], 0.5); - EXPECT_EQ(atom->v[3][0], 1.125); - EXPECT_EQ(atom->v[3][1], 0.28125); - EXPECT_EQ(atom->v[3][2], 0.5); - EXPECT_EQ(atom->v[4][0], 0.125); - EXPECT_EQ(atom->v[4][1], 0.03125); - EXPECT_EQ(atom->v[4][2], 0.5); - EXPECT_EQ(atom->v[5][0], 1.125); - EXPECT_EQ(atom->v[5][1], 0.03125); - EXPECT_EQ(atom->v[5][2], 0.5); - EXPECT_EQ(atom->v[6][0], 0.125); - EXPECT_EQ(atom->v[6][1], 0.28125); - EXPECT_EQ(atom->v[6][2], 0.5); - EXPECT_EQ(atom->v[7][0], 1.125); - EXPECT_EQ(atom->v[7][1], 0.28125); - EXPECT_EQ(atom->v[7][2], 0.5); + ASSERT_EQ(atom->v[0][0], 0.125); + ASSERT_EQ(atom->v[0][1], 0.03125); + ASSERT_EQ(atom->v[0][2], 0.5); + ASSERT_EQ(atom->v[1][0], 1.125); + ASSERT_EQ(atom->v[1][1], 0.03125); + ASSERT_EQ(atom->v[1][2], 0.5); + ASSERT_EQ(atom->v[2][0], 0.125); + ASSERT_EQ(atom->v[2][1], 0.28125); + ASSERT_EQ(atom->v[2][2], 0.5); + ASSERT_EQ(atom->v[3][0], 1.125); + ASSERT_EQ(atom->v[3][1], 0.28125); + ASSERT_EQ(atom->v[3][2], 0.5); + ASSERT_EQ(atom->v[4][0], 0.125); + ASSERT_EQ(atom->v[4][1], 0.03125); + ASSERT_EQ(atom->v[4][2], 0.5); + ASSERT_EQ(atom->v[5][0], 1.125); + ASSERT_EQ(atom->v[5][1], 0.03125); + ASSERT_EQ(atom->v[5][2], 0.5); + ASSERT_EQ(atom->v[6][0], 0.125); + ASSERT_EQ(atom->v[6][1], 0.28125); + ASSERT_EQ(atom->v[6][2], 0.5); + ASSERT_EQ(atom->v[7][0], 1.125); + ASSERT_EQ(atom->v[7][1], 0.28125); + ASSERT_EQ(atom->v[7][2], 0.5); } TEST_F(SetTest, SpinPackage) @@ -261,22 +316,22 @@ TEST_F(SetTest, SpinPackage) constexpr double vy = 0.5; constexpr double vz = -0.1; constexpr double norm = 1.0 / sqrt(vx * vx + vy * vy + vz * vz); - EXPECT_EQ(atom->sp[0][0], vx * norm); - EXPECT_EQ(atom->sp[0][1], vy * norm); - EXPECT_EQ(atom->sp[0][2], vz * norm); - EXPECT_EQ(atom->sp[0][3], 0.5); - EXPECT_EQ(atom->sp[1][0], vx * norm); - EXPECT_EQ(atom->sp[1][1], vy * norm); - EXPECT_EQ(atom->sp[1][2], vz * norm); - EXPECT_EQ(atom->sp[1][3], 0.5); - EXPECT_NE(atom->sp[7][0], 0.0); - EXPECT_NE(atom->sp[7][1], 0.0); - EXPECT_NE(atom->sp[7][2], 0.0); - EXPECT_EQ(atom->sp[7][3], 0.25); + ASSERT_EQ(atom->sp[0][0], vx * norm); + ASSERT_EQ(atom->sp[0][1], vy * norm); + ASSERT_EQ(atom->sp[0][2], vz * norm); + ASSERT_EQ(atom->sp[0][3], 0.5); + ASSERT_EQ(atom->sp[1][0], vx * norm); + ASSERT_EQ(atom->sp[1][1], vy * norm); + ASSERT_EQ(atom->sp[1][2], vz * norm); + ASSERT_EQ(atom->sp[1][3], 0.5); + ASSERT_NE(atom->sp[7][0], 0.0); + ASSERT_NE(atom->sp[7][1], 0.0); + ASSERT_NE(atom->sp[7][2], 0.0); + ASSERT_EQ(atom->sp[7][3], 0.25); for (int i = 2; i < 7; ++i) for (int j = 0; j < 4; ++j) - EXPECT_EQ(atom->sp[i][j], 0); + ASSERT_EQ(atom->sp[i][j], 0); TEST_FAILURE(".*ERROR: Invalid spin magnitude -0.1 in set spin/atom command.*", command("set atom * spin/atom -0.1 1.0 0.0 0.0"););