From 780fb5b3760d9be56d88980ba216f0e5b40b01b3 Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 27 Jul 2020 10:43:37 -0400 Subject: [PATCH] add test function to validate updated topology data after reset_atom_ids --- unittest/commands/test_reset_ids.cpp | 192 +++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) diff --git a/unittest/commands/test_reset_ids.cpp b/unittest/commands/test_reset_ids.cpp index f676ecc557..4538aaca3f 100644 --- a/unittest/commands/test_reset_ids.cpp +++ b/unittest/commands/test_reset_ids.cpp @@ -466,6 +466,198 @@ TEST_F(ResetIDsTest, DeleteAdd) ASSERT_EQ(molid[GETIDX(27)], 27); } +TEST_F(ResetIDsTest, TopologyData) +{ + if (lmp->atom->natoms == 0) GTEST_SKIP(); + + // delete two water molecules + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("group allwater molecule 3:6"); + lmp->input->one("group twowater molecule 4:6:2"); + lmp->input->one("group nowater subtract all allwater"); + lmp->input->one("delete_atoms group twowater compress no bond yes mol yes"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + ASSERT_EQ(lmp->atom->natoms, 23); + ASSERT_EQ(lmp->atom->map_tag_max, 26); + + auto num_bond = lmp->atom->num_bond; + auto num_angle = lmp->atom->num_angle; + auto num_dihedral = lmp->atom->num_dihedral; + auto num_improper = lmp->atom->num_improper; + auto bond_atom = lmp->atom->bond_atom; + auto angle_atom1 = lmp->atom->angle_atom1; + auto angle_atom2 = lmp->atom->angle_atom2; + auto angle_atom3 = lmp->atom->angle_atom3; + ASSERT_EQ(num_bond[GETIDX(1)],2); + ASSERT_EQ(bond_atom[GETIDX(1)][0],2); + ASSERT_EQ(bond_atom[GETIDX(1)][1],3); + ASSERT_EQ(num_bond[GETIDX(2)],0); + ASSERT_EQ(num_bond[GETIDX(3)],3); + ASSERT_EQ(bond_atom[GETIDX(3)][0],4); + ASSERT_EQ(bond_atom[GETIDX(3)][1],5); + ASSERT_EQ(bond_atom[GETIDX(3)][2],6); + ASSERT_EQ(num_bond[GETIDX(4)],0); + ASSERT_EQ(num_bond[GETIDX(5)],0); + ASSERT_EQ(num_bond[GETIDX(6)],2); + ASSERT_EQ(bond_atom[GETIDX(6)][0],8); + ASSERT_EQ(bond_atom[GETIDX(6)][1],7); + ASSERT_EQ(num_bond[GETIDX(7)],0); + ASSERT_EQ(num_bond[GETIDX(8)],2); + ASSERT_EQ(bond_atom[GETIDX(8)][0],9); + ASSERT_EQ(bond_atom[GETIDX(8)][1],10); + ASSERT_EQ(num_bond[GETIDX(9)],0); + ASSERT_EQ(num_bond[GETIDX(10)],3); + ASSERT_EQ(bond_atom[GETIDX(10)][0],11); + ASSERT_EQ(bond_atom[GETIDX(10)][1],12); + ASSERT_EQ(bond_atom[GETIDX(10)][2],16); + ASSERT_EQ(num_bond[GETIDX(11)],0); + ASSERT_EQ(num_bond[GETIDX(12)],3); + ASSERT_EQ(bond_atom[GETIDX(12)][0],13); + ASSERT_EQ(bond_atom[GETIDX(12)][1],14); + ASSERT_EQ(bond_atom[GETIDX(12)][2],15); + ASSERT_EQ(num_bond[GETIDX(13)],0); + ASSERT_EQ(num_bond[GETIDX(14)],0); + ASSERT_EQ(num_bond[GETIDX(15)],0); + ASSERT_EQ(num_bond[GETIDX(16)],1); + ASSERT_EQ(bond_atom[GETIDX(16)][0],17); + ASSERT_EQ(num_bond[GETIDX(17)],0); + ASSERT_EQ(num_bond[GETIDX(18)],2); + ASSERT_EQ(bond_atom[GETIDX(18)][0],19); + ASSERT_EQ(bond_atom[GETIDX(18)][1],20); + ASSERT_EQ(num_bond[GETIDX(19)],0); + ASSERT_EQ(num_bond[GETIDX(20)],0); + ASSERT_EQ(num_bond[GETIDX(24)],2); + ASSERT_EQ(bond_atom[GETIDX(24)][0],25); + ASSERT_EQ(bond_atom[GETIDX(24)][1],26); + ASSERT_EQ(num_bond[GETIDX(25)],0); + ASSERT_EQ(num_bond[GETIDX(26)],0); + + ASSERT_EQ(num_angle[GETIDX(1)],1); + ASSERT_EQ(angle_atom1[GETIDX(1)][0],2); + ASSERT_EQ(angle_atom2[GETIDX(1)][0],1); + ASSERT_EQ(angle_atom3[GETIDX(1)][0],3); + ASSERT_EQ(num_angle[GETIDX(2)],0); + ASSERT_EQ(num_angle[GETIDX(3)],6); + ASSERT_EQ(angle_atom1[GETIDX(3)][0],1); + ASSERT_EQ(angle_atom2[GETIDX(3)][0],3); + ASSERT_EQ(angle_atom3[GETIDX(3)][0],5); + ASSERT_EQ(angle_atom1[GETIDX(3)][1],1); + ASSERT_EQ(angle_atom2[GETIDX(3)][1],3); + ASSERT_EQ(angle_atom3[GETIDX(3)][1],4); + ASSERT_EQ(angle_atom1[GETIDX(3)][2],1); + ASSERT_EQ(angle_atom2[GETIDX(3)][2],3); + ASSERT_EQ(angle_atom3[GETIDX(3)][2],6); + ASSERT_EQ(angle_atom1[GETIDX(3)][3],4); + ASSERT_EQ(angle_atom2[GETIDX(3)][3],3); + ASSERT_EQ(angle_atom3[GETIDX(3)][3],5); + ASSERT_EQ(angle_atom1[GETIDX(3)][4],5); + ASSERT_EQ(angle_atom2[GETIDX(3)][4],3); + ASSERT_EQ(angle_atom3[GETIDX(3)][4],6); + ASSERT_EQ(num_angle[GETIDX(18)],1); + ASSERT_EQ(angle_atom1[GETIDX(18)][0],19); + ASSERT_EQ(angle_atom2[GETIDX(18)][0],18); + ASSERT_EQ(angle_atom3[GETIDX(18)][0],20); + ASSERT_EQ(num_angle[GETIDX(24)],1); + ASSERT_EQ(angle_atom1[GETIDX(24)][0],25); + ASSERT_EQ(angle_atom2[GETIDX(24)][0],24); + ASSERT_EQ(angle_atom3[GETIDX(24)][0],26); + + if (!verbose) ::testing::internal::CaptureStdout(); + lmp->input->one("reset_atom_ids sort yes"); + if (!verbose) ::testing::internal::GetCapturedStdout(); + + num_bond = lmp->atom->num_bond; + num_angle = lmp->atom->num_angle; + num_dihedral = lmp->atom->num_dihedral; + num_improper = lmp->atom->num_improper; + bond_atom = lmp->atom->bond_atom; + angle_atom1 = lmp->atom->angle_atom1; + angle_atom2 = lmp->atom->angle_atom2; + angle_atom3 = lmp->atom->angle_atom3; + ASSERT_EQ(num_bond[GETIDX(1)],2); + ASSERT_EQ(bond_atom[GETIDX(1)][0],3); + ASSERT_EQ(bond_atom[GETIDX(1)][1],2); + ASSERT_EQ(num_bond[GETIDX(2)],0); + ASSERT_EQ(num_bond[GETIDX(3)],2); + ASSERT_EQ(bond_atom[GETIDX(3)][0],16); + ASSERT_EQ(bond_atom[GETIDX(3)][1],5); + ASSERT_EQ(num_bond[GETIDX(4)],0); + ASSERT_EQ(num_bond[GETIDX(5)],3); + ASSERT_EQ(bond_atom[GETIDX(5)][0],4); + ASSERT_EQ(bond_atom[GETIDX(5)][1],8); + ASSERT_EQ(bond_atom[GETIDX(5)][2],18); + ASSERT_EQ(num_bond[GETIDX(6)],0); + ASSERT_EQ(num_bond[GETIDX(7)],0); + ASSERT_EQ(num_bond[GETIDX(8)],3); + ASSERT_EQ(bond_atom[GETIDX(8)][0],9); + ASSERT_EQ(bond_atom[GETIDX(8)][1],6); + ASSERT_EQ(bond_atom[GETIDX(8)][2],7); + ASSERT_EQ(num_bond[GETIDX(9)],0); + ASSERT_EQ(num_bond[GETIDX(10)],0); + ASSERT_EQ(num_bond[GETIDX(11)],3); + ASSERT_EQ(bond_atom[GETIDX(11)][0],10); + ASSERT_EQ(bond_atom[GETIDX(11)][1],19); + ASSERT_EQ(bond_atom[GETIDX(11)][2],1); + ASSERT_EQ(num_bond[GETIDX(12)],0); + ASSERT_EQ(num_bond[GETIDX(13)],0); + ASSERT_EQ(num_bond[GETIDX(14)],2); + ASSERT_EQ(bond_atom[GETIDX(14)][0],13); + ASSERT_EQ(bond_atom[GETIDX(14)][1],15); + ASSERT_EQ(num_bond[GETIDX(15)],0); + ASSERT_EQ(num_bond[GETIDX(16)],0); + ASSERT_EQ(num_bond[GETIDX(17)],0); + ASSERT_EQ(num_bond[GETIDX(18)],1); + ASSERT_EQ(bond_atom[GETIDX(18)][0],17); + ASSERT_EQ(num_bond[GETIDX(19)],0); + ASSERT_EQ(num_bond[GETIDX(20)],2); + ASSERT_EQ(bond_atom[GETIDX(20)][0],12); + ASSERT_EQ(bond_atom[GETIDX(20)][1],11); + ASSERT_EQ(num_bond[GETIDX(21)],0); + ASSERT_EQ(num_bond[GETIDX(22)],2); + ASSERT_EQ(bond_atom[GETIDX(22)][0],21); + ASSERT_EQ(bond_atom[GETIDX(22)][1],23); + ASSERT_EQ(num_bond[GETIDX(23)],0); + + ASSERT_EQ(num_angle[GETIDX(1)],3); + ASSERT_EQ(angle_atom1[GETIDX(1)][0],11); + ASSERT_EQ(angle_atom2[GETIDX(1)][0],1); + ASSERT_EQ(angle_atom3[GETIDX(1)][0],2); + ASSERT_EQ(angle_atom1[GETIDX(1)][1],11); + ASSERT_EQ(angle_atom2[GETIDX(1)][1],1); + ASSERT_EQ(angle_atom3[GETIDX(1)][1],3); + ASSERT_EQ(angle_atom1[GETIDX(1)][2],2); + ASSERT_EQ(angle_atom2[GETIDX(1)][2],1); + ASSERT_EQ(angle_atom3[GETIDX(1)][2],3); + ASSERT_EQ(num_angle[GETIDX(2)],0); + ASSERT_EQ(num_angle[GETIDX(5)],6); + ASSERT_EQ(angle_atom1[GETIDX(5)][0],3); + ASSERT_EQ(angle_atom2[GETIDX(5)][0],5); + ASSERT_EQ(angle_atom3[GETIDX(5)][0],4); + ASSERT_EQ(angle_atom1[GETIDX(5)][1],3); + ASSERT_EQ(angle_atom2[GETIDX(5)][1],5); + ASSERT_EQ(angle_atom3[GETIDX(5)][1],18); + ASSERT_EQ(angle_atom1[GETIDX(5)][2],4); + ASSERT_EQ(angle_atom2[GETIDX(5)][2],5); + ASSERT_EQ(angle_atom3[GETIDX(5)][2],8); + ASSERT_EQ(angle_atom1[GETIDX(5)][3],8); + ASSERT_EQ(angle_atom2[GETIDX(5)][3],5); + ASSERT_EQ(angle_atom3[GETIDX(5)][3],18); + ASSERT_EQ(angle_atom1[GETIDX(5)][4],3); + ASSERT_EQ(angle_atom2[GETIDX(5)][4],5); + ASSERT_EQ(angle_atom3[GETIDX(5)][4],8); + ASSERT_EQ(angle_atom1[GETIDX(5)][5],4); + ASSERT_EQ(angle_atom2[GETIDX(5)][5],5); + ASSERT_EQ(angle_atom3[GETIDX(5)][5],18); + ASSERT_EQ(num_angle[GETIDX(20)],1); + ASSERT_EQ(angle_atom1[GETIDX(20)][0],12); + ASSERT_EQ(angle_atom2[GETIDX(20)][0],20); + ASSERT_EQ(angle_atom3[GETIDX(20)][0],11); + ASSERT_EQ(num_angle[GETIDX(22)],1); + ASSERT_EQ(angle_atom1[GETIDX(22)][0],21); + ASSERT_EQ(angle_atom2[GETIDX(22)][0],22); + ASSERT_EQ(angle_atom3[GETIDX(22)][0],23); +} + TEST_F(ResetIDsTest, DeathTests) { TEST_FAILURE(".*ERROR: Illegal reset_mol_ids command.*", lmp->input->one("reset_mol_ids"););