upgrade JPL
git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1936 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
93
LGPL/JPL/java/jpl/test/JPLTest.java
Normal file
93
LGPL/JPL/java/jpl/test/JPLTest.java
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* 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();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user