
test.NSTest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jason Show documentation
Show all versions of jason Show documentation
Jason is a fully-fledged interpreter for an extended version of AgentSpeak, a BDI agent-oriented logic programming language.
package test;
import jason.JasonException;
import jason.asSemantics.Agent;
import jason.asSemantics.Unifier;
import jason.asSyntax.ASSyntax;
import jason.asSyntax.Atom;
import jason.asSyntax.Literal;
import jason.asSyntax.Term;
import jason.asSyntax.VarTerm;
import jason.asSyntax.parser.ParseException;
import jason.asSyntax.parser.as2j;
import java.io.StringReader;
import java.util.Iterator;
import junit.framework.TestCase;
/** JUnit test case for syntax package */
public class NSTest extends TestCase {
protected void setUp() throws Exception {
super.setUp();
}
public void testPrint() throws ParseException {
Term t1 = ASSyntax.parseLiteral("ns1::kk(30, j::uu)");
assertEquals("ns1::kk(30,j::uu)", t1.toString());
t1 = ASSyntax.parseLiteral("true");
assertEquals("true", t1.toString());
t1 = ASSyntax.parseLiteral("ns1::kk(30, A::uu)");
assertEquals("ns1::kk(30,A::uu)", t1.toString());
t1 = ASSyntax.parseLiteral("ns1::kk(30, j::A)");
assertEquals("ns1::kk(30,j::A)", t1.toString());
t1 = ASSyntax.parseLiteral("ns1::X");
assertEquals("ns1::X", t1.toString());
t1 = ASSyntax.parseLiteral("X::bob");
assertEquals("X::bob", t1.toString());
t1 = ASSyntax.parseLiteral("ns1::~X");
assertEquals("ns1::~X", t1.toString());
t1 = ASSyntax.parseLiteral("N::~X");
assertEquals("N::~X", t1.toString());
t1 = ASSyntax.parseLiteral("ns::_");
assertTrue(t1.toString().startsWith("ns::_"));
t1 = ASSyntax.parseLiteral("ns::~p");
assertEquals("ns::~p", t1.toString());
}
public void testUnifies() throws ParseException {
Term t1 = ASSyntax.parseLiteral("ns1::kk(30,j::uu)");
Literal t2 = ASSyntax.parseLiteral("ns1::kk(30,j::uu)");
Term t3 = ASSyntax.parseLiteral("kk(30,j::uu)");
Term t4 = ASSyntax.parseLiteral("ns4::kk(30,j::uu)");
assertTrue(new Unifier().unifies(t1, t2));
t2 = ASSyntax.parseLiteral("ns1::kk(30,j::X)");
Unifier u = new Unifier();
assertTrue(u.unifies(t1, t2));
assertEquals("uu", u.get("X").toString());
t2 = ASSyntax.parseLiteral("ns1::kk(30,j::_)");
u = new Unifier();
assertTrue(u.unifies(t1, t2));
t2 = ASSyntax.parseLiteral("ns2::kk(30,X)");
u = new Unifier();
assertFalse(u.unifies(t1, t2));
assertFalse(u.unifies(t1, t3));
t2 = ASSyntax.parseLiteral("A::kk(30,X)");
u = new Unifier();
assertFalse(u.unifies(t1, t2)); // X \= j::uu
t2 = ASSyntax.parseLiteral("A::kk(30,j::X)");
u = new Unifier();
assertTrue(u.unifies(t1, t2));
assertEquals("ns1", u.get("A").toString());
assertEquals("uu", u.get("X").toString());
u = new Unifier();
u.unifies(new VarTerm("A"), ASSyntax.parseTerm("default"));
u.unifies(new VarTerm("X"), ASSyntax.parseTerm("uu"));
t2 = (Literal)t2.capply(u);
assertEquals("kk(30,j::uu)", t2.toString());
assertTrue(u.unifies(t2, t3));
assertTrue(u.unifies(t3, t2));
assertFalse(u.unifies(t2, t1));
assertFalse(u.unifies(t1, t2));
assertFalse(u.unifies(t4, t1));
assertFalse(u.unifies(t1, t4));
}
public void testUnifiesVarNS() throws ParseException {
Literal p1 = ASSyntax.parseLiteral("ns::A");
Literal p2 = ASSyntax.parseLiteral("ns::bob");
Literal p3 = ASSyntax.parseLiteral("xx::bob");
Literal p4 = ASSyntax.parseLiteral("bob");
Literal p5 = ASSyntax.parseLiteral("B::bob");
Literal p6 = ASSyntax.parseLiteral("ns::B");
// ns::A = ns::bob // A -> bob
Unifier u = new Unifier();
assertTrue(u.unifies(p1, p2));
assertEquals("bob", u.get("A").toString());
// ns::A = xx::bob // fails
u = new Unifier();
assertFalse(u.unifies(p1, p3));
assertFalse(u.unifies(p1, p4));
// ns::A = B::bob // A -> bob; B -> ns
u = new Unifier();
assertTrue(u.unifies(p1, p5));
assertEquals("bob", u.get("A").toString());
assertEquals("ns", u.get("B").toString());
// ns::A = ns::B // A -> B
u = new Unifier();
assertTrue(u.unifies(p1, p6));
assertFalse(u.unifies(new VarTerm("A"), ASSyntax.parseLiteral("ns::bob(45)")));
//Literal t = (Literal)p1.capply(u);
//assertEquals("ns::bob(45)", t.toString());
// ns::A = other::B // fail
u = new Unifier();
p6 = ASSyntax.parseLiteral("other::B");
u.unifies(p1, p6);
assertFalse(u.unifies(p1, p6));
}
public void testApply() throws ParseException {
Term t = ASSyntax.parseTerm("A::bob");
Unifier u = new Unifier();
u.unifies(new VarTerm("A"), new Atom("ns"));
t = t.capply(u);
assertEquals("ns::bob", t.toString());
t = ASSyntax.parseTerm("A::~bob(10)[a(20)]");
u = new Unifier();
u.unifies(new VarTerm("A"), new Atom("ns"));
t = t.capply(u);
assertEquals("ns::~bob(10)[a(20)]", t.toString());
Literal l = ASSyntax.parseLiteral("f(default)");
assertEquals(l.getTerm(0), Literal.DefaultNS);
assertTrue(l.getTerm(0) == Literal.DefaultNS);
Literal p = ASSyntax.parseLiteral("f(NS)");
u = new Unifier();
u.unifies(p, l);
p = (Literal)p.capply(u);
assertTrue(p.getTerm(0) == Literal.DefaultNS);
}
public void testConstants() throws ParseException {
Unifier u = new Unifier();
// A = 10 // unifies
assertTrue(u.unifies(new VarTerm("A"), ASSyntax.parseTerm("10")));
assertEquals("10", u.get("A").toString());
// ns1::A = 10 // unifies
u = new Unifier();
assertTrue(u.unifies(ASSyntax.parseTerm("ns::A"), ASSyntax.parseTerm("10")));
assertEquals("10", u.get("A").toString());
// A::B = 10 // unifies (A -> default)
u = new Unifier();
assertTrue(u.unifies(ASSyntax.parseTerm("A::B"), ASSyntax.parseTerm("10")));
assertEquals("10", u.get("B").toString());
}
public void testCompare() throws ParseException {
Literal p1 = ASSyntax.parseLiteral("ns1::a");
Literal p2 = ASSyntax.parseLiteral("ns2::b");
Literal p3 = ASSyntax.parseLiteral("ns2::a");
//assertNotSame(p1.getPredicateIndicator().hashCode(), p2.getPredicateIndicator().hashCode() );
//assertNotSame(p1.getPredicateIndicator().hashCode(), p3.getPredicateIndicator().hashCode() );
assertNotSame(p1.hashCode(), p3.hashCode() );
assertEquals(p1.compareTo(p2), -1);
assertEquals(p1.compareTo(null), -1);
assertEquals(p2.compareTo(p1), 1);
assertEquals(p1.compareTo(p1), 0);
p1 = ASSyntax.parseLiteral("ns1::a");
p2 = ASSyntax.parseLiteral("ns1::b");
assertEquals(p1.compareTo(p2), -1);
assertEquals(p1.compareTo(null), -1);
assertEquals(p2.compareTo(p1), 1);
assertEquals(p1.compareTo(p1), 0);
}
public void testParserNS1() throws ParseException, JasonException {
as2j parser = new as2j(new StringReader("b(10). b(20). b(tell). ns71::b(30). default::b(40). !g(ok). +!g(X) <- .print(kk, 10, X). "));
parser.setNS(new Atom("ns33"));
Agent a = new Agent();
a.initAg();
parser.agent(a);
a.addInitialBelsInBB();
assertTrue(a.getBB().toString().contains("ns33::b(10)"));
assertTrue(a.getBB().toString().contains("ns33::b(20)"));
assertTrue(a.getBB().toString().contains("ns33::b(tell)")); // tell is reserved word
assertTrue(a.getPL().toString().contains("!ns33::g(ns33::X) <- .print(ns33::kk,10,ns33::X)"));
assertTrue(a.getInitialGoals().toString().equals("[ns33::g(ns33::ok)]"));
// BB iterator
int i = 0;
Iterator il = a.getBB().iterator();
while (il.hasNext()) {
//Literal l =
il.next();
i++;
}
assertEquals(5,i);
}
public void testParserNS2() throws ParseException, JasonException {
as2j parser = new as2j(new StringReader("+NS::tick <- .print(NS). "));
parser.setNS(new Atom("ns33"));
Agent a = new Agent();
a.initAg();
parser.agent(a);
assertTrue(a.getPL().toString().contains("[source(self)] +NS::tick <- .print(ns33::NS)."));
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy