Skip to content

Commit

Permalink
tests for crossover machine and PartialFilledStructureMerger
Browse files Browse the repository at this point in the history
  • Loading branch information
Stefan Kuhn authored and egonw committed Feb 27, 2010
1 parent 5481be7 commit 6441b75
Show file tree
Hide file tree
Showing 3 changed files with 163 additions and 55 deletions.
99 changes: 99 additions & 0 deletions src/test/data/smiles/c10h16isomers.smi
@@ -0,0 +1,99 @@
C12=C(C1)CCCCCCC2
C1(=C2\CCCCCC2)/CC1
C12=C(CC1)CCCCCC2
C1(=C2\CCCCC2)/CCC1
C12=C(CCC1)CCCCC2
C1(=C2\CCCC2)/CCCC1
C12=C(CCCC1)CCCC2
C123C(C1CCCCCC3)C2
C12(C3C1C3)CCCCCC2
C12(C3C1CCCCC3)CC2
C123C(C1CCCCC3)CC2
C12(C3C1CCCC3)CCC2
C12(C3C1CC3)CCCCC2
C123C(C1CCCC3)CCC2
C12(C3C1CCC3)CCCC2
C12(C(C1)C2)C1CCCCC1
C123C(C2)CCCCCC1C3
C123C(C2)CC1CCCCC3
C12(C(C1)CC2)C1CCCC1
C123C(C2)CCCCC1CC3
C123C(C2)CCC1CCCC3
C12(C(C1)CCC2)C1CCC1
C12(C(C1)CCCC2)C1CC1
C123C(C2)CCCC1CCC3
C12(C3CC1C3)CCCCC2
C12(C3CC1CCCC3)CC2
C123C(CC1CCCC3)CC2
C12(C3CC1CCC3)CCC2
C12(C3CC1CC3)CCCC2
C123C(CC1CCC3)CCC2
C1(C2CC2)(C2CCC2)CC1
C12(C3CCC1CCC3)CC2
C12(C(CC1)CC2)C1CCC1
C123C(CC2)CCCC1CC3
C123C(CC2)CCC1CCC3
C12(C(CC1)CCC2)C1CC1
C1(C2CC2)(C2CC2)CCC1
C12(C3CCC1CC3)CCC2
C123C(C(C2)CCCCC3)C1
C12(C(C3CCCC3)C1)CC2
C123C(C(CC2)CCCC3)C1
C12(C(C3CCC3)C1)CCC2
C12(C(C3CC3)C1)CCCC2
C123C(C(CCC2)CCC3)C1
C123C(C(C1)C2)CCCCC3
C12(C3C(C1)C3)CCCCC2
C12(C3C(C1)CCCC3)CC2
C123C(C(C1)CCCC3)CC2
C123C(C(C1)CC2)CCCC3
C12(C3C(C1)CCC3)CCC2
C12(C3C(C1)CC3)CCCC2
C123C(C(C1)CCC3)CCC2
C12(C3C(C3)CCCC2)CC1
C12(C3C(C3)CC1)CCCC2
C12(C3C(C3)CCC2)CCC1
C12(C(C3CCC3)CC2)CC1
C12(C3C(CC2)CCC3)CC1
C12(C3C(CC3)CCC2)CC1
C12(C(C3CC3)CCC2)CC1
C123C(C(CC2)CCC3)CC1
C12(C(C3CC3)CC1)CCC2
C123C(C(CC1)CC2)CCC3
C12(C3C(CC1)CC3)CCC2
C12(C(C1)C2)CC1CCCC1
C12(C(C1)C2)CCC1CCC1
C12(C(C1)C2)CCCC1CC1
C123C(C1)CCCCC(C2)C3
C123C(C1)CC(C2)CCCC3
C12(C(C1)CC2)CC1CCC1
C123C(C1)CCCC(C2)CC3
C123C(C1)CCC(C2)CCC3
C12(C(C1)CCC2)CC1CC1
C12(C(C1)CC1CCC1)CC2
C123C(C1)CC(CC2)CCC3
C12(C(C1)CC1CC1)CCC2
C12(C(C1)CCC1CC1)CC2
C12(C(C1)CC2)CCC1CC1
C123C(C1)CCC(CC2)CC3
C12(C3CCCC3)CC(C1)C2
C123C(CC(C1)C2)CCCC3
C123C(CC3)CCCC(C1)C2
C12(C3CCC3)CC(C1)CC2
C12(C3CC3)CC(C1)CCC2
C123C(CCC(C1)C2)CCC3
C12(C3CC(C1)C3)CCCC2
C12(C3CC(C1)CCC3)CC2
C123C(CC(C1)CCC3)CC2
C123C(CC(C1)CC2)CCC3
C12(C3CC(C1)CC3)CCC2
C1(C2CC2)(CC2CC2)CC1
C12(C3CCC(C1)CC3)CC2
C12(C(CC1)CC2)CC1CC1
C123C(CC2)CCC(C1)CC3
C12(C3CC3)CC(CC1)CC2
C12(C3CC(C3)CCC2)CC1
C12(C3CC(C3)CC1)CCC2
C12(C(CC3CC3)CC2)CC1
C12(C3CC(CC2)CC3)CC1
C123C(CC(CC2)CC3)CC1
@@ -1,6 +1,6 @@
/* $Revision: 7691 $ $Author: egonw $ $Date: 2007-01-11 12:47:48 +0100 (Thu, 11 Jan 2007) $
*
* Copyright (C) 2007 Egon Willighagen <egonw@users.sf.net>
* Copyright (C) 2009 Stefan Kuhn <shk3@users.sf.net>
*
* Contact: cdk-devel@lists.sourceforge.net
*
Expand All @@ -27,7 +27,6 @@
import org.openscience.cdk.graph.ConnectivityChecker;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.interfaces.IAtomContainerSet;
import org.openscience.cdk.interfaces.IMolecule;
import org.openscience.cdk.smiles.SmilesParser;
import org.openscience.cdk.tools.SaturationChecker;

Expand All @@ -36,7 +35,7 @@
*/
public class PartialFilledStructureMergerTest extends CDKTestCase {

@Test public void testPartialFilledStructureMerger() throws Exception{
@Test public void testGenerate_IAtomContainerSet() throws Exception{
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
IAtomContainerSet acs = DefaultChemObjectBuilder.getInstance().newAtomContainerSet();
acs.addAtomContainer(sp.parseSmiles("CCCCC"));
Expand All @@ -52,10 +51,9 @@ public class PartialFilledStructureMergerTest extends CDKTestCase {
acs.getAtomContainer(1).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(4).setHydrogenCount(2);
PartialFilledStructureMerger pfsm = new PartialFilledStructureMerger();
IAtomContainerSet result = pfsm.generate(acs);
Assert.assertEquals(1, result.getAtomContainerCount());
Assert.assertTrue(ConnectivityChecker.isConnected(result.getAtomContainer(0)));
Assert.assertTrue(new SaturationChecker().allSaturated(result.getAtomContainer(0)));
IAtomContainer result = pfsm.generate(acs);
Assert.assertTrue(ConnectivityChecker.isConnected(result));
Assert.assertTrue(new SaturationChecker().allSaturated(result));
}

@Test public void testPartialFilledStructureMerger2() throws Exception{
Expand All @@ -74,10 +72,9 @@ public class PartialFilledStructureMergerTest extends CDKTestCase {
acs.getAtomContainer(1).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(4).setHydrogenCount(2);
PartialFilledStructureMerger pfsm = new PartialFilledStructureMerger();
IAtomContainerSet result = pfsm.generate(acs);
Assert.assertEquals(1, result.getAtomContainerCount());
Assert.assertTrue(ConnectivityChecker.isConnected(result.getAtomContainer(0)));
Assert.assertTrue(new SaturationChecker().allSaturated(result.getAtomContainer(0)));
IAtomContainer result = pfsm.generate(acs);
Assert.assertTrue(ConnectivityChecker.isConnected(result));
Assert.assertTrue(new SaturationChecker().allSaturated(result));
}

@Test public void testPartialFilledStructureMerger3() throws Exception{
Expand All @@ -97,10 +94,9 @@ public class PartialFilledStructureMergerTest extends CDKTestCase {
acs.getAtomContainer(2).getAtom(0).setHydrogenCount(2);
acs.getAtomContainer(2).getAtom(1).setHydrogenCount(2);
PartialFilledStructureMerger pfsm = new PartialFilledStructureMerger();
IAtomContainerSet result = pfsm.generate(acs);
Assert.assertEquals(1, result.getAtomContainerCount());
Assert.assertTrue(ConnectivityChecker.isConnected(result.getAtomContainer(0)));
Assert.assertTrue(new SaturationChecker().allSaturated(result.getAtomContainer(0)));
IAtomContainer result = pfsm.generate(acs);
Assert.assertTrue(ConnectivityChecker.isConnected(result));
Assert.assertTrue(new SaturationChecker().allSaturated(result));
}

@Test public void testPartialFilledStructureMerger4() throws Exception{
Expand All @@ -120,10 +116,9 @@ public class PartialFilledStructureMergerTest extends CDKTestCase {
acs.getAtomContainer(1).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(2).getAtom(0).setHydrogenCount(2);
PartialFilledStructureMerger pfsm = new PartialFilledStructureMerger();
IAtomContainerSet result = pfsm.generate(acs);
Assert.assertEquals(1, result.getAtomContainerCount());
Assert.assertTrue(ConnectivityChecker.isConnected(result.getAtomContainer(0)));
Assert.assertTrue(new SaturationChecker().allSaturated(result.getAtomContainer(0)));
IAtomContainer result = pfsm.generate(acs);
Assert.assertTrue(ConnectivityChecker.isConnected(result));
Assert.assertTrue(new SaturationChecker().allSaturated(result));
}

@Test public void testPartialFilledStructureMerger5() throws Exception{
Expand All @@ -143,10 +138,9 @@ public class PartialFilledStructureMergerTest extends CDKTestCase {
acs.getAtomContainer(1).getAtom(4).setHydrogenCount(2);
acs.getAtomContainer(2).getAtom(0).setHydrogenCount(2);
PartialFilledStructureMerger pfsm = new PartialFilledStructureMerger();
IAtomContainerSet result = pfsm.generate(acs);
Assert.assertEquals(1, result.getAtomContainerCount());
Assert.assertTrue(ConnectivityChecker.isConnected(result.getAtomContainer(0)));
Assert.assertTrue(new SaturationChecker().allSaturated(result.getAtomContainer(0)));
IAtomContainer result = pfsm.generate(acs);
Assert.assertTrue(ConnectivityChecker.isConnected(result));
Assert.assertTrue(new SaturationChecker().allSaturated(result));
}
}

Expand Down
@@ -1,6 +1,6 @@
/* $Revision: 7691 $ $Author: egonw $ $Date: 2007-01-11 12:47:48 +0100 (Thu, 11 Jan 2007) $
*
* Copyright (C) 2007 Egon Willighagen <egonw@users.sf.net>
* Copyright (C) 2009 Stefan Kuhn <shk3@users.sf.net>
*
* Contact: cdk-devel@lists.sourceforge.net
*
Expand Down Expand Up @@ -41,12 +41,13 @@
public class CrossoverMachineTest extends CDKTestCase {


@Test public void testCrossoverMachine() throws Exception {
@Test public void testdoCrossover_IAtomContainer() throws Exception {
String filename = "data/smiles/c10h16isomers.smi";
InputStream ins = this.getClass().getClassLoader().getResourceAsStream(filename);
SMILESReader reader = new SMILESReader(ins);
MoleculeSet som = (MoleculeSet)reader.read(new MoleculeSet());
Assert.assertEquals(99, som.getMoleculeCount());
Assert.assertEquals("We must have read 99 structures", 99,
som.getMoleculeCount());
CrossoverMachine cm = new CrossoverMachine();
String correctFormula="C10";
CDKHydrogenAdder hAdder = CDKHydrogenAdder.getInstance(som.getBuilder());
Expand All @@ -55,44 +56,58 @@ public class CrossoverMachineTest extends CDKTestCase {
}
int errorcount=0;
for(int i=0;i<som.getAtomContainerCount();i++){
int[] c0=new int[4];
int[] hydrogencount1=new int[4];
for(IAtom atom : som.getAtomContainer(i).atoms()){
c0[atom.getHydrogenCount()]++;
hydrogencount1[atom.getHydrogenCount()]++;
}
for(int k=i+1;k<som.getAtomContainerCount();k++){
try{
List<IAtomContainer> result = cm.doCrossover(som.getAtomContainer(i), som.getAtomContainer(k));
int[] c1=new int[4];
for(IAtom atom : som.getAtomContainer(k).atoms()){
c1[atom.getHydrogenCount()]++;
}
Assert.assertEquals(2, result.size());
for(int l=0;l<2;l++){
IAtomContainer ac = (IAtomContainer)result.get(l);
Assert.assertTrue(ConnectivityChecker.isConnected(ac));
Assert.assertEquals(MolecularFormulaManipulator.getString(MolecularFormulaManipulator.getMolecularFormula(ac)), correctFormula);
int[] c=new int[4];
int hcounttotal=0;
for(IAtom atom : ((IAtomContainer)result.get(l)).atoms()){
c[atom.getHydrogenCount()]++;
hcounttotal+=atom.getHydrogenCount();
}
if(c0[0]==c1[0])
Assert.assertEquals(c0[0],c[0]);
if(c0[1]==c1[1])
Assert.assertEquals(c0[1],c[1]);
if(c0[2]==c1[2])
Assert.assertEquals(c0[2],c[2]);
if(c0[3]==c1[3])
Assert.assertEquals(c0[3],c[3]);
Assert.assertEquals(16,hcounttotal);
}
List<IAtomContainer> result = cm
.doCrossover(som.getAtomContainer(i),
som.getAtomContainer(k));
int[] hydrogencount2=new int[4];
for(IAtom atom : som.getAtomContainer(k).atoms()){
hydrogencount2[atom.getHydrogenCount()]++;
}
Assert.assertEquals("Result size must be 2",2, result.size());
for(int l=0;l<2;l++){
IAtomContainer ac = result.get(l);
Assert.assertTrue("Result must be connected",
ConnectivityChecker.isConnected(ac));
Assert.assertEquals("Molecular formula must be the same as" +
"of the input", MolecularFormulaManipulator.getString(
MolecularFormulaManipulator.getMolecularFormula(ac)),
correctFormula);
int[] hydrogencountresult=new int[4];
int hcounttotal=0;
for(IAtom atom : result.get(l).atoms()){
hydrogencountresult[atom.getHydrogenCount()]++;
hcounttotal+=atom.getHydrogenCount();
}
if(hydrogencount1[0]==hydrogencount2[0])
Assert.assertEquals("Hydrogen count of the result must" +
" be same as of input", hydrogencount1[0],
hydrogencountresult[0]);
if(hydrogencount1[1]==hydrogencount2[1])
Assert.assertEquals("Hydrogen count of the result must" +
" be same as of input", hydrogencount1[1],
hydrogencountresult[1]);
if(hydrogencount1[2]==hydrogencount2[2])
Assert.assertEquals("Hydrogen count of the result must" +
" be same as of input", hydrogencount1[2],
hydrogencountresult[2]);
if(hydrogencount1[3]==hydrogencount2[3])
Assert.assertEquals("Hydrogen count of the result must" +
" be same as of input", hydrogencount1[3],
hydrogencountresult[3]);
Assert.assertEquals(16,hcounttotal);
}
}catch(CDKException ex){
errorcount++;
}
Assert.assertTrue(errorcount<300);
}
}
Assert.assertTrue("We tolerate up to 300 errors",errorcount<300);
}
}

Expand Down

0 comments on commit 6441b75

Please sign in to comment.