// $Id$ // // Copyright (C) 2003-2013 Greg Landrum and Rational Discovery LLC // // @@ All Rights Reserved @@ // This file is part of the RDKit. // The contents are covered by the terms of the BSD license // which is included in the file license.txt, found at the root // of the RDKit source tree. // #include #include #include #include #include #include #include #include using namespace std; using namespace RDKit; void test1() { std::cout << "-----------------------\n Test1: pathToSubmol" << std::endl; { std::string smiles="CC1CC1"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); PATH_LIST sgs; sgs = findAllSubgraphsOfLengthN(*mol,3,false,0); TEST_ASSERT(sgs.size()==3); BOOST_FOREACH(PATH_TYPE tmp,sgs){ TEST_ASSERT(tmp[0]==0); TEST_ASSERT(tmp.size()==3); ROMol *frag=Subgraphs::pathToSubmol(*mol,tmp,false); smiles = MolToSmiles(*frag,true,false,0,false); if(tmp[1]==1){ if(tmp[2]==2){ TEST_ASSERT(smiles=="CCCC"); } else if(tmp[2]==3) { TEST_ASSERT(smiles=="CC(C)C"); } else { TEST_ASSERT(0); } } else if(tmp[1]==3){ if(tmp[2]==2){ TEST_ASSERT(smiles=="CCCC"); } else if(tmp[2]==1) { TEST_ASSERT(smiles=="CC(C)C"); } else { TEST_ASSERT(0); } } else { TEST_ASSERT(0); } delete frag; } delete mol; } std::cout << "Finished" << std::endl; } void test2() { std::cout << "-----------------------\n Test2: Atom Environments" << std::endl; { std::string smiles="CC1CC1"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); PATH_TYPE pth=findAtomEnvironmentOfRadiusN(*mol,1,0); TEST_ASSERT(pth.size()==1); TEST_ASSERT(pth[0]==0); pth=findAtomEnvironmentOfRadiusN(*mol,2,0); TEST_ASSERT(pth.size()==3); TEST_ASSERT(pth[0]==0); pth=findAtomEnvironmentOfRadiusN(*mol,3,0); TEST_ASSERT(pth.size()==4); TEST_ASSERT(pth[0]==0); pth=findAtomEnvironmentOfRadiusN(*mol,4,0); TEST_ASSERT(pth.size()==0); pth=findAtomEnvironmentOfRadiusN(*mol,1,1); TEST_ASSERT(pth.size()==3); pth=findAtomEnvironmentOfRadiusN(*mol,2,1); TEST_ASSERT(pth.size()==4); pth=findAtomEnvironmentOfRadiusN(*mol,3,1); TEST_ASSERT(pth.size()==0); delete mol; } { std::string smiles="CC1CC1"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); ROMol *mH=MolOps::addHs(static_cast(*mol)); PATH_TYPE pth=findAtomEnvironmentOfRadiusN(*mH,1,0); TEST_ASSERT(pth.size()==1); TEST_ASSERT(pth[0]==0); pth=findAtomEnvironmentOfRadiusN(*mH,1,0,true); TEST_ASSERT(pth.size()==4); delete mol; delete mH; } { std::string smiles="O=C(O)CCCC=CC(C1C(O)CC(O)C1(C=CC(O)CCCCC))"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); smiles = MolToSmiles(*mol); PATH_TYPE pth=findAtomEnvironmentOfRadiusN(*mol,2,9); TEST_ASSERT(pth.size()==8); ROMol *frag=Subgraphs::pathToSubmol(*mol,pth,false); smiles = MolToSmiles(*frag,true,false,0,false); TEST_ASSERT(smiles=="C(C(C(O)C)C(C)C)C"); delete frag; delete mol; } std::cout << "Finished" << std::endl; } void testGithubIssue103() { std::cout << "-----------------------\n Testing github Issue103: stereochemistry and pathToSubmol" << std::endl; { std::string smiles="O=C(O)C(=O)C[C@@]1(C(=O)O)C=C[C@H](O)C=C1"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); PATH_TYPE pth=findAtomEnvironmentOfRadiusN(*mol,2,12); TEST_ASSERT(pth.size()==5); ROMol *frag=Subgraphs::pathToSubmol(*mol,pth,false); smiles = MolToSmiles(*frag,true); TEST_ASSERT(smiles=="C=CC(O)C=C"); delete frag; delete mol; } { std::string smiles="O=C(O)C(=O)C[C@@]1(C(=O)O)C=C[C@H](O)C=C1"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); PATH_TYPE pth=findAtomEnvironmentOfRadiusN(*mol,2,12); TEST_ASSERT(pth.size()==5); ROMol *frag=Subgraphs::pathToSubmol(*mol,pth,false); smiles = MolToSmarts(*frag); TEST_ASSERT(smiles=="[#6](-[#6H](-[#8])-[#6]=[#6])=[#6]"); delete frag; delete mol; } { std::string smiles="O=C(O)C(=O)C[C@@]1(C(=O)O)C=C[C@H](O)C=C1"; RWMol *mol=SmilesToMol(smiles); TEST_ASSERT(mol); PATH_TYPE pth=findAtomEnvironmentOfRadiusN(*mol,2,12); TEST_ASSERT(pth.size()==5); ROMol *frag=Subgraphs::pathToSubmol(*mol,pth,true); smiles = MolToSmarts(*frag); TEST_ASSERT(smiles=="[#6](-[#6](-[#8])-[#6]=[#6])=[#6]"); delete frag; delete mol; } std::cout << "Finished" << std::endl; } // ------------------------------------------------------------------- int main() { test1(); test2(); testGithubIssue103(); return 0; }