From: <raj...@us...> - 2008-08-10 03:26:19
|
Revision: 11968 http://cdk.svn.sourceforge.net/cdk/?rev=11968&view=rev Author: rajarshi Date: 2008-08-10 03:26:14 +0000 (Sun, 10 Aug 2008) Log Message: ----------- Cleaned up the tests to fix the last test. Added annotations to the class linking to the test class. Since all tests pass, now move the classes to standard Modified Paths: -------------- cdk/trunk/src/main/org/openscience/cdk/graph/PathTools.java cdk/trunk/src/test/org/openscience/cdk/graph/PathToolsTest.java Modified: cdk/trunk/src/main/org/openscience/cdk/graph/PathTools.java =================================================================== --- cdk/trunk/src/main/org/openscience/cdk/graph/PathTools.java 2008-08-08 13:36:36 UTC (rev 11967) +++ cdk/trunk/src/main/org/openscience/cdk/graph/PathTools.java 2008-08-10 03:26:14 UTC (rev 11968) @@ -24,27 +24,25 @@ */ package org.openscience.cdk.graph; +import org.openscience.cdk.CDKConstants; +import org.openscience.cdk.annotations.TestClass; +import org.openscience.cdk.annotations.TestMethod; +import org.openscience.cdk.graph.matrix.AdjacencyMatrix; +import org.openscience.cdk.interfaces.*; + import java.util.ArrayList; import java.util.List; -import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.graph.matrix.AdjacencyMatrix; -import org.openscience.cdk.interfaces.IAtom; -import org.openscience.cdk.interfaces.IAtomContainer; -import org.openscience.cdk.interfaces.IBond; -import org.openscience.cdk.interfaces.ILonePair; -import org.openscience.cdk.interfaces.IMolecule; -import org.openscience.cdk.interfaces.ISingleElectron; - /** * Tools class with methods for handling molecular graphs. * * @author steinbeck - * @cdk.module atomtype + * @cdk.module standard * @cdk.svnrev $Revision$ * @cdk.created 2001-06-17 * @cdk.bug 1817487 */ +@TestClass("org.openscience.cdk.graph.PathToolsTest") public class PathTools { public final static boolean DEBUG = false; @@ -55,6 +53,7 @@ * @param apsp The 2D int matrix * @return A 1D matrix containing the column sum of the 2D matrix */ + @TestMethod("testGetInt2DColumnSum_arrayintint") public static int[] getInt2DColumnSum(int[][] apsp) { int[] colSum = new int[apsp.length]; int sum; @@ -77,6 +76,7 @@ * @param costMatrix edge cost matrix * @return the topological distance matrix */ + @TestMethod("testComputeFloydAPSP_arrayintint") public static int[][] computeFloydAPSP(int costMatrix[][]) { int i; int j; @@ -118,6 +118,7 @@ * @param costMatrix edge cost matrix * @return the topological distance matrix */ + @TestMethod("testComputeFloydAPSP_arraydoubledouble") public static int[][] computeFloydAPSP(double costMatrix[][]) { int i; int j; @@ -141,29 +142,30 @@ * Recursivly perfoms a depth first search in a molecular graphs contained in * the AtomContainer molecule, starting at the root atom and returning when it * hits the target atom. + * <p> * CAUTION: This recursive method sets the VISITED flag of each atom * does not reset it after finishing the search. If you want to do the * operation on the same collection of atoms more than once, you have * to set all the VISITED flags to false before each operation * by looping of the atoms and doing a * "atom.setFlag((CDKConstants.VISITED, false));" + * <p> + * Note that the path generated by the search will not contain the root atom, + * but will contain the target atom * - * @param molecule The - * AtomContainer to be searched - * @param root The root atom - * to start the search at + * @param molecule The AtomContainer to be searched + * @param root The root atom to start the search at * @param target The target - * @param path An - * AtomContainer to be filled with the path - * @return true if the - * target atom was found during this function call + * @param path An AtomContainer to be filled with the path + * @return true if the target atom was found during this function call */ + @TestMethod("testDepthFirstTargetSearch_IAtomContainer_IAtom_IAtom_IAtomContainer") public static boolean depthFirstTargetSearch(IAtomContainer molecule, IAtom root, IAtom target, IAtomContainer path) { java.util.List<IBond> bonds = molecule.getConnectedBondsList(root); IAtom nextAtom; root.setFlag(CDKConstants.VISITED, true); for (IBond bond : bonds) { - nextAtom = bond.getConnectedAtom(root); + nextAtom = bond.getConnectedAtom(root); if (!nextAtom.getFlag(CDKConstants.VISITED)) { path.addAtom(nextAtom); path.addBond(bond); @@ -199,6 +201,7 @@ * @param molecule A molecule into which all the atoms and bonds are stored * that are found during search */ + @TestMethod("testBreadthFirstSearch_IAtomContainer_List_IMolecule") public static void breadthFirstSearch(IAtomContainer atomContainer, List<IAtom> sphere, IMolecule molecule) { // logger.debug("Staring partitioning with this ac: " + ac); breadthFirstSearch(atomContainer, sphere, molecule, -1); @@ -250,6 +253,7 @@ * that are found during search * @param max */ + @TestMethod("testBreadthFirstSearch_IAtomContainer_List_IMolecule_int") public static void breadthFirstSearch(IAtomContainer atomContainer, List<IAtom> sphere, IMolecule molecule, int max) { IAtom atom; IAtom nextAtom; @@ -307,6 +311,7 @@ * @param cutOff Stop the path search when this cutOff sphere count has been reatomContainerhed * @return The shortest path between the starting sphere and the target atom */ + @TestMethod("testBreadthFirstTargetSearch_IAtomContainer_List_IAtom_int_int") public static int breadthFirstTargetSearch(IAtomContainer atomContainer, List<IAtom> sphere, IAtom target, int pathLength, int cutOff) { if (pathLength == 0) resetFlags(atomContainer); pathLength++; @@ -356,6 +361,7 @@ * @param atomContainer The molecule to consider * @return The topological radius */ + @TestMethod("testGetMolecularGraphRadius_IAtomContainer") public static int getMolecularGraphRadius(IAtomContainer atomContainer) { int natom = atomContainer.getAtomCount(); @@ -383,6 +389,7 @@ * @param atomContainer The molecule to consider * @return The topological diameter */ + @TestMethod("testGetMolecularGraphDiameter_IAtomContainer") public static int getMolecularGraphDiameter(IAtomContainer atomContainer) { int natom = atomContainer.getAtomCount(); @@ -413,6 +420,7 @@ * @param distance The distance to consider * @return The number of vertices */ + @TestMethod("testGetVertexCountAtDistance_IAtomContainer_int") public static int getVertexCountAtDistance(IAtomContainer atomContainer, int distance) { int natom = atomContainer.getAtomCount(); @@ -442,6 +450,7 @@ * @return A <code>List</code> containing the atoms in the shortest path between <code>start</code> and * <code>end</code> inclusive */ + @TestMethod("testGetShortestPath_IAtomContainer_IAtom_IAtom") public static List<IAtom> getShortestPath(IAtomContainer atomContainer, IAtom start, IAtom end) { int natom = atomContainer.getAtomCount(); int endNumber = atomContainer.getAtomNumber(end); @@ -511,6 +520,7 @@ * @param end The ending Atom of the path * @return A <code>List</code> containing all the paths between the specified atoms */ + @TestMethod("testGetAllPaths_IAtomContainer_IAtom_IAtom") public static List<List<IAtom>> getAllPaths(IAtomContainer atomContainer, IAtom start, IAtom end) { allPaths = new ArrayList<List<IAtom>>(); if (start.equals(end)) return allPaths; @@ -544,6 +554,7 @@ * @param length The length of paths to look for * @return A <code>List</code> containing the paths found */ + @TestMethod("testGetPathsOfLength_IAtomContainer_IAtom_int") public static List<ArrayList<IAtom>> getPathsOfLength(IAtomContainer atomContainer, IAtom start, int length) { ArrayList<IAtom> curPath = new ArrayList<IAtom>(); ArrayList<ArrayList<IAtom>> paths = new ArrayList<ArrayList<IAtom>>(); Modified: cdk/trunk/src/test/org/openscience/cdk/graph/PathToolsTest.java =================================================================== --- cdk/trunk/src/test/org/openscience/cdk/graph/PathToolsTest.java 2008-08-08 13:36:36 UTC (rev 11967) +++ cdk/trunk/src/test/org/openscience/cdk/graph/PathToolsTest.java 2008-08-10 03:26:14 UTC (rev 11968) @@ -23,39 +23,36 @@ */ package org.openscience.cdk.graph; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; - import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; -import org.openscience.cdk.Atom; -import org.openscience.cdk.AtomContainer; -import org.openscience.cdk.Bond; -import org.openscience.cdk.CDKConstants; -import org.openscience.cdk.DefaultChemObjectBuilder; -import org.openscience.cdk.Molecule; -import org.openscience.cdk.NewCDKTestCase; +import org.openscience.cdk.*; +import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IBond.Order; import org.openscience.cdk.interfaces.IMolecule; -import org.openscience.cdk.interfaces.IBond.Order; import org.openscience.cdk.io.MDLV2000Reader; import org.openscience.cdk.smiles.SmilesParser; import org.openscience.cdk.templates.MoleculeFactory; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + /** - * @cdk.module test-atomtype + * @cdk.module test-standard */ public class PathToolsTest extends NewCDKTestCase { private static Molecule molecule; + private static SmilesParser sp; @BeforeClass public static void setUp() { molecule = MoleculeFactory.makeAlphaPinene(); + sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); } @Test @@ -149,7 +146,6 @@ IAtomContainer atomContainer = null; IAtom start = null; List paths = null; - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); atomContainer = sp.parseSmiles("c1cc2ccccc2cc1"); start = atomContainer.getAtom(0); paths = PathTools.getPathsOfLength(atomContainer, start, 1); @@ -163,7 +159,6 @@ @Test public void testGetAllPaths_IAtomContainer_IAtom_IAtom() throws Exception { - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IAtomContainer atomContainer = sp.parseSmiles("c12ccccc1cccc2"); IAtom start = atomContainer.getAtom(0); @@ -190,7 +185,6 @@ @Test public void testGetVertexCountAtDistance_IAtomContainer_int() throws Exception { - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IAtomContainer atomContainer = sp.parseSmiles("c12ccccc1cccc2"); Assert.assertEquals(11, PathTools.getVertexCountAtDistance(atomContainer, 1)); Assert.assertEquals(14, PathTools.getVertexCountAtDistance(atomContainer, 2)); @@ -210,7 +204,6 @@ @Test public void testGetMolecularGraphRadius_IAtomContainer() throws Exception { - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IAtomContainer atomContainer = sp.parseSmiles("CCCC"); Assert.assertEquals(2, PathTools.getMolecularGraphRadius(atomContainer)); atomContainer = sp.parseSmiles("C1C(N)CC1"); @@ -221,7 +214,6 @@ @Test public void testGetMolecularGraphDiameter_IAtomContainer() throws Exception { - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); IAtomContainer atomContainer = sp.parseSmiles("CCCC"); Assert.assertEquals(3, PathTools.getMolecularGraphDiameter(atomContainer)); atomContainer = sp.parseSmiles("C1C(N)CC1"); @@ -284,15 +276,39 @@ Assert.assertEquals(2, floydAPSP[2][4]); Assert.assertEquals(1, floydAPSP[3][4]); } + @Test - public void testDepthFirstTargetSearch_IAtomContainer_IAtom_IAtom_IAtomContainer() { - Assert.fail("Missing JUnit test"); + public void testDepthFirstTargetSearch_IAtomContainer_IAtom_IAtom_IAtomContainer() throws CDKException { + IMolecule molecule = sp.parseSmiles("C(COF)(Br)NC"); + Iterator<IAtom> atoms = molecule.atoms(); + while (atoms.hasNext()) { + IAtom atom = atoms.next(); + atom.setFlag(CDKConstants.VISITED, false); + } + + IAtomContainer paths = DefaultChemObjectBuilder.getInstance().newAtomContainer(); + IAtom root = molecule.getAtom(0); + IAtom target = null; + + atoms = molecule.atoms(); + while (atoms.hasNext()) { + IAtom atom = atoms.next(); + if (atom.getSymbol().equals("F")) { + target = atom; + break; + } + } + + boolean status = PathTools.depthFirstTargetSearch(molecule, root, target, paths); + Assert.assertTrue(status); + Assert.assertEquals(3, paths.getAtomCount()); + Assert.assertEquals(target, paths.getAtom(2)); } + @Test public void testBreadthFirstSearch_IAtomContainer_List_IMolecule() throws Exception { - IAtomContainer atomContainer = null; - IAtom start = null; - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); + IAtomContainer atomContainer; + IAtom start; atomContainer = sp.parseSmiles("CCCC"); PathTools.resetFlags(atomContainer); start = atomContainer.getAtom(0); @@ -305,9 +321,8 @@ @Test public void testBreadthFirstSearch_IAtomContainer_List_IMolecule_int() throws Exception { - IAtomContainer atomContainer = null; - IAtom start = null; - SmilesParser sp = new SmilesParser(DefaultChemObjectBuilder.getInstance()); + IAtomContainer atomContainer; + IAtom start; atomContainer = sp.parseSmiles("CCCC"); PathTools.resetFlags(atomContainer); start = atomContainer.getAtom(0); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |