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 3b0b56d commit 5481be7
Show file tree
Hide file tree
Showing 2 changed files with 187 additions and 0 deletions.
Expand Up @@ -20,13 +20,134 @@
*/
package org.openscience.cdk.structgen.stochastic;

import org.junit.Assert;
import org.junit.Test;
import org.openscience.cdk.CDKTestCase;
import org.openscience.cdk.DefaultChemObjectBuilder;
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;

/**
* @cdk.module test-structgen
*/
public class PartialFilledStructureMergerTest extends CDKTestCase {

@Test public void testPartialFilledStructureMerger() throws Exception{
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
IAtomContainerSet acs = DefaultChemObjectBuilder.getInstance().newAtomContainerSet();
acs.addAtomContainer(sp.parseSmiles("CCCCC"));
acs.addAtomContainer(sp.parseSmiles("C1=C(C1)CC"));
acs.getAtomContainer(0).getAtom(0).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(2).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(4).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(1).getAtom(1).setHydrogenCount(0);
acs.getAtomContainer(1).getAtom(2).setHydrogenCount(2);
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)));
}

@Test public void testPartialFilledStructureMerger2() throws Exception{
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
IAtomContainerSet acs = DefaultChemObjectBuilder.getInstance().newAtomContainerSet();
acs.addAtomContainer(sp.parseSmiles("C=CCCC"));
acs.addAtomContainer(sp.parseSmiles("C(C)=C1CC1"));
acs.getAtomContainer(0).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(0).getAtom(1).setHydrogenCount(0);
acs.getAtomContainer(0).getAtom(2).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(4).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(1).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(2).setHydrogenCount(0);
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)));
}

@Test public void testPartialFilledStructureMerger3() throws Exception{
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
IAtomContainerSet acs = DefaultChemObjectBuilder.getInstance().newAtomContainerSet();
acs.addAtomContainer(sp.parseSmiles("CCCCC"));
acs.addAtomContainer(sp.parseSmiles("CCC"));
acs.addAtomContainer(sp.parseSmiles("CC"));
acs.getAtomContainer(0).getAtom(0).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(2).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(4).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(0).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(2).setHydrogenCount(2);
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)));
}

@Test public void testPartialFilledStructureMerger4() throws Exception{
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
IAtomContainerSet acs = DefaultChemObjectBuilder.getInstance().newAtomContainerSet();
acs.addAtomContainer(sp.parseSmiles("CCCCC"));
acs.addAtomContainer(sp.parseSmiles("CCCC"));
acs.addAtomContainer(sp.parseSmiles("C"));
acs.getAtomContainer(0).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(0).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(2).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(4).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(1).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(2).setHydrogenCount(2);
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)));
}

@Test public void testPartialFilledStructureMerger5() throws Exception{
SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance());
IAtomContainerSet acs = DefaultChemObjectBuilder.getInstance().newAtomContainerSet();
acs.addAtomContainer(sp.parseSmiles("C1CCC1"));
acs.addAtomContainer(sp.parseSmiles("C(C)CCC"));
acs.addAtomContainer(sp.parseSmiles("C"));
acs.getAtomContainer(0).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(0).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(2).setHydrogenCount(2);
acs.getAtomContainer(0).getAtom(3).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(0).setHydrogenCount(0);
acs.getAtomContainer(1).getAtom(1).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(2).setHydrogenCount(2);
acs.getAtomContainer(1).getAtom(3).setHydrogenCount(2);
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)));
}
}


Expand Up @@ -20,14 +20,80 @@
*/
package org.openscience.cdk.structgen.stochastic.operator;

import java.io.InputStream;
import java.util.List;

import org.junit.Assert;
import org.junit.Test;
import org.openscience.cdk.CDKTestCase;
import org.openscience.cdk.MoleculeSet;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.graph.ConnectivityChecker;
import org.openscience.cdk.interfaces.IAtom;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.io.SMILESReader;
import org.openscience.cdk.tools.CDKHydrogenAdder;
import org.openscience.cdk.tools.manipulator.MolecularFormulaManipulator;

/**
* @cdk.module test-structgen
*/
public class CrossoverMachineTest extends CDKTestCase {


@Test public void testCrossoverMachine() 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());
CrossoverMachine cm = new CrossoverMachine();
String correctFormula="C10";
CDKHydrogenAdder hAdder = CDKHydrogenAdder.getInstance(som.getBuilder());
for(int i=0;i<som.getAtomContainerCount();i++){
hAdder.addImplicitHydrogens(som.getAtomContainer(i));
}
int errorcount=0;
for(int i=0;i<som.getAtomContainerCount();i++){
int[] c0=new int[4];
for(IAtom atom : som.getAtomContainer(i).atoms()){
c0[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);
}
}catch(CDKException ex){
errorcount++;
}
Assert.assertTrue(errorcount<300);
}
}
}
}


0 comments on commit 5481be7

Please sign in to comment.