TEST_F(MoleculeSerializationTest, roundTrip) { MoleculeSerializer serializer(&this->ethane); size_t size = serializer.size(); uint8 *data = new uint8[size]; bool success = serializer.serialize(data, size); EXPECT_TRUE(success); Molecule after; MoleculeDeserializer deserializer(&after); success = deserializer.deserialize(data, size); EXPECT_TRUE(success); delete[] data; EXPECT_EQ(this->ethane.atomicNumbers(), after.atomicNumbers()); std::vector<Avogadro::Vector2> expected2d = this->ethane.atomPositions2d(); std::vector<Avogadro::Vector2> actual2d = after.atomPositions2d(); EXPECT_EQ(expected2d.size(), actual2d.size()); for (size_t i = 0; i < expected2d.size(); i++) EXPECT_TRUE(this->equal(expected2d[i], actual2d[i])); std::vector<Avogadro::Vector3> expected3d = this->ethane.atomPositions3d(); std::vector<Avogadro::Vector3> actual3d = after.atomPositions3d(); EXPECT_EQ(expected3d.size(), actual3d.size()); for (size_t i = 0; i < expected3d.size(); i++) EXPECT_TRUE(this->equal(expected3d[i], actual3d[i])); const std::vector<std::pair<size_t, size_t> > expectedBondPairs = this->ethane.bondPairs(); const std::vector<std::pair<size_t, size_t> > actualBondPairs = after.bondPairs(); EXPECT_EQ(expectedBondPairs.size(), actualBondPairs.size()); for (size_t i = 0; i < expectedBondPairs.size(); i++) { EXPECT_EQ(expectedBondPairs[i].first, actualBondPairs[i].first); EXPECT_EQ(expectedBondPairs[i].second, actualBondPairs[i].second); } const std::vector<unsigned char> expectedBondOrder = this->ethane.bondOrders(); const std::vector<unsigned char> actualBondOrder = after.bondOrders(); for (size_t i = 0; i < expectedBondOrder.size(); i++) EXPECT_EQ(expectedBondOrder[i], actualBondOrder[i]); }
void HydrogenTools::removeAllHydrogens(Molecule &molecule) { const Array<unsigned char> atomicNums(molecule.atomicNumbers()); size_t atomIndex = molecule.atomCount() - 1; for (Array<unsigned char>::const_reverse_iterator it = atomicNums.rbegin(), itEnd = atomicNums.rend(); it != itEnd; ++it, --atomIndex) { if (*it == 1) molecule.removeAtom(atomIndex); } }