From 6441b750fcd5a624089e2bc4a02c2e389b2cad76 Mon Sep 17 00:00:00 2001 From: Stefan Kuhn Date: Tue, 18 Aug 2009 12:03:27 +0100 Subject: [PATCH] tests for crossover machine and PartialFilledStructureMerger --- src/test/data/smiles/c10h16isomers.smi | 99 +++++++++++++++++++ .../PartialFilledStructureMergerTest.java | 40 ++++---- .../operator/CrossoverMachineTest.java | 79 +++++++++------ 3 files changed, 163 insertions(+), 55 deletions(-) create mode 100644 src/test/data/smiles/c10h16isomers.smi diff --git a/src/test/data/smiles/c10h16isomers.smi b/src/test/data/smiles/c10h16isomers.smi new file mode 100644 index 00000000000..5a9c94aa95e --- /dev/null +++ b/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 diff --git a/src/test/org/openscience/cdk/structgen/stochastic/PartialFilledStructureMergerTest.java b/src/test/org/openscience/cdk/structgen/stochastic/PartialFilledStructureMergerTest.java index bb9b66bc82b..8c8e7fbdf7f 100644 --- a/src/test/org/openscience/cdk/structgen/stochastic/PartialFilledStructureMergerTest.java +++ b/src/test/org/openscience/cdk/structgen/stochastic/PartialFilledStructureMergerTest.java @@ -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 + * Copyright (C) 2009 Stefan Kuhn * * Contact: cdk-devel@lists.sourceforge.net * @@ -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; @@ -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")); @@ -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{ @@ -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{ @@ -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{ @@ -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{ @@ -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)); } } diff --git a/src/test/org/openscience/cdk/structgen/stochastic/operator/CrossoverMachineTest.java b/src/test/org/openscience/cdk/structgen/stochastic/operator/CrossoverMachineTest.java index c7e13e32cbc..19407181664 100644 --- a/src/test/org/openscience/cdk/structgen/stochastic/operator/CrossoverMachineTest.java +++ b/src/test/org/openscience/cdk/structgen/stochastic/operator/CrossoverMachineTest.java @@ -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 + * Copyright (C) 2009 Stefan Kuhn * * Contact: cdk-devel@lists.sourceforge.net * @@ -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()); @@ -55,44 +56,58 @@ public class CrossoverMachineTest extends CDKTestCase { } int errorcount=0; for(int i=0;i 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 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); } }