// $Id$ // Copyright (C) 2008-2010 Greg Landrum // // @@ All Rights Reserved @@ //package org.RDKit; import org.junit.*; import static org.junit.Assert.*; import org.RDKit.*; public class WrapperTests { private ROMol mol1; @Before public void setUp() { String smiles="c1ccccc1"; mol1 = RDKFuncs.MolFromSmiles(smiles); } @Test public void testBasics() { assertTrue(mol1.getNumAtoms()==6); assertTrue(mol1.getNumBonds()==6); } @Test public void testAtoms() { assertTrue(mol1.getAtomWithIdx(0).getAtomicNum()==6); assertFalse(mol1.hasAtomBookmark(1)); mol1.setAtomBookmark(mol1.getAtomWithIdx(0),1); assertTrue(mol1.hasAtomBookmark(1)); } @Test public void testBonds() { assertTrue(mol1.getBondWithIdx(0).getBondType()==Bond.BondType.AROMATIC); } @Test public void testSmilesWrite() { String smi=RDKFuncs.MolToSmiles(mol1); assertEquals(smi,"c1ccccc1",smi); } @Test public void testReactionBasics() { ChemicalReaction rxn; rxn=RDKFuncs.ReactionFromSmarts("[OH][C:1]=[O:2].[N!H0:3]>>[N:3][C:1]=[O:2]"); assertTrue(rxn.getNumReactantTemplates()==2); assertTrue(rxn.getNumProductTemplates()==1); ROMol r1,r2; r1=RDKFuncs.MolFromSmiles("CC(=O)O"); r2=RDKFuncs.MolFromSmiles("ClCN"); assertTrue(r1.getNumAtoms()==4); assertTrue(r2.getNumAtoms()==3); ROMol_Vect rs= new ROMol_Vect(2); rs.set(0,r1); rs.set(1,r2); ROMol_Vect_Vect ps; ps=rxn.runReactants(rs); assertFalse(ps.isEmpty()); assertTrue(ps.size()==1); assertFalse(ps.get(0).isEmpty()); assertTrue(ps.get(0).size()==1); assertTrue(r1.getNumAtoms()==4); assertTrue(r2.getNumAtoms()==3); assertTrue(ps.get(0).get(0).getNumAtoms()==6); } @Test public void testSubstruct1() { ROMol p; Match_Vect mv; p = RDKFuncs.MolFromSmarts("c"); assertTrue(mol1.hasSubstructMatch(p)); mv=mol1.getSubstructMatch(p); assertTrue(mv.size()==1); assertTrue(mv.get(0).getFirst()==0); assertTrue(mv.get(0).getSecond()==0); } @Test public void testSubstruct2() { ROMol p; Match_Vect mv; p = RDKFuncs.MolFromSmarts("C"); assertFalse(mol1.hasSubstructMatch(p)); mv=mol1.getSubstructMatch(p); assertTrue(mv.size()==0); } @Test public void testSubstruct3() { ROMol p; Match_Vect mv; ROMol m2; m2 = RDKFuncs.MolFromSmiles("NC(=O)CC"); p = RDKFuncs.MolFromSmarts("CN"); mv=m2.getSubstructMatch(p); assertTrue(mv.size()==2); assertTrue(mv.get(0).getFirst()==0); assertTrue(mv.get(0).getSecond()==1); assertTrue(mv.get(1).getFirst()==1); assertTrue(mv.get(1).getSecond()==0); } @Test public void testSubstruct4() { ROMol p; Match_Vect_Vect mvv; ROMol m2; m2 = RDKFuncs.MolFromSmiles("NC(=O)CC"); p = RDKFuncs.MolFromSmarts("CN"); mvv=m2.getSubstructMatches(p); assertTrue(mvv.size()==1); assertTrue(mvv.get(0).size()==2); assertTrue(mvv.get(0).get(0).getFirst()==0); assertTrue(mvv.get(0).get(0).getSecond()==1); assertTrue(mvv.get(0).get(1).getFirst()==1); assertTrue(mvv.get(0).get(1).getSecond()==0); } @Test public void testSubstruct5() { ROMol p; Match_Vect_Vect mvv; ROMol m2; m2 = RDKFuncs.MolFromSmiles("NC(=O)NCC"); p = RDKFuncs.MolFromSmarts("[$(C=O)]N"); mvv=m2.getSubstructMatches(p); assertTrue(mvv.size()==2); assertTrue(mvv.get(0).size()==2); assertTrue(mvv.get(0).get(0).getFirst()==0); assertTrue(mvv.get(0).get(0).getSecond()==1); assertTrue(mvv.get(0).get(1).getFirst()==1); assertTrue(mvv.get(0).get(1).getSecond()==0); assertTrue(mvv.get(1).size()==2); assertTrue(mvv.get(1).get(0).getFirst()==0); assertTrue(mvv.get(1).get(0).getSecond()==1); assertTrue(mvv.get(1).get(1).getFirst()==1); assertTrue(mvv.get(1).get(1).getSecond()==3); } @Test public void testFingerprints1() { ROMol m1,m2; m1 = RDKFuncs.MolFromSmiles("C1=CC=CC=C1"); m2 = RDKFuncs.MolFromSmiles("C1=CC=CC=N1"); ExplicitBitVect fp1,fp2; fp1=RDKFuncs.RDKFingerprintMol(m1); fp2=RDKFuncs.RDKFingerprintMol(m1); assertTrue(RDKFuncs.TanimotoSimilarityEBV(fp1,fp2)==1.0); fp2=RDKFuncs.RDKFingerprintMol(m2); assertTrue(RDKFuncs.TanimotoSimilarityEBV(fp1,fp2)<1.0); assertTrue(RDKFuncs.TanimotoSimilarityEBV(fp1,fp2)>0.0); } @Test public void testFingerprints2() { ROMol m1,m2; m1 = RDKFuncs.MolFromSmiles("C1=CC=CC=C1"); m2 = RDKFuncs.MolFromSmiles("C1=CC=CC=N1"); SparseIntVectu32 fp1,fp2; fp1=RDKFuncs.MorganFingerprintMol(m1,2); fp2=RDKFuncs.MorganFingerprintMol(m1,2); assertTrue(RDKFuncs.DiceSimilaritySIVu32(fp1,fp2)==1.0); fp2=RDKFuncs.MorganFingerprintMol(m2,2); assertTrue(RDKFuncs.DiceSimilaritySIVu32(fp1,fp2)<1.0); assertTrue(RDKFuncs.DiceSimilaritySIVu32(fp1,fp2)>0.0); UInt_Pair_Vect v1=fp1.getNonzero(); assertTrue(v1.size()>0); UInt_Pair_Vect v2=fp2.getNonzero(); assertTrue(v2.size()>0); assertTrue(v2.size()>v1.size()); } @Test public void testErrorHandling() { ROMol m1; m1 = RDKFuncs.MolFromSmiles("C1CC"); assertTrue(m1==null); } /* @Test public void testMemory() { for(int i=0;i<1000000;i++){ ROMol m1,m2; m1 = RDKFuncs.MolFromSmiles("C1=CC=CC=C1"); if((i%1000)==0){ System.err.println("done: "+i); } m1.delete(); } }*/ static { try { System.loadLibrary("RDKFuncs"); } catch (UnsatisfiedLinkError e) { System.err.println("Native code library failed to load. Make sure that libRDKFuncs.so is somewhere in your LD_LIBRARY_PATH.\n" + e); System.exit(1); } } public static void main(String args[]) { org.junit.runner.JUnitCore.main("WrapperTests"); } }