31ff28d3ee
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1936 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
94 lines
2.9 KiB
Java
94 lines
2.9 KiB
Java
/*
|
|
* JPLTest.java
|
|
* JUnit based test
|
|
*
|
|
* Created on 13 February 2006, 11:31
|
|
*/
|
|
package jpl.test;
|
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.logging.Logger;
|
|
import junit.framework.*;
|
|
import jpl.*;
|
|
|
|
/**
|
|
*
|
|
* @author rick
|
|
*/
|
|
public class JPLTest extends TestCase {
|
|
// private static final Logger logger = Logger.getLogger(JPLTest.class.getName());
|
|
private CountDownLatch latch;
|
|
public JPLTest(String testName) {
|
|
super(testName);
|
|
}
|
|
protected void setUp() throws Exception {
|
|
/*
|
|
* Prolog file can be an empty file. The JVM seems to crash with a
|
|
* SIGSEGV if you don't consult a file prior to interacting with JPL.
|
|
|
|
final String prologFile = "jpl/test/test.pl"; // was "/home/rick/temp/test.pl";
|
|
System.out.println("prolog file is: " + prologFile);
|
|
String qString = "consult('" + prologFile + "')";
|
|
System.out.println("about to: " + qString);
|
|
Query query = new Query(qString);
|
|
System.out.println("Generated Query: " + query);
|
|
if (!query.hasSolution()) {
|
|
System.out.println(qString + " failed");
|
|
fail("Failed to consult prolog file.");
|
|
}
|
|
|
|
(new Query("true")).hasSolution();
|
|
*/
|
|
}
|
|
public void testThreadedAdds() {
|
|
latch = new CountDownLatch(4);
|
|
final AddWithThreads[] addTasks = { new AddWithThreads("a", latch), new AddWithThreads("b", latch), new AddWithThreads("c", latch), new AddWithThreads("d", latch) };
|
|
// System.out.println("Starting threads...");
|
|
for (int i = 0; i < addTasks.length; i++) {
|
|
addTasks[i].start();
|
|
}
|
|
try {
|
|
// System.out.println("Latch is waiting");
|
|
assertTrue("Timed out waiting for action to execute", latch.await(20, TimeUnit.SECONDS));
|
|
// System.out.println("Latch has been flipped");
|
|
} catch (final InterruptedException e) {
|
|
fail("Waiting thread was interrupted: " + e);
|
|
}
|
|
for (int i = 0; i < AddWithThreads.REPS; i++) {
|
|
for (int j = 0; j < addTasks.length; j++) {
|
|
Query query = new Query(addTasks[j].getNamespace() + "(test('" + i + "'))");
|
|
// System.out.println("query: " + query);
|
|
boolean ret = query.hasMoreElements();
|
|
query.close();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
class AddWithThreads extends Thread {
|
|
private final CountDownLatch latch;
|
|
private final String namespace;
|
|
private static final Logger logger = Logger.getLogger(JPLTest.class.getName());
|
|
public static final int REPS = 2000; // was 200
|
|
public AddWithThreads(final String namespace, final CountDownLatch latch) {
|
|
this.latch = latch;
|
|
this.namespace = namespace;
|
|
setName("namespace" + namespace); //set thread name for debugging
|
|
}
|
|
public String getNamespace() {
|
|
return namespace;
|
|
}
|
|
public void run() {
|
|
for (int i = 0; i < REPS; i++) {
|
|
// System.out.println("Asserting test('" + i + "')");
|
|
Query queryA = new Query("assert(" + namespace + "(test('" + i + "')))");
|
|
Thread.yield();
|
|
// System.out.println("adding query: " + queryA);
|
|
boolean retA = queryA.hasMoreElements();
|
|
queryA.close();
|
|
}
|
|
latch.countDown();
|
|
}
|
|
}
|