|
From: <jom...@us...> - 2008-03-23 13:10:21
|
Revision: 1172
http://jason.svn.sourceforge.net/jason/?rev=1172&view=rev
Author: jomifred
Date: 2008-03-23 06:10:17 -0700 (Sun, 23 Mar 2008)
Log Message:
-----------
1. allows free vars in context (e.g. : P[a] | P[b]).
-- see tests/TestVarInContext.java for more examples
2. minor changes in jason-team
Modified Paths:
--------------
trunk/applications/jason-team/src/asl/dummy.asl
trunk/applications/jason-team/src/java/arch/ACArchitecture.java
trunk/applications/jason-team/src/java/arch/ACProxy.java
trunk/applications/jason-team/src/java/arch/WriteStatusThread.java
trunk/src/jason/asSyntax/LogExpr.java
trunk/src/jason/asSyntax/VarTerm.java
trunk/src/test/VarTermTest.java
Added Paths:
-----------
trunk/applications/as-unit-test/build.xml
trunk/applications/as-unit-test/lib/
trunk/applications/as-unit-test/lib/junit.jar
trunk/applications/as-unit-test/src/jason/tests/TestVarInContext.java
Added: trunk/applications/as-unit-test/build.xml
===================================================================
--- trunk/applications/as-unit-test/build.xml (rev 0)
+++ trunk/applications/as-unit-test/build.xml 2008-03-23 13:10:17 UTC (rev 1172)
@@ -0,0 +1,136 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<project basedir="." default="test" name="Jason AS Unit">
+
+ <property environment="env" />
+
+ <property name="jasondir" value="../.." />
+
+ <property name="asunitjar" value="lib/asunit.jar" />
+
+ <property name="build.dir" value="${basedir}/bin" />
+
+ <property name="dist.properties" value="${basedir}/bin/dist.properties" />
+ <property name="version" value="0" />
+ <property name="release" value="0.1" />
+ <property name="distDir" value="${env.HOME}/tmp/x/ASUnit-${version}.${release}" />
+ <property name="distFile" value="${env.HOME}/ASUnit-${version}.${release}" />
+
+ <path id="project.classpath">
+ <pathelement location="${basedir}/lib/junit.jar" />
+ <pathelement location="${jasondir}/lib/jason.jar" />
+ </path>
+
+ <target name="init" >
+ <mkdir dir="${build.dir}" />
+ <mkdir dir="${basedir}/lib" />
+ </target>
+
+ <target name="compile" depends="init">
+ <javac srcdir="src" destdir="${build.dir}" debug="true" deprecation="true" optimize="true" nowarn="true" source="1.5" target="1.5">
+ <classpath refid="project.classpath" />
+ </javac>
+ </target>
+
+
+ <target name="jar" depends="compile">
+ <jar jarfile="${asunitjar}" >
+ <fileset dir="${build.dir}">
+ <include name="jason/asunit/**/*.class" />
+ </fileset>
+ </jar>
+ </target>
+
+ <target name="test" depends="jar">
+ <ant dir="../.." target="jar" />
+ <junit printsummary="yes" failureProperty="test.failure">
+ <classpath refid="project.classpath" />
+ <classpath path="${build.dir}" />
+ <formatter type="plain" usefile="false" />
+ <batchtest>
+ <fileset dir="${basedir}/src" includes="example/**/Test*.java" />
+ <fileset dir="${basedir}/src" includes="jason/tests/**/Test*.java" />
+ </batchtest>
+ </junit>
+ <fail message="test failed" if="test.failure" />
+ <delete failonerror="no" verbose="false">
+ <fileset dir="${basedir}" includes="bookstore.*" />
+ </delete>
+ </target>
+
+ <target name="apidoc" depends="compile">
+ <javadoc
+ destdir="${basedir}/doc/api"
+ packagenames="jason.asunit.*"
+ sourcepath="${basedir}/src"
+ excludepackagenames="jason.asSyntax.parser,jason.mas2j.parser"
+ use="true"
+ version="true"
+ author="true"
+ windowtitle="Jason - AgentSpeak Unit Test">
+ <classpath refid="project.classpath" />
+ </javadoc>
+ </target>
+
+ <target name="dist" depends="jar" description="Build distribution.">
+
+ <echo message="Generating Jason ASUnit ${version}.${release}" />
+
+ <propertyfile file="${dist.properties}">
+ <entry key="version" value="${version}" />
+ <entry key="release" value="${release}" />
+ <!-- entry default="0" key="build" operation="+" type="int" /-->
+ <entry key="build.date" type="date" value="now" />
+ </propertyfile>
+ <property file="${dist.properties}" />
+
+ <fixcrlf eol="crlf" includes="**/*.txt,**/*.bat" srcdir="${basedir}" />
+
+ <delete failonerror="no" includeEmptyDirs="true">
+ <fileset dir="${distDir}" />
+ </delete>
+ <delete dir="${distDir}/.." />
+
+ <mkdir dir="${distDir}" />
+
+ <copy todir="${distDir}">
+ <fileset dir="${basedir}" includes="*.*" />
+ <fileset dir="${basedir}" includes="LICENSE" />
+ <fileset dir="${basedir}" includes="README" />
+
+ <fileset dir="${basedir}" includes="bin/*" excludes="bin/jedit.tgz" />
+ <fileset dir="${basedir}" includes="bin/jedit/**/*" />
+ <fileset dir="${basedir}" includes="doc/**/*" />
+ <fileset dir="${basedir}" includes="examples/**/*" />
+ <fileset dir="${basedir}" includes="demos/**/*" />
+ <fileset dir="${basedir}" includes="lib/**/*" />
+ <fileset dir="${basedir}" includes="src/**/*" />
+ </copy>
+
+ <delete failonerror="no" includeEmptyDirs="true">
+ <fileset dir="${distDir}" includes=".settings" />
+ <fileset dir="${distDir}" includes=".project" />
+ <fileset dir="${distDir}" includes=".classpath" />
+ </delete>
+ <delete dir="${distDir}/bin/classes" />
+ <delete dir="${distDir}/doc/faq" />
+ <delete dir="${distDir}/doc/mini-tutorial/src" />
+
+ <tar compression="gzip" tarfile="${distFile}.tgz">
+ <tarfileset dir="${distDir}/.." mode="755">
+ <include name="Jason-${version}.${release}/**/*.sh" />
+ <include name="Jason-${version}.${release}/**/asl2*" />
+ </tarfileset>
+ <tarfileset dir="${distDir}/..">
+ <include name="Jason-${version}.${release}/**/*" />
+ <exclude name="Jason-${version}.${release}/**/*.sh" />
+ <exclude name="Jason-${version}.${release}/**/asl2*" />
+ </tarfileset>
+ </tar>
+ </target>
+
+ <target name="clean">
+ <delete dir="${build.dir}" />
+ </target>
+
+</project>
Added: trunk/applications/as-unit-test/lib/junit.jar
===================================================================
(Binary files differ)
Property changes on: trunk/applications/as-unit-test/lib/junit.jar
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Added: trunk/applications/as-unit-test/src/jason/tests/TestVarInContext.java
===================================================================
--- trunk/applications/as-unit-test/src/jason/tests/TestVarInContext.java (rev 0)
+++ trunk/applications/as-unit-test/src/jason/tests/TestVarInContext.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -0,0 +1,42 @@
+package jason.tests;
+
+import jason.asunit.TestAgent;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestVarInContext {
+
+ TestAgent ag;
+
+ // initialisation of the agent test
+ @Before
+ public void setupAg() {
+ ag = new TestAgent();
+ ag.setDebugMode(true);
+
+ // defines the agent's AgentSpeak code
+ ag.parseAScode(
+ "b1[b]. b2[c]. b3[d]. b4[a,d]. "+
+ "+!test1 : P[e] | P[c] <- jason.asunit.print(P). " +
+
+ "+!test2 : P[e] & P[c] <- jason.asunit.print(P). " +
+ "-!test2 <- jason.asunit.print(\"error\"). " +
+
+ "+!test3 : P[a] & P[d] <- jason.asunit.print(P). "
+ );
+ }
+
+ @Test
+ public void testContext() {
+ ag.addGoal("test1");
+ ag.assertPrint("b2", 5);
+
+ ag.addGoal("test2");
+ ag.assertPrint("error", 5);
+
+ ag.addGoal("test3");
+ ag.assertPrint("b4", 5);
+ }
+
+}
Modified: trunk/applications/jason-team/src/asl/dummy.asl
===================================================================
--- trunk/applications/jason-team/src/asl/dummy.asl 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/applications/jason-team/src/asl/dummy.asl 2008-03-23 13:10:17 UTC (rev 1172)
@@ -75,7 +75,8 @@
+restart
<- .print("*** restart ***");
- .drop_all_desires;
+ .drop_all_desires;
+ .abolish(target(_,_));
!move.
/* -- tests -- */
Modified: trunk/applications/jason-team/src/java/arch/ACArchitecture.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/ACArchitecture.java 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/applications/jason-team/src/java/arch/ACArchitecture.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -142,24 +142,24 @@
}
void newCycle() {
- List<ActionExec> feedback = getTS().getC().getFeedbackActions();
+ logger.info("last action sent is "+lastActionInCurrentCycle+". The following was not sent: "+toExecute);
+ setLastAct(lastActionInCurrentCycle);
+ lastActionInCurrentCycle = null;
// set all actions as successfully executed
+ List<ActionExec> feedback = getTS().getC().getFeedbackActions();
while (!toExecute.isEmpty()) {
ActionExec action = toExecute.poll();
action.setResult(true);
feedback.add(action);
}
-
- logger.info("last action sent is "+lastActionInCurrentCycle);
- setLastAct(lastActionInCurrentCycle);
- lastActionInCurrentCycle = null;
}
synchronized void go() {
notifyAll();
}
synchronized void waitSleep() throws InterruptedException {
+ // TODO: do something by timeout?
wait();
}
Modified: trunk/applications/jason-team/src/java/arch/ACProxy.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/ACProxy.java 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/applications/jason-team/src/java/arch/ACProxy.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -136,6 +136,8 @@
}
}
+ int maxx = 0; // max value of some cell'x
+
public void processRequestAction(Element perception, long currenttime, long deadline) {
try {
@@ -158,8 +160,7 @@
lpos.addTerm(new NumberTermImpl(step));
percepts.add(lpos);
- int maxx = 0; // max value of some cell'x
- int enemyId = 1;
+ int enemyId = 1;
// add in perception what is around
NodeList nl = perception.getElementsByTagName("cell");
for (int i=0; i < nl.getLength(); i++) {
Modified: trunk/applications/jason-team/src/java/arch/WriteStatusThread.java
===================================================================
--- trunk/applications/jason-team/src/java/arch/WriteStatusThread.java 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/applications/jason-team/src/java/arch/WriteStatusThread.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -3,7 +3,6 @@
import jason.environment.grid.Location;
import java.io.PrintWriter;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
Modified: trunk/src/jason/asSyntax/LogExpr.java
===================================================================
--- trunk/src/jason/asSyntax/LogExpr.java 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/src/jason/asSyntax/LogExpr.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -132,12 +132,12 @@
private void get() {
needsUpdate = false;
current = null;
- if (ileft.hasNext())
+ if (ileft != null && ileft.hasNext())
current = ileft.next();
else {
if (iright == null)
iright = getRHS().logicalConsequence(ag,un);
- if (iright.hasNext())
+ if (iright != null && iright.hasNext())
current = iright.next();
}
}
Modified: trunk/src/jason/asSyntax/VarTerm.java
===================================================================
--- trunk/src/jason/asSyntax/VarTerm.java 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/src/jason/asSyntax/VarTerm.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -46,7 +46,7 @@
*
* @author jomi
*/
-public class VarTerm extends InternalActionLiteral implements NumberTerm, ListTerm, StringTerm, ObjectTerm {
+public class VarTerm extends Literal implements NumberTerm, ListTerm, StringTerm, ObjectTerm {
private static final long serialVersionUID = 1L;
private static Logger logger = Logger.getLogger(VarTerm.class.getName());
@@ -110,9 +110,10 @@
}
vl = (Term)vl.clone();
- if (vl.isPred() && this.hasAnnot()) { // if this var has annots, add them in the value's annots (Experimental)
- ((Pred)vl).addAnnots(this.getAnnots());
- }
+ // The below does not conform the rules in manual
+ //if (vl.isPred() && this.hasAnnot()) { // if this var has annots, add them in the value's annots (Experimental)
+ // ((Pred)vl).addAnnots(this.getAnnots());
+ //}
value = vl;
resetHashCodeCache();
@@ -224,6 +225,9 @@
c.apply(un);
if (c.hasValue() && c.getValue() instanceof LogicalFormula) {
return ((LogicalFormula)c.getValue()).logicalConsequence(ag, un);
+ } else {
+ // the variable is still a Var, find all bels that unify.
+ return super.logicalConsequence(ag, un);
}
}
}
Modified: trunk/src/test/VarTermTest.java
===================================================================
--- trunk/src/test/VarTermTest.java 2008-03-22 12:30:49 UTC (rev 1171)
+++ trunk/src/test/VarTermTest.java 2008-03-23 13:10:17 UTC (rev 1172)
@@ -1,5 +1,9 @@
package test;
+import jason.RevisionFailedException;
+import jason.architecture.AgArch;
+import jason.asSemantics.Agent;
+import jason.asSemantics.TransitionSystem;
import jason.asSemantics.Unifier;
import jason.asSyntax.ArithExpr;
import jason.asSyntax.DefaultTerm;
@@ -16,6 +20,7 @@
import jason.asSyntax.parser.SimpleCharStream;
import jason.asSyntax.parser.Token;
import jason.asSyntax.parser.as2jTokenManager;
+import jason.infra.centralised.CentralisedAgArch;
import java.io.StringReader;
import java.util.Iterator;
@@ -287,6 +292,7 @@
assertFalse(u.unifies(v2, Literal.parseLiteral("open[source(a)]")));
}
+ /*
public void testVarWithAnnots5() {
// P -> open[source(a)]
// P[source(self)]
@@ -297,7 +303,37 @@
v1.apply(u);
assertEquals(v1.getAnnots().size(), 2);
}
+ */
+
+
+ public void testVarWithAnnotsInLogCons() throws RevisionFailedException {
+ Agent ag = new Agent();
+ AgArch arch = new AgArch();
+ arch.setArchInfraTier(new CentralisedAgArch());
+ ag.setTS(new TransitionSystem(ag, null, null, arch));
+ ag.addBel(Literal.parseLiteral("b1[b]"));
+ ag.addBel(Literal.parseLiteral("b2[d]"));
+
+ Unifier u = new Unifier();
+ VarTerm v1 = VarTerm.parseVar("P[d]");
+ assertEquals(2, iteratorSize(ag.getBB().getRelevant(v1)));
+ Iterator<Unifier> i = v1.logicalConsequence(ag, u);
+ assertTrue(i.hasNext());
+ u = i.next(); // u = {P[d]=b2}
+ v1.apply(u);
+ assertEquals("b2",v1.toString());
+ }
+
+ @SuppressWarnings("unchecked")
+ private int iteratorSize(Iterator i) {
+ int c = 0;
+ while (i.hasNext()) {
+ i.next();
+ c++;
+ }
+ return c;
+ }
public static void main(String[] a) {
new VarTermTest().testVarWithAnnots3();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|