|
From: <jom...@us...> - 2010-08-10 21:46:11
|
Revision: 1607
http://jason.svn.sourceforge.net/jason/?rev=1607&view=rev
Author: jomifred
Date: 2010-08-10 21:46:04 +0000 (Tue, 10 Aug 2010)
Log Message:
-----------
fix a bug on annotation backtrack (do not backtrack when a tail is used, as in p[A|R])
Modified Paths:
--------------
trunk/src/jason/asSyntax/ListTermImpl.java
trunk/src/jason/asSyntax/Literal.java
trunk/src/test/TermTest.java
Modified: trunk/src/jason/asSyntax/ListTermImpl.java
===================================================================
--- trunk/src/jason/asSyntax/ListTermImpl.java 2010-08-10 13:48:45 UTC (rev 1606)
+++ trunk/src/jason/asSyntax/ListTermImpl.java 2010-08-10 21:46:04 UTC (rev 1607)
@@ -585,6 +585,8 @@
break;
}
l = l.getNext();
+ if (l == null)
+ break;
if (!l.isEmpty())
s.append(',');
}
Modified: trunk/src/jason/asSyntax/Literal.java
===================================================================
--- trunk/src/jason/asSyntax/Literal.java 2010-08-10 13:48:45 UTC (rev 1606)
+++ trunk/src/jason/asSyntax/Literal.java 2010-08-10 21:46:04 UTC (rev 1607)
@@ -260,7 +260,7 @@
return LogExpr.EMPTY_UNIF_LIST.iterator();
final AgArch arch = (ag == null ? null : ag.getTS().getUserAgArch());
- final int nbAnnots = (hasAnnot() ? getAnnots().size() : 0);
+ final int nbAnnots = (hasAnnot() && getAnnots().getTail() == null ? getAnnots().size() : 0); // if annots contains a tail (as in p[A|R]), do not backtrack on annots
return new Iterator<Unifier>() {
Unifier current = null;
Modified: trunk/src/test/TermTest.java
===================================================================
--- trunk/src/test/TermTest.java 2010-08-10 13:48:45 UTC (rev 1606)
+++ trunk/src/test/TermTest.java 2010-08-10 21:46:04 UTC (rev 1607)
@@ -490,18 +490,24 @@
u = new Unifier();
assertTrue(p1.hasSubsetAnnot(p5, u));
- Pred p6 = Pred.parsePred("p1(t1,t2)[a1|T]");
-
- //r.clear();
- //assertTrue(p6.getSubsetAnnots(p1.getAnnots(),new Unifier(),r));
- //System.out.println("p6="+p6+"; p1="+p1+" r="+r);
- //assertEquals(r.get(0).get("T").toString(), "[a(2,3),a(3)]");
-
+ Pred p6 = Pred.parsePred("p1(t1,t2)[a(3)|T]");
u = new Unifier();
assertTrue(p6.hasSubsetAnnot(p1, u));
- assertEquals(u.get("T").toString(), "[a(3),a(2,3)]");
+ assertEquals(u.get("T").toString(), "[a1,a(2,3)]");
assertTrue(p1.hasSubsetAnnot(p6, u));
+ Pred p7 = Pred.parsePred("p1(t1,t2)[A|T]");
+ u = new Unifier();
+ assertTrue(p7.hasSubsetAnnot(p1, u));
+ assertEquals("a1", u.get("A").toString() );
+ assertEquals("[a(3),a(2,3)]", u.get("T").toString());
+ assertTrue(p1.hasSubsetAnnot(p7, u));
+
+ u = new Unifier();
+ assertTrue(p1.hasSubsetAnnot(p7, u));
+ assertEquals("a1", u.get("A").toString() );
+ assertEquals("[a(3),a(2,3)]", u.get("T").toString());
+
// test many vars
l1 = Literal.parseLiteral( "p[4,W,a,b,X,Y,e,Z]");
assertTrue( Literal.parseLiteral("p[4]").hasSubsetAnnot(l1));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|