use of org.jpl7 in project packages-jpl by SWI-Prolog.
the class Query method close.
/**
* This method can be used to close an open query before its solutions are
* exhausted. It is called automatically when solutions are exhausted.
* Calling close() on an already closed Query has no effect.
* <p>
*
* Here is one way to get the first three solutions to a Query:
*
* <pre>
* Query q = new Query(predicate, args);
* Map<String, Term> sub1 = q.nextSolution();
* Map<String, Term> sub2 = q.nextSolution();
* Map<String, Term> sub3 = q.nextSolution();
* q.close();
* </pre>
*/
public final void close() {
if (!open) {
// it is not an error to attempt to close a closed Query
return;
}
if (Prolog.thread_self() == -1) {
throw new JPLException("no engine is attached to this thread");
}
if (Prolog.current_engine().value != engine.value) {
throw new JPLException("this Query's engine is not that which is attached to this thread");
}
qid_t topmost = Prolog.current_query();
if (topmost.value != this.qid.value) {
throw new JPLException("this Query (" + this.hashCode() + ":" + this.toString() + ") is not topmost (" + topmost.hashCode() + ":" + topmost.toString() + ") within its engine[" + engine.value + "]");
}
Prolog.close_query(qid);
// for tidiness
qid = null;
org.jpl7.fli.Prolog.discard_foreign_frame(fid);
// for tidiness
fid = null;
if (Prolog.current_query() == null) {
// only Query open in this engine?
if (Prolog.current_engine_is_pool()) {
// this (Query's) engine is
// from the pool?
Prolog.release_pool_engine();
// System.out.println("JPL releasing engine[" + engine.value +
// "]");
} else {
// System.out.println("JPL leaving engine[" + engine.value +
// "]");
}
} else {
// System.out.println("JPL retaining engine[" + engine.value + "]
}
// this Query is now closed
open = false;
// this Query, being closed, is no longer associated with any Prolog engine
engine = null;
}
use of org.jpl7 in project packages-jpl by SWI-Prolog.
the class Test_Dict method test_dict4.
@Test
public void test_dict4() {
Map<Atom, Term> map = new HashMap<Atom, Term>();
map.put(new Atom("x"), new org.jpl7.Integer(12));
map.put(new Atom("y"), new org.jpl7.Integer(23));
map.put(new Atom("z"), new Integer(312));
Dict dict = new Dict(new Variable("W"), map);
assertEquals("W{x:12, z:312, y:23}", dict.toString());
assertEquals(Prolog.DICT, dict.type());
}
use of org.jpl7 in project packages-jpl by SWI-Prolog.
the class TestJUnit method testBigInteger2.
public void testBigInteger2() {
BigInteger b = new BigInteger("12345678901234567890123456789");
// too big for a long
Term i = new Integer(b);
Term g = new Compound("is", new Term[] { new Variable("X"), i });
Term x = Query.oneSolution(g).get("X");
assertTrue("X is an org.jpl7.Integer", x.isInteger());
assertTrue("X is a big org.jpl7.Integer", x.isBigInteger());
assertTrue("X's value is as expected", x.bigValue().equals(b));
}
use of org.jpl7 in project packages-jpl by SWI-Prolog.
the class TestJUnit method testWouter1.
public void testWouter1() {
// Wouter says this fails under OS X Mavericks
// 10.9 x86-64
// too big for an int
long n = 7381783232223l;
Compound term = new Compound("is", new Term[] { new Variable("X"), new org.jpl7.Integer(n) });
Map<String, Term>[] solutions = new Query(term).allSolutions();
assertEquals(1, solutions.length);
Map<String, Term> solution = solutions[0];
assertTrue(solution.containsKey("X"));
Object result = solution.get("X");
assertTrue(result instanceof org.jpl7.Integer);
assertEquals(n, ((org.jpl7.Integer) result).longValue());
}
use of org.jpl7 in project packages-jpl by SWI-Prolog.
the class TestJUnit method testLength1.
public void testLength1() {
Query q5 = new Query(new Compound("length", new Term[] { new Variable("Zs"), new org.jpl7.Integer(2) }));
Term zs = q5.oneSolution().get("Zs");
assertTrue("length(Zs,2) binds Zs to a list of two distinct variables " + zs.toString(), zs.isListPair() && zs.arg(1).isVariable() && zs.arg(2).isListPair() && zs.arg(2).arg(1).isVariable() && zs.arg(2).arg(2).isListNil() && !zs.arg(1).name().equals(zs.arg(2).arg(1).name()));
}
Aggregations