コード例 #1
0
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]);
}
コード例 #2
0
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);
  }
}