Skip to content

Commit

Permalink
Added a unit test to check for multithreaded usage in PubchemFingerpr…
Browse files Browse the repository at this point in the history
…int. Tests for bug 3510588

Change-Id: I2ee5c46b49846b1072949d9c0c06ec715fad8cb7
Signed-off-by: Egon Willighagen <egonw@users.sourceforge.net>
  • Loading branch information
rajarshi authored and egonw committed Apr 1, 2012
1 parent 0040b00 commit d0e5535
Showing 1 changed file with 66 additions and 1 deletion.
Expand Up @@ -24,8 +24,16 @@
*/
package org.openscience.cdk.fingerprint;

import java.util.ArrayList;
import java.util.BitSet;

import java.util.List;
import java.util.Vector;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

import com.sun.xml.internal.rngom.digested.DOneOrMorePattern;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
Expand Down Expand Up @@ -198,4 +206,61 @@ public void testBenzene() throws CDKException {

}

/**
* @throws Exception
* @cdk.bug 3510588
*/
@Test
public void testMultithreadedUsage() throws Exception {
IAtomContainer mol1 = parser.parseSmiles("C=C(C1=CC=C(C=C1)O)NNC2=C(C(=NC(=C2Cl)Cl)C(=O)O)Cl");
IAtomContainer mol2 = parser.parseSmiles("C1=CC=C(C=C1)C[N+]2=C(C=C(C=C2C=CC3=CC=CC=C3)C4=CC=CC=C4)C5=CC=CC=C5");

CDKHydrogenAdder adder = CDKHydrogenAdder.getInstance(mol1.getBuilder());
adder.addImplicitHydrogens(mol1);
AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol1);
CDKHueckelAromaticityDetector.detectAromaticity(mol1);

adder.addImplicitHydrogens(mol2);
AtomContainerManipulator.convertImplicitToExplicitHydrogens(mol2);
CDKHueckelAromaticityDetector.detectAromaticity(mol2);


IFingerprinter fp = new PubchemFingerprinter();
BitSet bs1 = fp.getFingerprint(mol1);
BitSet bs2 = fp.getFingerprint(mol2);

class FpRunner implements Callable<BitSet> {
IAtomContainer mol;
FpRunner(IAtomContainer mol) {
this.mol = mol;
}
public BitSet call() throws Exception {
BitSet fp = null;
IFingerprinter fpr = new PubchemFingerprinter();
try {
fp = fpr.getFingerprint(mol);
} catch (CDKException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
return fp;
}
}

// now lets run some threads
ExecutorService executor = Executors.newFixedThreadPool(2);
List<FpRunner> tasks = new ArrayList<FpRunner>();
tasks.add(new FpRunner(mol1));
tasks.add(new FpRunner(mol2));
List<Future<BitSet>> ret = executor.invokeAll(tasks);

BitSet fb1 = ret.get(0).get();
Assert.assertNotNull(fb1);

BitSet fb2 = ret.get(1).get();
Assert.assertNotNull(fb2);

Assert.assertEquals(bs1, fb1);
Assert.assertEquals(bs2, fb2);
}

}

0 comments on commit d0e5535

Please sign in to comment.