TEST(FileFormatManagerTest, readFileGuessCjson) { Molecule molecule; FileFormatManager::instance().readFile(molecule, std::string(AVOGADRO_DATA) + "/data/ethane.cjson"); EXPECT_EQ(molecule.data("name").type(), Variant::String); EXPECT_EQ(molecule.data("name").toString(), "Ethane"); EXPECT_EQ(molecule.data("inchi").type(), Variant::String); EXPECT_EQ(molecule.data("inchi").toString(), "1/C2H6/c1-2/h1-2H3"); }
TEST(CjsonTest, readFile) { CjsonFormat cjson; Molecule molecule; bool success = cjson.readFile(std::string(AVOGADRO_DATA) + "/data/ethane.cjson", molecule); EXPECT_TRUE(success); EXPECT_EQ(cjson.error(), ""); EXPECT_EQ(molecule.data("name").type(), Variant::String); EXPECT_EQ(molecule.data("name").toString(), "Ethane"); EXPECT_EQ(molecule.data("inchi").type(), Variant::String); EXPECT_EQ(molecule.data("inchi").toString(), "1/C2H6/c1-2/h1-2H3"); }
TEST(FileFormatManagerTest, readFile) { FileFormat *format = FileFormatManager::instance().newFormatFromIdentifier("Avogadro: CML"); EXPECT_TRUE(format != NULL); if (!format) return; Molecule molecule; format->readFile(std::string(AVOGADRO_DATA) + "/data/ethane.cml", molecule); delete format; format = NULL; EXPECT_EQ(molecule.data("name").type(), Variant::String); EXPECT_EQ(molecule.data("name").toString(), "Ethane"); EXPECT_EQ(molecule.data("inchi").type(), Variant::String); EXPECT_EQ(molecule.data("inchi").toString(), "1/C2H6/c1-2/h1-2H3"); }
TEST_F(MoleculeTest, dataMap) { Molecule molecule; molecule.setData("name", "ethanol"); molecule.setData("formula", "C2H6O"); VariantMap varMap = molecule.dataMap(); varMap.setValue("SMILES", "CCO"); molecule.setDataMap(varMap); molecule.dataMap().setValue("CAS", "64-17-5"); std::vector<std::string> dataNames = molecule.dataMap().names(); EXPECT_EQ(dataNames.size(), 4); EXPECT_EQ(molecule.hasData("name"), true); EXPECT_EQ(molecule.hasData("invalid"), false); EXPECT_EQ(molecule.data("name").toString(), "ethanol"); EXPECT_EQ(molecule.data("formula").toString(), "C2H6O"); EXPECT_EQ(molecule.data("SMILES").toString(), "CCO"); EXPECT_EQ(molecule.data("CAS").toString(), "64-17-5"); }
TEST(CjsonTest, crystal) { CjsonFormat cjson; Molecule molecule; bool success = cjson.readFile(std::string(AVOGADRO_DATA) + "/data/rutile.cjson", molecule); EXPECT_TRUE(success); EXPECT_EQ(cjson.error(), ""); EXPECT_EQ(molecule.data("name").toString(), "TiO2 rutile"); EXPECT_EQ(molecule.atomCount(), static_cast<size_t>(6)); EXPECT_EQ(molecule.bondCount(), static_cast<size_t>(0)); const UnitCell *unitCell = molecule.unitCell(); ASSERT_NE(unitCell, (UnitCell*)NULL); EXPECT_TRUE(std::fabs((float)unitCell->a() - 2.95812f) < 1e-5f); EXPECT_TRUE(std::fabs((float)unitCell->b() - 4.59373f) < 1e-5f); EXPECT_TRUE(std::fabs((float)unitCell->c() - 4.59373f) < 1e-5f); EXPECT_TRUE(std::fabs((float)unitCell->alpha() - (.5f * PI_F)) < 1e-5f); EXPECT_TRUE(std::fabs((float)unitCell->beta() - (.5f * PI_F)) < 1e-5f); EXPECT_TRUE(std::fabs((float)unitCell->gamma() - (.5f * PI_F)) < 1e-5f); Atom atom = molecule.atom(5); EXPECT_EQ(atom.atomicNumber(), 8); EXPECT_TRUE(std::fabs((float)atom.position3d().x() - 1.479060f) < 1e-5f); EXPECT_TRUE(std::fabs((float)atom.position3d().y() - 3.699331f) < 1e-5f); EXPECT_TRUE(std::fabs((float)atom.position3d().z() - 0.894399f) < 1e-5f); std::string cjsonStr; cjson.writeString(cjsonStr, molecule); Molecule otherMolecule; cjson.readString(cjsonStr, otherMolecule); const UnitCell *otherUnitCell = otherMolecule.unitCell(); ASSERT_NE(otherUnitCell, (UnitCell*)NULL); EXPECT_FLOAT_EQ((float)otherUnitCell->a(), (float)unitCell->a()); EXPECT_FLOAT_EQ((float)otherUnitCell->b(), (float)unitCell->b()); EXPECT_FLOAT_EQ((float)otherUnitCell->c(), (float)unitCell->c()); EXPECT_FLOAT_EQ((float)otherUnitCell->alpha(), (float)unitCell->alpha()); EXPECT_FLOAT_EQ((float)otherUnitCell->beta(), (float)unitCell->beta()); EXPECT_FLOAT_EQ((float)otherUnitCell->gamma(), (float)unitCell->gamma()); Atom otherAtom = otherMolecule.atom(5); EXPECT_EQ(otherAtom.atomicNumber(), atom.atomicNumber()); EXPECT_FLOAT_EQ((float)otherAtom.position3d().x(), (float)atom.position3d().x()); EXPECT_FLOAT_EQ((float)otherAtom.position3d().y(), (float)atom.position3d().y()); EXPECT_FLOAT_EQ((float)otherAtom.position3d().z(), (float)atom.position3d().z()); }
TEST(CjsonTest, bonds) { CjsonFormat cjson; Molecule molecule; bool success = cjson.readFile(std::string(AVOGADRO_DATA) + "/data/ethane.cjson", molecule); EXPECT_TRUE(success); EXPECT_EQ(cjson.error(), ""); EXPECT_EQ(molecule.data("name").toString(), "Ethane"); EXPECT_EQ(molecule.atomCount(), static_cast<size_t>(8)); EXPECT_EQ(molecule.bondCount(), static_cast<size_t>(7)); Bond bond = molecule.bond(0); EXPECT_EQ(bond.atom1().index(), static_cast<size_t>(0)); EXPECT_EQ(bond.atom2().index(), static_cast<size_t>(1)); EXPECT_EQ(bond.order(), static_cast<unsigned char>(1)); bond = molecule.bond(6); EXPECT_EQ(bond.atom1().index(), static_cast<size_t>(4)); EXPECT_EQ(bond.atom2().index(), static_cast<size_t>(7)); EXPECT_EQ(bond.order(), static_cast<unsigned char>(1)); }
TEST(CjsonTest, atoms) { CjsonFormat cjson; Molecule molecule; bool success = cjson.readFile(std::string(AVOGADRO_DATA) + "/data/ethane.cjson", molecule); EXPECT_TRUE(success); EXPECT_EQ(cjson.error(), ""); EXPECT_EQ(molecule.data("name").toString(), "Ethane"); EXPECT_EQ(molecule.atomCount(), static_cast<size_t>(8)); Atom atom = molecule.atom(0); EXPECT_EQ(atom.atomicNumber(), static_cast<unsigned char>(1)); atom = molecule.atom(1); EXPECT_EQ(atom.atomicNumber(), static_cast<unsigned char>(6)); EXPECT_EQ(atom.position3d().x(), 0.751621); EXPECT_EQ(atom.position3d().y(), -0.022441); EXPECT_EQ(atom.position3d().z(), -0.020839); atom = molecule.atom(7); EXPECT_EQ(atom.atomicNumber(), static_cast<unsigned char>(1)); EXPECT_EQ(atom.position3d().x(), -1.184988); EXPECT_EQ(atom.position3d().y(), 0.004424); EXPECT_EQ(atom.position3d().z(), -0.987522); }
TEST_F(MoleculeTest, setData) { Molecule molecule; molecule.setData("name", "ethanol"); EXPECT_EQ(molecule.data("name").toString(), "ethanol"); }